diff --git a/abi-bindings/go/ERC20Destination/ERC20Destination.go b/abi-bindings/go/ERC20Destination/ERC20Destination.go index 601c229f..c69d6419 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\"},{\"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: "0x6101406040523480156200001257600080fd5b5060405162002c1038038062002c10833981016040819052620000359162000434565b6001600055828288888888308484816001600160a01b038116620000c65760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa15801562000111573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001379190620004fc565b60025550620001463362000223565b620001518162000275565b505060c08390526001600160a01b0380831660e0528116610100526040805163084279ef60e31b8152905173020000000000000000000000000000000000000591634213cf789160048083019260209291908290030181865afa158015620001bd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e39190620004fc565b60a0525060079350620001fd9250859150839050620005a5565b5060086200020c8282620005a5565b50505060ff16610120525062000671945050505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6200027f620002f4565b6001600160a01b038116620002e65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620000bd565b620002f18162000223565b50565b6003546001600160a01b03163314620003505760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620000bd565b565b80516001600160a01b03811681146200036a57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200039757600080fd5b81516001600160401b0380821115620003b457620003b46200036f565b604051601f8301601f19908116603f01168101908282118183101715620003df57620003df6200036f565b81604052838152602092508683858801011115620003fc57600080fd5b600091505b8382101562000420578582018301518183018401529082019062000401565b600093810190920192909252949350505050565b600080600080600080600060e0888a0312156200045057600080fd5b6200045b8862000352565b96506200046b6020890162000352565b955060408801519450620004826060890162000352565b60808901519094506001600160401b0380821115620004a057600080fd5b620004ae8b838c0162000385565b945060a08a0151915080821115620004c557600080fd5b50620004d48a828b0162000385565b92505060c088015160ff81168114620004ec57600080fd5b8091505092959891949750929550565b6000602082840312156200050f57600080fd5b5051919050565b600181811c908216806200052b57607f821691505b6020821081036200054c57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620005a057600081815260208120601f850160051c810160208610156200057b5750805b601f850160051c820191505b818110156200059c5782815560010162000587565b5050505b505050565b81516001600160401b03811115620005c157620005c16200036f565b620005d981620005d2845462000516565b8462000552565b602080601f831160018114620006115760008415620005f85750858301515b600019600386901b1c1916600185901b1785556200059c565b600085815260208120601f198616915b82811015620006425788860151825594840194600190910190840162000621565b5085821015620006615787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e05161010051610120516125106200070060003960006102a40152600081816103a8015261150d01526000818161044a0152818161111401526114d30152600081816102660152818161108c01526114ad0152600081816103e201526111e70152600081816102140152818161083501528181610de90152611b4d01526125106000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c8063715018a6116100f9578063c868efaa11610097578063dd62ed3e11610071578063dd62ed3e1461040c578063e8535e931461041f578063f2fde38b14610432578063f5ea06031461044557600080fd5b8063c868efaa146103ca578063d127dc9b146103dd578063d2cc7a701461040457600080fd5b806397314297116100d35780639731429714610351578063a457c2d71461037d578063a9059cbb14610390578063b8df0dea146103a357600080fd5b8063715018a6146103305780638da5cb5b1461033857806395d89b411461034957600080fd5b806329b7b3fd11610166578063395093511161014057806339509351146102ce5780634511243e146102e15780635eb99514146102f457806370a082311461030757600080fd5b806329b7b3fd146102615780632b0d8f1814610288578063313ce5671461029d57600080fd5b806306fdde03146101ae578063095ea7b3146101cc57806310397b01146101ef57806318160ddd146102075780631a7f5bec1461020f57806323b872dd1461024e575b600080fd5b6101b661046c565b6040516101c3919061202b565b60405180910390f35b6101df6101da366004612053565b6104fe565b60405190151581526020016101c3565b6101f9620493e081565b6040519081526020016101c3565b6006546101f9565b6102367f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101c3565b6101df61025c36600461207f565b610518565b6101f97f000000000000000000000000000000000000000000000000000000000000000081565b61029b6102963660046120c0565b61053c565b005b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101c3565b6101df6102dc366004612053565b610641565b61029b6102ef3660046120c0565b610663565b61029b6103023660046120dd565b610760565b6101f96103153660046120c0565b6001600160a01b031660009081526004602052604090205490565b61029b610774565b6003546001600160a01b0316610236565b6101b6610788565b6101df61035f3660046120c0565b6001600160a01b031660009081526001602052604090205460ff1690565b6101df61038b366004612053565b610797565b6101df61039e366004612053565b610812565b6102367f000000000000000000000000000000000000000000000000000000000000000081565b61029b6103d83660046120f6565b610820565b6101f97f000000000000000000000000000000000000000000000000000000000000000081565b6002546101f9565b6101f961041a36600461217f565b6109ea565b61029b61042d3660046121b8565b610a15565b61029b6104403660046120c0565b610a23565b6102367f000000000000000000000000000000000000000000000000000000000000000081565b60606007805461047b906121f4565b80601f01602080910402602001604051908101604052809291908181526020018280546104a7906121f4565b80156104f45780601f106104c9576101008083540402835291602001916104f4565b820191906000526020600020905b8154815290600101906020018083116104d757829003601f168201915b5050505050905090565b60003361050c818585610a99565b60019150505b92915050565b600033610526858285610bbe565b610531858585610c32565b506001949350505050565b610544610ddd565b6001600160a01b0381166105735760405162461bcd60e51b815260040161056a9061222e565b60405180910390fd5b6001600160a01b03811660009081526001602052604090205460ff16156105f25760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b606482015260840161056a565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b60003361050c81858561065483836109ea565b61065e9190612292565b610a99565b61066b610ddd565b6001600160a01b0381166106915760405162461bcd60e51b815260040161056a9061222e565b6001600160a01b03811660009081526001602052604090205460ff1661070b5760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b606482015260840161056a565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600160205260409020805460ff19169055565b610768610ddd565b61077181610de5565b50565b61077c610f85565b6107866000610fdf565b565b60606008805461047b906121f4565b600033816107a582866109ea565b9050838110156108055760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161056a565b6105318286868403610a99565b60003361050c818585610c32565b610828611031565b6002546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561089f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c391906122a5565b101561092a5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b606482015260840161056a565b6109333361035f565b156109995760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b606482015260840161056a565b6109da848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061108a92505050565b6109e46001600055565b50505050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b610a1f82826111e5565b5050565b610a2b610f85565b6001600160a01b038116610a905760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161056a565b61077181610fdf565b6001600160a01b038316610afb5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161056a565b6001600160a01b038216610b5c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161056a565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6000610bca84846109ea565b905060001981146109e45781811015610c255760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161056a565b6109e48484848403610a99565b6001600160a01b038316610c965760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161056a565b6001600160a01b038216610cf85760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161056a565b6001600160a01b03831660009081526004602052604090205481811015610d705760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161056a565b6001600160a01b0380851660008181526004602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610dd09086815260200190565b60405180910390a36109e4565b610786610f85565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e6991906122a5565b60025490915081831115610ed95760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b606482015260840161056a565b808311610f4e5760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e00606482015260840161056a565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6003546001600160a01b031633146107865760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161056a565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6002600054036110835760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161056a565b6002600055565b7f000000000000000000000000000000000000000000000000000000000000000083146111125760405162461bcd60e51b815260206004820152603060248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e766160448201526f3634b21039b7bab931b29031b430b4b760811b606482015260840161056a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316146111b95760405162461bcd60e51b815260206004820152603860248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e766160448201527f6c696420746f6b656e20736f7572636520616464726573730000000000000000606482015260840161056a565b600080828060200190518101906111d091906122be565b915091506111de82826116a5565b5050505050565b7f000000000000000000000000000000000000000000000000000000000000000082350361127b5760405162461bcd60e51b815260206004820152603760248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a2063616e6e60448201527f6f742062726964676520746f2073616d6520636861696e000000000000000000606482015260840161056a565b600061128d60408401602085016120c0565b6001600160a01b0316036113095760405162461bcd60e51b815260206004820152603b60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f60448201527f2064657374696e6174696f6e2062726964676520616464726573730000000000606482015260840161056a565b600061131b60608401604085016120c0565b6001600160a01b03160361138c5760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f60448201527120726563697069656e74206164647265737360701b606482015260840161056a565b611395816116af565b9050600081116113fc5760405162461bcd60e51b815260206004820152602c60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f60448201526b081cd95b9908185b5bdd5b9d60a21b606482015260840161056a565b61140e60808301356060840135612292565b81116114825760405162461bcd60e51b815260206004820152603d60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420616d6f756e7420746f20636f7665722066656573000000606482015260840161056a565b6114906060830135826122ec565b905061149b816116bb565b60006116626040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815260200160405180604001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815260200187606001358152508152602001620493e08152602001858060a0019061156091906122ff565b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505050908252506040805160c081018252873581526020928301929091828201916115bc918a01908a016120c0565b6001600160a01b031681526020016115da6060890160408a016120c0565b6001600160a01b03168152608088013560208201526000604082015260600161160660a08901896122ff565b80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250505091525060405161164b91908790602001612394565b6040516020818303038152906040528152506116c5565b9050336001600160a01b0316817f35971507d5275c40cb225115b67b12c9e28b4bb02e60366a5863d8320bd6386584604051610bb191815260200190565b505050565b610a1f82826117eb565b600061051230836118ac565b6107713082611a14565b6000806116d0611b48565b60408401516020015190915015611775576040830151516001600160a01b03166117525760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b606482015260840161056a565b604083015160208101519051611775916001600160a01b03909116908390611c5c565b604051630624488560e41b81526001600160a01b038216906362448850906117a1908690600401612401565b6020604051808303816000875af11580156117c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e491906122a5565b9392505050565b6001600160a01b0382166118415760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161056a565b80600660008282546118539190612292565b90915550506001600160a01b0382166000818152600460209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa1580156118f5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061191991906122a5565b90506119306001600160a01b038516333086611d41565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015611977573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061199b91906122a5565b9050818111611a015760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b606482015260840161056a565b611a0b82826122ec565b95945050505050565b6001600160a01b038216611a745760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161056a565b6001600160a01b03821660009081526004602052604090205481811015611ae85760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161056a565b6001600160a01b03831660008181526004602090815260408083208686039055600680548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ba9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bcd919061247f565b9050611bf1816001600160a01b031660009081526001602052604090205460ff1690565b15611c575760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b606482015260840161056a565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015611cad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cd191906122a5565b611cdb9190612292565b6040516001600160a01b0385166024820152604481018290529091506109e490859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611d79565b6040516001600160a01b03808516602483015283166044820152606481018290526109e49085906323b872dd60e01b90608401611d0a565b6000611dce826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611e4b9092919063ffffffff16565b8051909150156116a05780806020019051810190611dec919061249c565b6116a05760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161056a565b6060611e5a8484600085611e62565b949350505050565b606082471015611ec35760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161056a565b600080866001600160a01b03168587604051611edf91906124be565b60006040518083038185875af1925050503d8060008114611f1c576040519150601f19603f3d011682016040523d82523d6000602084013e611f21565b606091505b5091509150611f3287838387611f3d565b979650505050505050565b60608315611fac578251600003611fa5576001600160a01b0385163b611fa55760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161056a565b5081611e5a565b611e5a8383815115611fc15781518083602001fd5b8060405162461bcd60e51b815260040161056a919061202b565b60005b83811015611ff6578181015183820152602001611fde565b50506000910152565b60008151808452612017816020860160208601611fdb565b601f01601f19169290920160200192915050565b6020815260006117e46020830184611fff565b6001600160a01b038116811461077157600080fd5b6000806040838503121561206657600080fd5b82356120718161203e565b946020939093013593505050565b60008060006060848603121561209457600080fd5b833561209f8161203e565b925060208401356120af8161203e565b929592945050506040919091013590565b6000602082840312156120d257600080fd5b81356117e48161203e565b6000602082840312156120ef57600080fd5b5035919050565b6000806000806060858703121561210c57600080fd5b84359350602085013561211e8161203e565b9250604085013567ffffffffffffffff8082111561213b57600080fd5b818701915087601f83011261214f57600080fd5b81358181111561215e57600080fd5b88602082850101111561217057600080fd5b95989497505060200194505050565b6000806040838503121561219257600080fd5b823561219d8161203e565b915060208301356121ad8161203e565b809150509250929050565b600080604083850312156121cb57600080fd5b823567ffffffffffffffff8111156121e257600080fd5b830160c0818603121561207157600080fd5b600181811c9082168061220857607f821691505b60208210810361222857634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b808201808211156105125761051261227c565b6000602082840312156122b757600080fd5b5051919050565b600080604083850312156122d157600080fd5b82516122dc8161203e565b6020939093015192949293505050565b818103818111156105125761051261227c565b6000808335601e1984360301811261231657600080fd5b83018035915067ffffffffffffffff82111561233157600080fd5b6020019150600581901b360382131561234957600080fd5b9250929050565b600081518084526020808501945080840160005b838110156123895781516001600160a01b031687529582019590820190600101612364565b509495945050505050565b60408152825160408201526000602084015160018060a01b0380821660608501528060408701511660808501525050606084015160a0830152608084015160c083015260a084015160c060e08401526123f1610100840182612350565b9150508260208301529392505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c0840152612462610100840182612350565b905060a0840151601f198483030160e0850152611a0b8282611fff565b60006020828403121561249157600080fd5b81516117e48161203e565b6000602082840312156124ae57600080fd5b815180151581146117e457600080fd5b600082516124d0818460208701611fdb565b919091019291505056fea26469706673582212207ac9caf0486ee2fd6a5192b70ae05209aa85a409de04935329cdd4f70b7210d464736f6c63430008120033", + Bin: "0x6101406040523480156200001257600080fd5b5060405162002ccc38038062002ccc833981016040819052620000359162000434565b6001600055828288888888308484816001600160a01b038116620000c65760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa15801562000111573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001379190620004fc565b60025550620001463362000223565b620001518162000275565b505060c08390526001600160a01b0380831660e0528116610100526040805163084279ef60e31b8152905173020000000000000000000000000000000000000591634213cf789160048083019260209291908290030181865afa158015620001bd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e39190620004fc565b60a0525060079350620001fd9250859150839050620005a5565b5060086200020c8282620005a5565b50505060ff16610120525062000671945050505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6200027f620002f4565b6001600160a01b038116620002e65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620000bd565b620002f18162000223565b50565b6003546001600160a01b03163314620003505760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620000bd565b565b80516001600160a01b03811681146200036a57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200039757600080fd5b81516001600160401b0380821115620003b457620003b46200036f565b604051601f8301601f19908116603f01168101908282118183101715620003df57620003df6200036f565b81604052838152602092508683858801011115620003fc57600080fd5b600091505b8382101562000420578582018301518183018401529082019062000401565b600093810190920192909252949350505050565b600080600080600080600060e0888a0312156200045057600080fd5b6200045b8862000352565b96506200046b6020890162000352565b955060408801519450620004826060890162000352565b60808901519094506001600160401b0380821115620004a057600080fd5b620004ae8b838c0162000385565b945060a08a0151915080821115620004c557600080fd5b50620004d48a828b0162000385565b92505060c088015160ff81168114620004ec57600080fd5b8091505092959891949750929550565b6000602082840312156200050f57600080fd5b5051919050565b600181811c908216806200052b57607f821691505b6020821081036200054c57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620005a057600081815260208120601f850160051c810160208610156200057b5750805b601f850160051c820191505b818110156200059c5782815560010162000587565b5050505b505050565b81516001600160401b03811115620005c157620005c16200036f565b620005d981620005d2845462000516565b8462000552565b602080601f831160018114620006115760008415620005f85750858301515b600019600386901b1c1916600185901b1785556200059c565b600085815260208120601f198616915b82811015620006425788860151825594840194600190910190840162000621565b5085821015620006615787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e05161010051610120516125be6200070e60003960006102a40152600081816103a8015261155e01526000818161044a015281816111140152818161132801526115240152600081816102660152818161108c015281816112f801526114fe0152600081816103e201526113800152600081816102140152818161083501528181610de90152611b9e01526125be6000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c8063715018a6116100f9578063c868efaa11610097578063dd62ed3e11610071578063dd62ed3e1461040c578063e8535e931461041f578063f2fde38b14610432578063f5ea06031461044557600080fd5b8063c868efaa146103ca578063d127dc9b146103dd578063d2cc7a701461040457600080fd5b806397314297116100d35780639731429714610351578063a457c2d71461037d578063a9059cbb14610390578063b8df0dea146103a357600080fd5b8063715018a6146103305780638da5cb5b1461033857806395d89b411461034957600080fd5b806329b7b3fd11610166578063395093511161014057806339509351146102ce5780634511243e146102e15780635eb99514146102f457806370a082311461030757600080fd5b806329b7b3fd146102615780632b0d8f1814610288578063313ce5671461029d57600080fd5b806306fdde03146101ae578063095ea7b3146101cc57806310397b01146101ef57806318160ddd146102075780631a7f5bec1461020f57806323b872dd1461024e575b600080fd5b6101b661046c565b6040516101c3919061207c565b60405180910390f35b6101df6101da3660046120a4565b6104fe565b60405190151581526020016101c3565b6101f9620493e081565b6040519081526020016101c3565b6006546101f9565b6102367f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101c3565b6101df61025c3660046120d0565b610518565b6101f97f000000000000000000000000000000000000000000000000000000000000000081565b61029b610296366004612111565b61053c565b005b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101c3565b6101df6102dc3660046120a4565b610641565b61029b6102ef366004612111565b610663565b61029b61030236600461212e565b610760565b6101f9610315366004612111565b6001600160a01b031660009081526004602052604090205490565b61029b610774565b6003546001600160a01b0316610236565b6101b6610788565b6101df61035f366004612111565b6001600160a01b031660009081526001602052604090205460ff1690565b6101df61038b3660046120a4565b610797565b6101df61039e3660046120a4565b610812565b6102367f000000000000000000000000000000000000000000000000000000000000000081565b61029b6103d8366004612147565b610820565b6101f97f000000000000000000000000000000000000000000000000000000000000000081565b6002546101f9565b6101f961041a3660046121d0565b6109ea565b61029b61042d366004612209565b610a15565b61029b610440366004612111565b610a23565b6102367f000000000000000000000000000000000000000000000000000000000000000081565b60606007805461047b90612245565b80601f01602080910402602001604051908101604052809291908181526020018280546104a790612245565b80156104f45780601f106104c9576101008083540402835291602001916104f4565b820191906000526020600020905b8154815290600101906020018083116104d757829003601f168201915b5050505050905090565b60003361050c818585610a99565b60019150505b92915050565b600033610526858285610bbe565b610531858585610c32565b506001949350505050565b610544610ddd565b6001600160a01b0381166105735760405162461bcd60e51b815260040161056a9061227f565b60405180910390fd5b6001600160a01b03811660009081526001602052604090205460ff16156105f25760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b606482015260840161056a565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b60003361050c81858561065483836109ea565b61065e91906122e3565b610a99565b61066b610ddd565b6001600160a01b0381166106915760405162461bcd60e51b815260040161056a9061227f565b6001600160a01b03811660009081526001602052604090205460ff1661070b5760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b606482015260840161056a565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600160205260409020805460ff19169055565b610768610ddd565b61077181610de5565b50565b61077c610f85565b6107866000610fdf565b565b60606008805461047b90612245565b600033816107a582866109ea565b9050838110156108055760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161056a565b6105318286868403610a99565b60003361050c818585610c32565b610828611031565b6002546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561089f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c391906122f6565b101561092a5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b606482015260840161056a565b6109333361035f565b156109995760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b606482015260840161056a565b6109da848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061108a92505050565b6109e46001600055565b50505050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b610a1f82826111e5565b5050565b610a2b610f85565b6001600160a01b038116610a905760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161056a565b61077181610fdf565b6001600160a01b038316610afb5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161056a565b6001600160a01b038216610b5c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161056a565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6000610bca84846109ea565b905060001981146109e45781811015610c255760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161056a565b6109e48484848403610a99565b6001600160a01b038316610c965760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161056a565b6001600160a01b038216610cf85760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161056a565b6001600160a01b03831660009081526004602052604090205481811015610d705760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161056a565b6001600160a01b0380851660008181526004602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610dd09086815260200190565b60405180910390a36109e4565b610786610f85565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e6991906122f6565b60025490915081831115610ed95760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b606482015260840161056a565b808311610f4e5760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e00606482015260840161056a565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6003546001600160a01b031633146107865760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161056a565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6002600054036110835760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161056a565b6002600055565b7f000000000000000000000000000000000000000000000000000000000000000083146111125760405162461bcd60e51b815260206004820152603060248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e766160448201526f3634b21039b7bab931b29031b430b4b760811b606482015260840161056a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316146111b95760405162461bcd60e51b815260206004820152603860248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e766160448201527f6c696420746f6b656e20736f7572636520616464726573730000000000000000606482015260840161056a565b600080828060200190518101906111d0919061230f565b915091506111de82826116f6565b5050505050565b60006111f76040840160208501612111565b6001600160a01b0316036112735760405162461bcd60e51b815260206004820152603b60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f60448201527f2064657374696e6174696f6e2062726964676520616464726573730000000000606482015260840161056a565b60006112856060840160408501612111565b6001600160a01b0316036112f65760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f60448201527120726563697069656e74206164647265737360701b606482015260840161056a565b7f000000000000000000000000000000000000000000000000000000000000000082350361137e576001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166113586040840160208501612111565b6001600160a01b03161461137e5760405162461bcd60e51b815260040161056a9061233d565b7f00000000000000000000000000000000000000000000000000000000000000008235036113dd57306113b76040840160208501612111565b6001600160a01b0316036113dd5760405162461bcd60e51b815260040161056a9061233d565b6113e681611700565b90506000811161144d5760405162461bcd60e51b815260206004820152602c60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f60448201526b081cd95b9908185b5bdd5b9d60a21b606482015260840161056a565b61145f608083013560608401356122e3565b81116114d35760405162461bcd60e51b815260206004820152603d60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420616d6f756e7420746f20636f7665722066656573000000606482015260840161056a565b6114e160608301358261239a565b90506114ec8161170c565b60006116b36040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815260200160405180604001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815260200187606001358152508152602001620493e08152602001858060a001906115b191906123ad565b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505050908252506040805160c0810182528735815260209283019290918282019161160d918a01908a01612111565b6001600160a01b0316815260200161162b6060890160408a01612111565b6001600160a01b03168152608088013560208201526000604082015260600161165760a08901896123ad565b80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250505091525060405161169c91908790602001612442565b604051602081830303815290604052815250611716565b9050336001600160a01b0316817f35971507d5275c40cb225115b67b12c9e28b4bb02e60366a5863d8320bd6386584604051610bb191815260200190565b505050565b610a1f828261183c565b600061051230836118fd565b6107713082611a65565b600080611721611b99565b604084015160200151909150156117c6576040830151516001600160a01b03166117a35760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b606482015260840161056a565b6040830151602081015190516117c6916001600160a01b03909116908390611cad565b604051630624488560e41b81526001600160a01b038216906362448850906117f29086906004016124af565b6020604051808303816000875af1158015611811573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061183591906122f6565b9392505050565b6001600160a01b0382166118925760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161056a565b80600660008282546118a491906122e3565b90915550506001600160a01b0382166000818152600460209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa158015611946573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061196a91906122f6565b90506119816001600160a01b038516333086611d92565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa1580156119c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ec91906122f6565b9050818111611a525760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b606482015260840161056a565b611a5c828261239a565b95945050505050565b6001600160a01b038216611ac55760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161056a565b6001600160a01b03821660009081526004602052604090205481811015611b395760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161056a565b6001600160a01b03831660008181526004602090815260408083208686039055600680548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bfa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c1e919061252d565b9050611c42816001600160a01b031660009081526001602052604090205460ff1690565b15611ca85760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b606482015260840161056a565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015611cfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d2291906122f6565b611d2c91906122e3565b6040516001600160a01b0385166024820152604481018290529091506109e490859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611dca565b6040516001600160a01b03808516602483015283166044820152606481018290526109e49085906323b872dd60e01b90608401611d5b565b6000611e1f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611e9c9092919063ffffffff16565b8051909150156116f15780806020019051810190611e3d919061254a565b6116f15760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161056a565b6060611eab8484600085611eb3565b949350505050565b606082471015611f145760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161056a565b600080866001600160a01b03168587604051611f30919061256c565b60006040518083038185875af1925050503d8060008114611f6d576040519150601f19603f3d011682016040523d82523d6000602084013e611f72565b606091505b5091509150611f8387838387611f8e565b979650505050505050565b60608315611ffd578251600003611ff6576001600160a01b0385163b611ff65760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161056a565b5081611eab565b611eab83838151156120125781518083602001fd5b8060405162461bcd60e51b815260040161056a919061207c565b60005b8381101561204757818101518382015260200161202f565b50506000910152565b6000815180845261206881602086016020860161202c565b601f01601f19169290920160200192915050565b6020815260006118356020830184612050565b6001600160a01b038116811461077157600080fd5b600080604083850312156120b757600080fd5b82356120c28161208f565b946020939093013593505050565b6000806000606084860312156120e557600080fd5b83356120f08161208f565b925060208401356121008161208f565b929592945050506040919091013590565b60006020828403121561212357600080fd5b81356118358161208f565b60006020828403121561214057600080fd5b5035919050565b6000806000806060858703121561215d57600080fd5b84359350602085013561216f8161208f565b9250604085013567ffffffffffffffff8082111561218c57600080fd5b818701915087601f8301126121a057600080fd5b8135818111156121af57600080fd5b8860208285010111156121c157600080fd5b95989497505060200194505050565b600080604083850312156121e357600080fd5b82356121ee8161208f565b915060208301356121fe8161208f565b809150509250929050565b6000806040838503121561221c57600080fd5b823567ffffffffffffffff81111561223357600080fd5b830160c081860312156120c257600080fd5b600181811c9082168061225957607f821691505b60208210810361227957634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610512576105126122cd565b60006020828403121561230857600080fd5b5051919050565b6000806040838503121561232257600080fd5b825161232d8161208f565b6020939093015192949293505050565b6020808252603e908201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e766160408201527f6c69642064657374696e6174696f6e2062726964676520616464726573730000606082015260800190565b81810381811115610512576105126122cd565b6000808335601e198436030181126123c457600080fd5b83018035915067ffffffffffffffff8211156123df57600080fd5b6020019150600581901b36038213156123f757600080fd5b9250929050565b600081518084526020808501945080840160005b838110156124375781516001600160a01b031687529582019590820190600101612412565b509495945050505050565b60408152825160408201526000602084015160018060a01b0380821660608501528060408701511660808501525050606084015160a0830152608084015160c083015260a084015160c060e084015261249f6101008401826123fe565b9150508260208301529392505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c08401526125106101008401826123fe565b905060a0840151601f198483030160e0850152611a5c8282612050565b60006020828403121561253f57600080fd5b81516118358161208f565b60006020828403121561255c57600080fd5b8151801515811461183557600080fd5b6000825161257e81846020870161202c565b919091019291505056fea2646970667358221220918e37dcd438d6ee74fe3ca8756d78bd81a3d1f4c9fb17d3b2fcee401695d59c64736f6c63430008120033", } // 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 de2cf095..654ce568 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\"},{\"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: "0x6101006040523480156200001257600080fd5b506040516200215b3803806200215b83398101604081905262000035916200033a565b60016000558282828282816001600160a01b038116620000c25760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa1580156200010d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000133919062000384565b600255506200014233620001ee565b6200014d8162000240565b50506001600160a01b03811660c0526040805163084279ef60e31b8152905173020000000000000000000000000000000000000591634213cf789160048083019260209291908290030181865afa158015620001ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001d3919062000384565b60a0525050506001600160a01b031660e052506200039e9050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6200024a620002bf565b6001600160a01b038116620002b15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620000b9565b620002bc81620001ee565b50565b6003546001600160a01b031633146200031b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620000b9565b565b80516001600160a01b03811681146200033557600080fd5b919050565b6000806000606084860312156200035057600080fd5b6200035b846200031d565b92506200036b602085016200031d565b91506200037b604085016200031d565b90509250925092565b6000602082840312156200039757600080fd5b5051919050565b60805160a05160c05160e051611d4b62000410600039600081816102b001528181610f590152610f870152600081816102210152610e7201526000818161025b01528181610ada0152610b91015260008181610152015281816105110152818161075e01526112ad0152611d4b6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80639731429711610097578063d2cc7a7011610066578063d2cc7a701461027d578063e8535e9314610285578063f2fde38b14610298578063fc0c546a146102ab57600080fd5b806397314297146101e0578063b8df0dea1461021c578063c868efaa14610243578063d127dc9b1461025657600080fd5b80634511243e116100d35780634511243e146101a15780635eb99514146101b4578063715018a6146101c75780638da5cb5b146101cf57600080fd5b806302ee3e9c1461010557806310397b01146101435780631a7f5bec1461014d5780632b0d8f181461018c575b600080fd5b61013061011336600461171d565b600460209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b610130620493e081565b6101747f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161013a565b61019f61019a36600461174d565b6102d2565b005b61019f6101af36600461174d565b6103d7565b61019f6101c236600461176a565b6104d4565b61019f6104e8565b6003546001600160a01b0316610174565b61020c6101ee36600461174d565b6001600160a01b031660009081526001602052604090205460ff1690565b604051901515815260200161013a565b6101747f000000000000000000000000000000000000000000000000000000000000000081565b61019f610251366004611783565b6104fc565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b600254610130565b61019f61029336600461180c565b6106c6565b61019f6102a636600461174d565b6106dc565b6101747f000000000000000000000000000000000000000000000000000000000000000081565b6102da610752565b6001600160a01b0381166103095760405162461bcd60e51b815260040161030090611856565b60405180910390fd5b6001600160a01b03811660009081526001602052604090205460ff16156103885760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b6064820152608401610300565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b6103df610752565b6001600160a01b0381166104055760405162461bcd60e51b815260040161030090611856565b6001600160a01b03811660009081526001602052604090205460ff1661047f5760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b6064820152608401610300565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600160205260409020805460ff19169055565b6104dc610752565b6104e58161075a565b50565b6104f06108fa565b6104fa6000610954565b565b6105046109a6565b6002546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561057b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059f91906118a4565b10156106065760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b6064820152608401610300565b61060f336101ee565b156106755760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b6064820152608401610300565b6106b6848484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506109ff92505050565b6106c06001600055565b50505050565b6106d86106d283611951565b82610b8d565b5050565b6106e46108fa565b6001600160a01b0381166107495760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610300565b6104e581610954565b6104fa6108fa565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107de91906118a4565b6002549091508183111561084e5760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b6064820152608401610300565b8083116108c35760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e006064820152608401610300565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6003546001600160a01b031633146104fa5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610300565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6002600054036109f85760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610300565b6002600055565b60008082806020019051810190610a169190611a3f565b60008781526004602090815260408083206001600160a01b038a168452909152902054919350915081811015610aa95760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a20696e73756666696369604482015271656e74206272696467652062616c616e636560701b6064820152608401610300565b610ab38282611b6f565b60008781526004602090815260408083206001600160a01b038a16845290915290205582517f00000000000000000000000000000000000000000000000000000000000000009003610b875760208301516001600160a01b03163014610b715760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a20696e76616c6964206260448201526c7269646765206164647265737360981b6064820152608401610300565b610b7f836040015183610f4c565b505050505050565b610b7f83835b81517f00000000000000000000000000000000000000000000000000000000000000009003610c195760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a2063616e6e6f7420627260448201527134b233b2903a379039b0b6b29031b430b4b760711b6064820152608401610300565b60208201516001600160a01b0316610c925760405162461bcd60e51b815260206004820152603660248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f2064657374604482015275696e6174696f6e20627269646765206164647265737360501b6064820152608401610300565b60408201516001600160a01b0316610d025760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f207265636960448201526c7069656e74206164647265737360981b6064820152608401610300565b610d0b81610f80565b905060008111610d6d5760405162461bcd60e51b815260206004820152602760248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f2073656e6460448201526608185b5bdd5b9d60ca1b6064820152608401610300565b81606001518111610de65760405162461bcd60e51b815260206004820152603860248201527f54656c65706f72746572546f6b656e536f757263653a20696e7375666669636960448201527f656e7420616d6f756e7420746f20636f766572206665657300000000000000006064820152608401610300565b6060820151610df59082611b6f565b82516000908152600460209081526040808320828701516001600160a01b03168452909152812080549293508392909190610e31908490611b82565b925050819055506000610f016040518060c001604052808560000151815260200185602001516001600160a01b0316815260200160405180604001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815260200187606001518152508152602001620493e081526020018560a001518152602001856040015185604051602001610eea9291906001600160a01b03929092168252602082015260400190565b604051602081830303815290604052815250610fb2565b9050336001600160a01b0316817f35971507d5275c40cb225115b67b12c9e28b4bb02e60366a5863d8320bd6386584604051610f3f91815260200190565b60405180910390a3505050565b6106d86001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001683836110d8565b6000610fac7f000000000000000000000000000000000000000000000000000000000000000083611140565b92915050565b600080610fbd6112a8565b60408401516020015190915015611062576040830151516001600160a01b031661103f5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b6064820152608401610300565b604083015160208101519051611062916001600160a01b039091169083906113bc565b604051630624488560e41b81526001600160a01b0382169063624488509061108e908690600401611c29565b6020604051808303816000875af11580156110ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d191906118a4565b9392505050565b6040516001600160a01b03831660248201526044810182905261113b90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261146e565b505050565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa158015611189573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ad91906118a4565b90506111c46001600160a01b038516333086611540565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa15801561120b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122f91906118a4565b90508181116112955760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b6064820152608401610300565b61129f8282611b6f565b95945050505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611309573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132d9190611ca7565b9050611351816001600160a01b031660009081526001602052604090205460ff1690565b156113b75760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b6064820152608401610300565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa15801561140d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143191906118a4565b61143b9190611b82565b6040516001600160a01b0385166024820152604481018290529091506106c090859063095ea7b360e01b90606401611104565b60006114c3826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166115789092919063ffffffff16565b80519091501561113b57808060200190518101906114e19190611cc4565b61113b5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610300565b6040516001600160a01b03808516602483015283166044820152606481018290526106c09085906323b872dd60e01b90608401611104565b6060611587848460008561158f565b949350505050565b6060824710156115f05760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610300565b600080866001600160a01b0316858760405161160c9190611ce6565b60006040518083038185875af1925050503d8060008114611649576040519150601f19603f3d011682016040523d82523d6000602084013e61164e565b606091505b509150915061165f8783838761166a565b979650505050505050565b606083156116d95782516000036116d2576001600160a01b0385163b6116d25760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610300565b5081611587565b61158783838151156116ee5781518083602001fd5b8060405162461bcd60e51b81526004016103009190611d02565b6001600160a01b03811681146104e557600080fd5b6000806040838503121561173057600080fd5b82359150602083013561174281611708565b809150509250929050565b60006020828403121561175f57600080fd5b81356110d181611708565b60006020828403121561177c57600080fd5b5035919050565b6000806000806060858703121561179957600080fd5b8435935060208501356117ab81611708565b9250604085013567ffffffffffffffff808211156117c857600080fd5b818701915087601f8301126117dc57600080fd5b8135818111156117eb57600080fd5b8860208285010111156117fd57600080fd5b95989497505060200194505050565b6000806040838503121561181f57600080fd5b823567ffffffffffffffff81111561183657600080fd5b830160c0818603121561184857600080fd5b946020939093013593505050565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b6000602082840312156118b657600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b60405160c0810167ffffffffffffffff811182821017156118f6576118f66118bd565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715611925576119256118bd565b604052919050565b600067ffffffffffffffff821115611947576119476118bd565b5060051b60200190565b600060c0823603121561196357600080fd5b61196b6118d3565b8235815260208084013561197e81611708565b82820152604084013561199081611708565b80604084015250606084013560608301526080840135608083015260a084013567ffffffffffffffff8111156119c557600080fd5b840136601f8201126119d657600080fd5b80356119e96119e48261192d565b6118fc565b81815260059190911b82018301908381019036831115611a0857600080fd5b928401925b82841015611a2f578335611a2081611708565b82529284019290840190611a0d565b60a0860152509295945050505050565b60008060408385031215611a5257600080fd5b825167ffffffffffffffff80821115611a6a57600080fd5b9084019060c08287031215611a7e57600080fd5b611a866118d3565b82518152602080840151611a9981611708565b828201526040840151611aab81611708565b80604084015250606084015160608301526080840151608083015260a084015183811115611ad857600080fd5b80850194505087601f850112611aed57600080fd5b83519250611afd6119e48461192d565b83815260059390931b84018101928181019089851115611b1c57600080fd5b948201945b84861015611b43578551611b3481611708565b82529482019490820190611b21565b60a0840152509590950151949694955050505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610fac57610fac611b59565b80820180821115610fac57610fac611b59565b600081518084526020808501945080840160005b83811015611bce5781516001600160a01b031687529582019590820190600101611ba9565b509495945050505050565b60005b83811015611bf4578181015183820152602001611bdc565b50506000910152565b60008151808452611c15816020860160208601611bd9565b601f01601f19169290920160200192915050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c0840152611c8a610100840182611b95565b905060a0840151601f198483030160e085015261129f8282611bfd565b600060208284031215611cb957600080fd5b81516110d181611708565b600060208284031215611cd657600080fd5b815180151581146110d157600080fd5b60008251611cf8818460208701611bd9565b9190910192915050565b6020815260006110d16020830184611bfd56fea2646970667358221220e625ed4739eac6466bb8c205771b4033278f2fa982f81897a0d242abec826fec64736f6c63430008120033", + Bin: "0x6101006040523480156200001257600080fd5b50604051620021663803806200216683398101604081905262000035916200033a565b60016000558282828282816001600160a01b038116620000c25760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa1580156200010d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000133919062000384565b600255506200014233620001ee565b6200014d8162000240565b50506001600160a01b03811660c0526040805163084279ef60e31b8152905173020000000000000000000000000000000000000591634213cf789160048083019260209291908290030181865afa158015620001ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001d3919062000384565b60a0525050506001600160a01b031660e052506200039e9050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6200024a620002bf565b6001600160a01b038116620002b15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620000b9565b620002bc81620001ee565b50565b6003546001600160a01b031633146200031b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620000b9565b565b80516001600160a01b03811681146200033557600080fd5b919050565b6000806000606084860312156200035057600080fd5b6200035b846200031d565b92506200036b602085016200031d565b91506200037b604085016200031d565b90509250925092565b6000602082840312156200039757600080fd5b5051919050565b60805160a05160c05160e051611d5662000410600039600081816102b001528181610f640152610f920152600081816102210152610e7c01526000818161025b01528181610adc0152610b95015260008181610152015281816105110152818161076001526112b80152611d566000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80639731429711610097578063d2cc7a7011610066578063d2cc7a701461027d578063e8535e9314610285578063f2fde38b14610298578063fc0c546a146102ab57600080fd5b806397314297146101e0578063b8df0dea1461021c578063c868efaa14610243578063d127dc9b1461025657600080fd5b80634511243e116100d35780634511243e146101a15780635eb99514146101b4578063715018a6146101c75780638da5cb5b146101cf57600080fd5b806302ee3e9c1461010557806310397b01146101435780631a7f5bec1461014d5780632b0d8f181461018c575b600080fd5b610130610113366004611728565b600460209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b610130620493e081565b6101747f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161013a565b61019f61019a366004611758565b6102d2565b005b61019f6101af366004611758565b6103d7565b61019f6101c2366004611775565b6104d4565b61019f6104e8565b6003546001600160a01b0316610174565b61020c6101ee366004611758565b6001600160a01b031660009081526001602052604090205460ff1690565b604051901515815260200161013a565b6101747f000000000000000000000000000000000000000000000000000000000000000081565b61019f61025136600461178e565b6104fc565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b600254610130565b61019f610293366004611817565b6106c6565b61019f6102a6366004611758565b6106de565b6101747f000000000000000000000000000000000000000000000000000000000000000081565b6102da610754565b6001600160a01b0381166103095760405162461bcd60e51b815260040161030090611861565b60405180910390fd5b6001600160a01b03811660009081526001602052604090205460ff16156103885760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b6064820152608401610300565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b6103df610754565b6001600160a01b0381166104055760405162461bcd60e51b815260040161030090611861565b6001600160a01b03811660009081526001602052604090205460ff1661047f5760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b6064820152608401610300565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600160205260409020805460ff19169055565b6104dc610754565b6104e58161075c565b50565b6104f06108fc565b6104fa6000610956565b565b6105046109a8565b6002546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561057b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059f91906118af565b10156106065760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b6064820152608401610300565b61060f336101ee565b156106755760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b6064820152608401610300565b6106b6848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610a0192505050565b6106c06001600055565b50505050565b6106da6106d28361195c565b826000610b91565b5050565b6106e66108fc565b6001600160a01b03811661074b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610300565b6104e581610956565b6104fa6108fc565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e091906118af565b600254909150818311156108505760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b6064820152608401610300565b8083116108c55760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e006064820152608401610300565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6003546001600160a01b031633146104fa5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610300565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6002600054036109fa5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610300565b6002600055565b60008082806020019051810190610a189190611a4a565b60008781526004602090815260408083206001600160a01b038a168452909152902054919350915081811015610aab5760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a20696e73756666696369604482015271656e74206272696467652062616c616e636560701b6064820152608401610300565b610ab58282611b7a565b60008781526004602090815260408083206001600160a01b038a16845290915290205582517f00000000000000000000000000000000000000000000000000000000000000009003610b895760208301516001600160a01b03163014610b735760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a20696e76616c6964206260448201526c7269646765206164647265737360981b6064820152608401610300565b610b81836040015183610f57565b505050505050565b610b81838360015b82517f00000000000000000000000000000000000000000000000000000000000000009003610c1d5760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a2063616e6e6f7420627260448201527134b233b2903a379039b0b6b29031b430b4b760711b6064820152608401610300565b60208301516001600160a01b0316610c965760405162461bcd60e51b815260206004820152603660248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f2064657374604482015275696e6174696f6e20627269646765206164647265737360501b6064820152608401610300565b60408301516001600160a01b0316610d065760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f207265636960448201526c7069656e74206164647265737360981b6064820152608401610300565b80610d1757610d1482610f8b565b91505b60008211610d775760405162461bcd60e51b815260206004820152602760248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f2073656e6460448201526608185b5bdd5b9d60ca1b6064820152608401610300565b82606001518211610df05760405162461bcd60e51b815260206004820152603860248201527f54656c65706f72746572546f6b656e536f757263653a20696e7375666669636960448201527f656e7420616d6f756e7420746f20636f766572206665657300000000000000006064820152608401610300565b6060830151610dff9083611b7a565b83516000908152600460209081526040808320828801516001600160a01b03168452909152812080549294508492909190610e3b908490611b8d565b925050819055506000610f0b6040518060c001604052808660000151815260200186602001516001600160a01b0316815260200160405180604001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815260200188606001518152508152602001620493e081526020018660a001518152602001866040015186604051602001610ef49291906001600160a01b03929092168252602082015260400190565b604051602081830303815290604052815250610fbd565b9050336001600160a01b0316817f35971507d5275c40cb225115b67b12c9e28b4bb02e60366a5863d8320bd6386585604051610f4991815260200190565b60405180910390a350505050565b6106da6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001683836110e3565b6000610fb77f00000000000000000000000000000000000000000000000000000000000000008361114b565b92915050565b600080610fc86112b3565b6040840151602001519091501561106d576040830151516001600160a01b031661104a5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b6064820152608401610300565b60408301516020810151905161106d916001600160a01b039091169083906113c7565b604051630624488560e41b81526001600160a01b03821690636244885090611099908690600401611c34565b6020604051808303816000875af11580156110b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110dc91906118af565b9392505050565b6040516001600160a01b03831660248201526044810182905261114690849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611479565b505050565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa158015611194573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b891906118af565b90506111cf6001600160a01b03851633308661154b565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015611216573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123a91906118af565b90508181116112a05760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b6064820152608401610300565b6112aa8282611b7a565b95945050505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611314573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113389190611cb2565b905061135c816001600160a01b031660009081526001602052604090205460ff1690565b156113c25760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b6064820152608401610300565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015611418573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143c91906118af565b6114469190611b8d565b6040516001600160a01b0385166024820152604481018290529091506106c090859063095ea7b360e01b9060640161110f565b60006114ce826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166115839092919063ffffffff16565b80519091501561114657808060200190518101906114ec9190611ccf565b6111465760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610300565b6040516001600160a01b03808516602483015283166044820152606481018290526106c09085906323b872dd60e01b9060840161110f565b6060611592848460008561159a565b949350505050565b6060824710156115fb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610300565b600080866001600160a01b031685876040516116179190611cf1565b60006040518083038185875af1925050503d8060008114611654576040519150601f19603f3d011682016040523d82523d6000602084013e611659565b606091505b509150915061166a87838387611675565b979650505050505050565b606083156116e45782516000036116dd576001600160a01b0385163b6116dd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610300565b5081611592565b61159283838151156116f95781518083602001fd5b8060405162461bcd60e51b81526004016103009190611d0d565b6001600160a01b03811681146104e557600080fd5b6000806040838503121561173b57600080fd5b82359150602083013561174d81611713565b809150509250929050565b60006020828403121561176a57600080fd5b81356110dc81611713565b60006020828403121561178757600080fd5b5035919050565b600080600080606085870312156117a457600080fd5b8435935060208501356117b681611713565b9250604085013567ffffffffffffffff808211156117d357600080fd5b818701915087601f8301126117e757600080fd5b8135818111156117f657600080fd5b88602082850101111561180857600080fd5b95989497505060200194505050565b6000806040838503121561182a57600080fd5b823567ffffffffffffffff81111561184157600080fd5b830160c0818603121561185357600080fd5b946020939093013593505050565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b6000602082840312156118c157600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b60405160c0810167ffffffffffffffff81118282101715611901576119016118c8565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715611930576119306118c8565b604052919050565b600067ffffffffffffffff821115611952576119526118c8565b5060051b60200190565b600060c0823603121561196e57600080fd5b6119766118de565b8235815260208084013561198981611713565b82820152604084013561199b81611713565b80604084015250606084013560608301526080840135608083015260a084013567ffffffffffffffff8111156119d057600080fd5b840136601f8201126119e157600080fd5b80356119f46119ef82611938565b611907565b81815260059190911b82018301908381019036831115611a1357600080fd5b928401925b82841015611a3a578335611a2b81611713565b82529284019290840190611a18565b60a0860152509295945050505050565b60008060408385031215611a5d57600080fd5b825167ffffffffffffffff80821115611a7557600080fd5b9084019060c08287031215611a8957600080fd5b611a916118de565b82518152602080840151611aa481611713565b828201526040840151611ab681611713565b80604084015250606084015160608301526080840151608083015260a084015183811115611ae357600080fd5b80850194505087601f850112611af857600080fd5b83519250611b086119ef84611938565b83815260059390931b84018101928181019089851115611b2757600080fd5b948201945b84861015611b4e578551611b3f81611713565b82529482019490820190611b2c565b60a0840152509590950151949694955050505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610fb757610fb7611b64565b80820180821115610fb757610fb7611b64565b600081518084526020808501945080840160005b83811015611bd95781516001600160a01b031687529582019590820190600101611bb4565b509495945050505050565b60005b83811015611bff578181015183820152602001611be7565b50506000910152565b60008151808452611c20816020860160208601611be4565b601f01601f19169290920160200192915050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c0840152611c95610100840182611ba0565b905060a0840151601f198483030160e08501526112aa8282611c08565b600060208284031215611cc457600080fd5b81516110dc81611713565b600060208284031215611ce157600080fd5b815180151581146110dc57600080fd5b60008251611d03818460208701611be4565b9190910192915050565b6020815260006110dc6020830184611c0856fea264697066735822122046f428a2e9676ea926b68a0ecee4ac7aaa6887f07d3b5591615801bce00c3d1d64736f6c63430008120033", } // 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 ee37652a..6ef8182d 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\"},{\"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\":[{\"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: "0x60e06040523480156200001157600080fd5b5060405162001f7738038062001f7783398101604081905262000034916200032e565b60016000558282828282816001600160a01b038116620000c15760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa1580156200010c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000132919062000378565b600255506200014133620001e2565b6200014c8162000234565b50506001600160a01b03811660c0526040805163084279ef60e31b8152905173020000000000000000000000000000000000000591634213cf789160048083019260209291908290030181865afa158015620001ac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001d2919062000378565b60a0525062000392945050505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6200023e620002b3565b6001600160a01b038116620002a55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620000b8565b620002b081620001e2565b50565b6003546001600160a01b031633146200030f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620000b8565b565b80516001600160a01b03811681146200032957600080fd5b919050565b6000806000606084860312156200034457600080fd5b6200034f8462000311565b92506200035f6020850162000311565b91506200036f6040850162000311565b90509250925092565b6000602082840312156200038b57600080fd5b5051919050565b60805160a05160c051611b8b620003ec6000396000818161028b0152610eda0152600081816102df01528181610b4d0152610c0401526000818161016101528181610588015281816107d1015261111a0152611b8b6000f3fe6080604052600436106100e85760003560e01c80638da5cb5b1161008a578063d127dc9b11610059578063d127dc9b146102cd578063d2cc7a7014610301578063e30fd71d14610316578063f2fde38b1461032957600080fd5b80638da5cb5b146102125780639731429714610230578063b8df0dea14610279578063c868efaa146102ad57600080fd5b80632b0d8f18116100c65780632b0d8f181461019b5780634511243e146101bd5780635eb99514146101dd578063715018a6146101fd57600080fd5b806302ee3e9c146100ed57806310397b01146101385780631a7f5bec1461014f575b600080fd5b3480156100f957600080fd5b5061012561010836600461155d565b600460209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b34801561014457600080fd5b50610125620493e081565b34801561015b57600080fd5b506101837f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161012f565b3480156101a757600080fd5b506101bb6101b636600461158d565b610349565b005b3480156101c957600080fd5b506101bb6101d836600461158d565b61044e565b3480156101e957600080fd5b506101bb6101f83660046115aa565b61054b565b34801561020957600080fd5b506101bb61055f565b34801561021e57600080fd5b506003546001600160a01b0316610183565b34801561023c57600080fd5b5061026961024b36600461158d565b6001600160a01b031660009081526001602052604090205460ff1690565b604051901515815260200161012f565b34801561028557600080fd5b506101837f000000000000000000000000000000000000000000000000000000000000000081565b3480156102b957600080fd5b506101bb6102c83660046115c3565b610573565b3480156102d957600080fd5b506101257f000000000000000000000000000000000000000000000000000000000000000081565b34801561030d57600080fd5b50600254610125565b6101bb61032436600461164c565b61073d565b34801561033557600080fd5b506101bb61034436600461158d565b61074f565b6103516107c5565b6001600160a01b0381166103805760405162461bcd60e51b815260040161037790611687565b60405180910390fd5b6001600160a01b03811660009081526001602052604090205460ff16156103ff5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b6064820152608401610377565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b6104566107c5565b6001600160a01b03811661047c5760405162461bcd60e51b815260040161037790611687565b6001600160a01b03811660009081526001602052604090205460ff166104f65760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b6064820152608401610377565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600160205260409020805460ff19169055565b6105536107c5565b61055c816107cd565b50565b61056761096d565b61057160006109c7565b565b61057b610a19565b6002546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156105f2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061061691906116d5565b101561067d5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b6064820152608401610377565b6106863361024b565b156106ec5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b6064820152608401610377565b61072d848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610a7292505050565b6107376001600055565b50505050565b61055c61074982611782565b34610c00565b61075761096d565b6001600160a01b0381166107bc5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610377565b61055c816109c7565b61057161096d565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561082d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061085191906116d5565b600254909150818311156108c15760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b6064820152608401610377565b8083116109365760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e006064820152608401610377565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6003546001600160a01b031633146105715760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610377565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600260005403610a6b5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610377565b6002600055565b60008082806020019051810190610a899190611870565b60008781526004602090815260408083206001600160a01b038a168452909152902054919350915081811015610b1c5760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a20696e73756666696369604482015271656e74206272696467652062616c616e636560701b6064820152608401610377565b610b2682826119a0565b60008781526004602090815260408083206001600160a01b038a16845290915290205582517f00000000000000000000000000000000000000000000000000000000000000009003610bfa5760208301516001600160a01b03163014610be45760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a20696e76616c6964206260448201526c7269646765206164647265737360981b6064820152608401610377565b610bf2836040015183610fb4565b505050505050565b610bf283835b81517f00000000000000000000000000000000000000000000000000000000000000009003610c8c5760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a2063616e6e6f7420627260448201527134b233b2903a379039b0b6b29031b430b4b760711b6064820152608401610377565b60208201516001600160a01b0316610d055760405162461bcd60e51b815260206004820152603660248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f2064657374604482015275696e6174696f6e20627269646765206164647265737360501b6064820152608401610377565b60408201516001600160a01b0316610d755760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f207265636960448201526c7069656e74206164647265737360981b6064820152608401610377565b60008111610dd55760405162461bcd60e51b815260206004820152602760248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f2073656e6460448201526608185b5bdd5b9d60ca1b6064820152608401610377565b81606001518111610e4e5760405162461bcd60e51b815260206004820152603860248201527f54656c65706f72746572546f6b656e536f757263653a20696e7375666669636960448201527f656e7420616d6f756e7420746f20636f766572206665657300000000000000006064820152608401610377565b6060820151610e5d90826119a0565b82516000908152600460209081526040808320828701516001600160a01b03168452909152812080549293508392909190610e999084906119b9565b925050819055506000610f696040518060c001604052808560000151815260200185602001516001600160a01b0316815260200160405180604001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815260200187606001518152508152602001620493e081526020018560a001518152602001856040015185604051602001610f529291906001600160a01b03929092168252602082015260400190565b604051602081830303815290604052815250610fef565b9050336001600160a01b0316817f35971507d5275c40cb225115b67b12c9e28b4bb02e60366a5863d8320bd6386584604051610fa791815260200190565b60405180910390a3505050565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015610fea573d6000803e3d6000fd5b505050565b600080610ffa611115565b6040840151602001519091501561109f576040830151516001600160a01b031661107c5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b6064820152608401610377565b60408301516020810151905161109f916001600160a01b03909116908390611229565b604051630624488560e41b81526001600160a01b038216906362448850906110cb908690600401611a60565b6020604051808303816000875af11580156110ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061110e91906116d5565b9392505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611176573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119a9190611ae7565b90506111be816001600160a01b031660009081526001602052604090205460ff1690565b156112245760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b6064820152608401610377565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa15801561127a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061129e91906116d5565b6112a891906119b9565b604080516001600160a01b03868116602483015260448083018590528351808403909101815260649092018352602080830180516001600160e01b031663095ea7b360e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65649084015292935061073792879260009161133b919085169084906113b8565b805190915015610fea57808060200190518101906113599190611b04565b610fea5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610377565b60606113c784846000856113cf565b949350505050565b6060824710156114305760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610377565b600080866001600160a01b0316858760405161144c9190611b26565b60006040518083038185875af1925050503d8060008114611489576040519150601f19603f3d011682016040523d82523d6000602084013e61148e565b606091505b509150915061149f878383876114aa565b979650505050505050565b60608315611519578251600003611512576001600160a01b0385163b6115125760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610377565b50816113c7565b6113c7838381511561152e5781518083602001fd5b8060405162461bcd60e51b81526004016103779190611b42565b6001600160a01b038116811461055c57600080fd5b6000806040838503121561157057600080fd5b82359150602083013561158281611548565b809150509250929050565b60006020828403121561159f57600080fd5b813561110e81611548565b6000602082840312156115bc57600080fd5b5035919050565b600080600080606085870312156115d957600080fd5b8435935060208501356115eb81611548565b9250604085013567ffffffffffffffff8082111561160857600080fd5b818701915087601f83011261161c57600080fd5b81358181111561162b57600080fd5b88602082850101111561163d57600080fd5b95989497505060200194505050565b60006020828403121561165e57600080fd5b813567ffffffffffffffff81111561167557600080fd5b820160c0818503121561110e57600080fd5b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b6000602082840312156116e757600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b60405160c0810167ffffffffffffffff81118282101715611727576117276116ee565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715611756576117566116ee565b604052919050565b600067ffffffffffffffff821115611778576117786116ee565b5060051b60200190565b600060c0823603121561179457600080fd5b61179c611704565b823581526020808401356117af81611548565b8282015260408401356117c181611548565b80604084015250606084013560608301526080840135608083015260a084013567ffffffffffffffff8111156117f657600080fd5b840136601f82011261180757600080fd5b803561181a6118158261175e565b61172d565b81815260059190911b8201830190838101903683111561183957600080fd5b928401925b8284101561186057833561185181611548565b8252928401929084019061183e565b60a0860152509295945050505050565b6000806040838503121561188357600080fd5b825167ffffffffffffffff8082111561189b57600080fd5b9084019060c082870312156118af57600080fd5b6118b7611704565b825181526020808401516118ca81611548565b8282015260408401516118dc81611548565b80604084015250606084015160608301526080840151608083015260a08401518381111561190957600080fd5b80850194505087601f85011261191e57600080fd5b8351925061192e6118158461175e565b83815260059390931b8401810192818101908985111561194d57600080fd5b948201945b8486101561197457855161196581611548565b82529482019490820190611952565b60a0840152509590950151949694955050505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156119b3576119b361198a565b92915050565b808201808211156119b3576119b361198a565b600081518084526020808501945080840160005b83811015611a055781516001600160a01b0316875295820195908201906001016119e0565b509495945050505050565b60005b83811015611a2b578181015183820152602001611a13565b50506000910152565b60008151808452611a4c816020860160208601611a10565b601f01601f19169290920160200192915050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c0840152611ac16101008401826119cc565b905060a0840151601f198483030160e0850152611ade8282611a34565b95945050505050565b600060208284031215611af957600080fd5b815161110e81611548565b600060208284031215611b1657600080fd5b8151801515811461110e57600080fd5b60008251611b38818460208701611a10565b9190910192915050565b60208152600061110e6020830184611a3456fea264697066735822122075ccf8349ad1fc713ae89e83f1921bdd69e3a291eb28b276044c94036e9d0d3e64736f6c63430008120033", + Bin: "0x60e06040523480156200001157600080fd5b5060405162001f7c38038062001f7c83398101604081905262000034916200032e565b60016000558282828282816001600160a01b038116620000c15760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa1580156200010c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000132919062000378565b600255506200014133620001e2565b6200014c8162000234565b50506001600160a01b03811660c0526040805163084279ef60e31b8152905173020000000000000000000000000000000000000591634213cf789160048083019260209291908290030181865afa158015620001ac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001d2919062000378565b60a0525062000392945050505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6200023e620002b3565b6001600160a01b038116620002a55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620000b8565b620002b081620001e2565b50565b6003546001600160a01b031633146200030f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620000b8565b565b80516001600160a01b03811681146200032957600080fd5b919050565b6000806000606084860312156200034457600080fd5b6200034f8462000311565b92506200035f6020850162000311565b91506200036f6040850162000311565b90509250925092565b6000602082840312156200038b57600080fd5b5051919050565b60805160a05160c051611b90620003ec6000396000818161028b0152610ede0152600081816102df01528181610b4f0152610c0801526000818161016101528181610588015281816107d3015261111f0152611b906000f3fe6080604052600436106100e85760003560e01c80638da5cb5b1161008a578063d127dc9b11610059578063d127dc9b146102cd578063d2cc7a7014610301578063e30fd71d14610316578063f2fde38b1461032957600080fd5b80638da5cb5b146102125780639731429714610230578063b8df0dea14610279578063c868efaa146102ad57600080fd5b80632b0d8f18116100c65780632b0d8f181461019b5780634511243e146101bd5780635eb99514146101dd578063715018a6146101fd57600080fd5b806302ee3e9c146100ed57806310397b01146101385780631a7f5bec1461014f575b600080fd5b3480156100f957600080fd5b50610125610108366004611562565b600460209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b34801561014457600080fd5b50610125620493e081565b34801561015b57600080fd5b506101837f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161012f565b3480156101a757600080fd5b506101bb6101b6366004611592565b610349565b005b3480156101c957600080fd5b506101bb6101d8366004611592565b61044e565b3480156101e957600080fd5b506101bb6101f83660046115af565b61054b565b34801561020957600080fd5b506101bb61055f565b34801561021e57600080fd5b506003546001600160a01b0316610183565b34801561023c57600080fd5b5061026961024b366004611592565b6001600160a01b031660009081526001602052604090205460ff1690565b604051901515815260200161012f565b34801561028557600080fd5b506101837f000000000000000000000000000000000000000000000000000000000000000081565b3480156102b957600080fd5b506101bb6102c83660046115c8565b610573565b3480156102d957600080fd5b506101257f000000000000000000000000000000000000000000000000000000000000000081565b34801561030d57600080fd5b50600254610125565b6101bb610324366004611651565b61073d565b34801561033557600080fd5b506101bb610344366004611592565b610751565b6103516107c7565b6001600160a01b0381166103805760405162461bcd60e51b81526004016103779061168c565b60405180910390fd5b6001600160a01b03811660009081526001602052604090205460ff16156103ff5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b6064820152608401610377565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b6104566107c7565b6001600160a01b03811661047c5760405162461bcd60e51b81526004016103779061168c565b6001600160a01b03811660009081526001602052604090205460ff166104f65760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b6064820152608401610377565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600160205260409020805460ff19169055565b6105536107c7565b61055c816107cf565b50565b61056761096f565b61057160006109c9565b565b61057b610a1b565b6002546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156105f2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061061691906116da565b101561067d5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b6064820152608401610377565b6106863361024b565b156106ec5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b6064820152608401610377565b61072d848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610a7492505050565b6107376001600055565b50505050565b61055c61074982611787565b346000610c04565b61075961096f565b6001600160a01b0381166107be5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610377565b61055c816109c9565b61057161096f565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561082f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061085391906116da565b600254909150818311156108c35760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b6064820152608401610377565b8083116109385760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e006064820152608401610377565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6003546001600160a01b031633146105715760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610377565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600260005403610a6d5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610377565b6002600055565b60008082806020019051810190610a8b9190611875565b60008781526004602090815260408083206001600160a01b038a168452909152902054919350915081811015610b1e5760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a20696e73756666696369604482015271656e74206272696467652062616c616e636560701b6064820152608401610377565b610b2882826119a5565b60008781526004602090815260408083206001600160a01b038a16845290915290205582517f00000000000000000000000000000000000000000000000000000000000000009003610bfc5760208301516001600160a01b03163014610be65760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a20696e76616c6964206260448201526c7269646765206164647265737360981b6064820152608401610377565b610bf4836040015183610fb9565b505050505050565b610bf4838360015b82517f00000000000000000000000000000000000000000000000000000000000000009003610c905760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a2063616e6e6f7420627260448201527134b233b2903a379039b0b6b29031b430b4b760711b6064820152608401610377565b60208301516001600160a01b0316610d095760405162461bcd60e51b815260206004820152603660248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f2064657374604482015275696e6174696f6e20627269646765206164647265737360501b6064820152608401610377565b60408301516001600160a01b0316610d795760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f207265636960448201526c7069656e74206164647265737360981b6064820152608401610377565b60008211610dd95760405162461bcd60e51b815260206004820152602760248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f2073656e6460448201526608185b5bdd5b9d60ca1b6064820152608401610377565b82606001518211610e525760405162461bcd60e51b815260206004820152603860248201527f54656c65706f72746572546f6b656e536f757263653a20696e7375666669636960448201527f656e7420616d6f756e7420746f20636f766572206665657300000000000000006064820152608401610377565b6060830151610e6190836119a5565b83516000908152600460209081526040808320828801516001600160a01b03168452909152812080549294508492909190610e9d9084906119be565b925050819055506000610f6d6040518060c001604052808660000151815260200186602001516001600160a01b0316815260200160405180604001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815260200188606001518152508152602001620493e081526020018660a001518152602001866040015186604051602001610f569291906001600160a01b03929092168252602082015260400190565b604051602081830303815290604052815250610ff4565b9050336001600160a01b0316817f35971507d5275c40cb225115b67b12c9e28b4bb02e60366a5863d8320bd6386585604051610fab91815260200190565b60405180910390a350505050565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015610fef573d6000803e3d6000fd5b505050565b600080610fff61111a565b604084015160200151909150156110a4576040830151516001600160a01b03166110815760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b6064820152608401610377565b6040830151602081015190516110a4916001600160a01b0390911690839061122e565b604051630624488560e41b81526001600160a01b038216906362448850906110d0908690600401611a65565b6020604051808303816000875af11580156110ef573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111391906116da565b9392505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561117b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119f9190611aec565b90506111c3816001600160a01b031660009081526001602052604090205460ff1690565b156112295760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b6064820152608401610377565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa15801561127f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a391906116da565b6112ad91906119be565b604080516001600160a01b03868116602483015260448083018590528351808403909101815260649092018352602080830180516001600160e01b031663095ea7b360e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656490840152929350610737928792600091611340919085169084906113bd565b805190915015610fef578080602001905181019061135e9190611b09565b610fef5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610377565b60606113cc84846000856113d4565b949350505050565b6060824710156114355760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610377565b600080866001600160a01b031685876040516114519190611b2b565b60006040518083038185875af1925050503d806000811461148e576040519150601f19603f3d011682016040523d82523d6000602084013e611493565b606091505b50915091506114a4878383876114af565b979650505050505050565b6060831561151e578251600003611517576001600160a01b0385163b6115175760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610377565b50816113cc565b6113cc83838151156115335781518083602001fd5b8060405162461bcd60e51b81526004016103779190611b47565b6001600160a01b038116811461055c57600080fd5b6000806040838503121561157557600080fd5b8235915060208301356115878161154d565b809150509250929050565b6000602082840312156115a457600080fd5b81356111138161154d565b6000602082840312156115c157600080fd5b5035919050565b600080600080606085870312156115de57600080fd5b8435935060208501356115f08161154d565b9250604085013567ffffffffffffffff8082111561160d57600080fd5b818701915087601f83011261162157600080fd5b81358181111561163057600080fd5b88602082850101111561164257600080fd5b95989497505060200194505050565b60006020828403121561166357600080fd5b813567ffffffffffffffff81111561167a57600080fd5b820160c0818503121561111357600080fd5b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b6000602082840312156116ec57600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b60405160c0810167ffffffffffffffff8111828210171561172c5761172c6116f3565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561175b5761175b6116f3565b604052919050565b600067ffffffffffffffff82111561177d5761177d6116f3565b5060051b60200190565b600060c0823603121561179957600080fd5b6117a1611709565b823581526020808401356117b48161154d565b8282015260408401356117c68161154d565b80604084015250606084013560608301526080840135608083015260a084013567ffffffffffffffff8111156117fb57600080fd5b840136601f82011261180c57600080fd5b803561181f61181a82611763565b611732565b81815260059190911b8201830190838101903683111561183e57600080fd5b928401925b828410156118655783356118568161154d565b82529284019290840190611843565b60a0860152509295945050505050565b6000806040838503121561188857600080fd5b825167ffffffffffffffff808211156118a057600080fd5b9084019060c082870312156118b457600080fd5b6118bc611709565b825181526020808401516118cf8161154d565b8282015260408401516118e18161154d565b80604084015250606084015160608301526080840151608083015260a08401518381111561190e57600080fd5b80850194505087601f85011261192357600080fd5b8351925061193361181a84611763565b83815260059390931b8401810192818101908985111561195257600080fd5b948201945b8486101561197957855161196a8161154d565b82529482019490820190611957565b60a0840152509590950151949694955050505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156119b8576119b861198f565b92915050565b808201808211156119b8576119b861198f565b600081518084526020808501945080840160005b83811015611a0a5781516001600160a01b0316875295820195908201906001016119e5565b509495945050505050565b60005b83811015611a30578181015183820152602001611a18565b50506000910152565b60008151808452611a51816020860160208601611a15565b601f01601f19169290920160200192915050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c0840152611ac66101008401826119d1565b905060a0840151601f198483030160e0850152611ae38282611a39565b95945050505050565b600060208284031215611afe57600080fd5b81516111138161154d565b600060208284031215611b1b57600080fd5b8151801515811461111357600080fd5b60008251611b3d818460208701611a15565b9190910192915050565b6020815260006111136020830184611a3956fea2646970667358221220fe09d72ce941b73130553c8d5c8dec5dac8b7f72a4faff3ef1e96ee53b68b19a64736f6c63430008120033", } // NativeTokenSourceABI is the input ABI used to generate the binding from. diff --git a/contracts/src/TeleporterTokenDestination.sol b/contracts/src/TeleporterTokenDestination.sol index beb8fae8..7fe16916 100644 --- a/contracts/src/TeleporterTokenDestination.sol +++ b/contracts/src/TeleporterTokenDestination.sol @@ -34,6 +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; /** @@ -60,25 +62,38 @@ abstract contract TeleporterTokenDestination is * @notice Sends tokens to the specified destination token bridge instance. * * @dev Burns the bridged amount, and uses Teleporter to send a cross chain message. + * Tokens can be sent to the same blockchain this bridge instance is deployed on, + * to another destination bridge instance. * Requirements: * - * - `input.destinationBlockchainID` cannot be the same as the current blockchainID * - `input.destinationBridgeAddress` cannot be the zero address * - `input.recipient` cannot be the zero address * - `amount` must be greater than 0 * - `amount` must be greater than `input.primaryFee` */ function _send(SendTokensInput calldata input, uint256 amount) internal virtual { - require( - input.destinationBlockchainID != blockchainID, - "TeleporterTokenDestination: cannot bridge to same chain" - ); require( input.destinationBridgeAddress != address(0), "TeleporterTokenDestination: zero destination bridge address" ); 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 (input.destinationBlockchainID == sourceBlockchainID) { + require( + input.destinationBridgeAddress == tokenSourceAddress, + "TeleporterTokenDestination: invalid destination bridge address" + ); + } + + if (input.destinationBlockchainID == blockchainID) { + require( + input.destinationBridgeAddress != address(this), + "TeleporterTokenDestination: invalid destination bridge address" + ); + } + // Deposit the funds sent from the user to the bridge, // and set to adjusted amount after deposit amount = _deposit(amount); diff --git a/contracts/src/TeleporterTokenSource.sol b/contracts/src/TeleporterTokenSource.sol index c66b8a5f..21a5521a 100644 --- a/contracts/src/TeleporterTokenSource.sol +++ b/contracts/src/TeleporterTokenSource.sol @@ -41,6 +41,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; /** @@ -145,7 +147,8 @@ abstract contract TeleporterTokenSource is ITeleporterTokenBridge, TeleporterOwn // Decrement the bridge balance by the unwrap amount bridgedBalances[sourceBlockchainID][originSenderAddress] = senderBalance - amount; - // decrement totalAmount from bridge balance + // If the final destination of the transfer is this source bridge instance, withdraw the tokens.abi + // Otherwise, perform a multihop transfer to the input destination bridge instance. if (input.destinationBlockchainID == blockchainID) { require( input.destinationBridgeAddress == address(this), diff --git a/contracts/test/TeleporterTokenDestinationTests.t.sol b/contracts/test/TeleporterTokenDestinationTests.t.sol index 3271ea32..6ba73c7c 100644 --- a/contracts/test/TeleporterTokenDestinationTests.t.sol +++ b/contracts/test/TeleporterTokenDestinationTests.t.sol @@ -102,14 +102,6 @@ contract TeleporterTokenDestinationTest is Test { /** * Send tokens unit tests */ - - function testSendToSameChain() public { - SendTokensInput memory input = _createDefaultSendTokensInput(); - input.destinationBlockchainID = DEFAULT_DESTINATION_BLOCKCHAIN_ID; - vm.expectRevert(_formatTokenDestinationErrorMessage("cannot bridge to same chain")); - app.send(input, 0); - } - function testZeroDestinationBridge() public { SendTokensInput memory input = _createDefaultSendTokensInput(); input.destinationBridgeAddress = address(0); @@ -124,6 +116,21 @@ contract TeleporterTokenDestinationTest is Test { app.send(input, 0); } + function testInvalidSendingBackToSourceBlockchain() public { + SendTokensInput memory input = _createDefaultSendTokensInput(); + input.destinationBridgeAddress = address(this); + vm.expectRevert(_formatTokenDestinationErrorMessage("invalid destination bridge address")); + app.send(input, 0); + } + + function testSendingToSameInstance() public { + SendTokensInput memory input = _createDefaultSendTokensInput(); + input.destinationBlockchainID = app.blockchainID(); + input.destinationBridgeAddress = address(app); + vm.expectRevert(_formatTokenDestinationErrorMessage("invalid destination bridge address")); + app.send(input, 0); + } + function testZeroSendAmount() public { vm.expectRevert(_formatTokenDestinationErrorMessage("zero send amount")); app.send(_createDefaultSendTokensInput(), 0); @@ -148,6 +155,21 @@ contract TeleporterTokenDestinationTest is Test { _sendSuccess(amount, primaryFee); } + function testSendToSameBlockchainDifferentDestination() public { + // Send a transfer to the same app itself + uint256 amount = 2; + SendTokensInput memory input = _createDefaultSendTokensInput(); + input.destinationBlockchainID = app.blockchainID(); + input.destinationBridgeAddress = address(this); + + uint256 bridgedAmount = amount - input.primaryFee; + _checkExpectedTeleporterCalls(input, bridgedAmount); + + vm.expectEmit(true, true, true, true, address(app)); + emit SendTokens(_MOCK_MESSAGE_ID, address(this), bridgedAmount); + app.send(input, amount); + } + /** * Receive tokens unit tests */ diff --git a/go.mod b/go.mod index cd58018c..3d591318 100644 --- a/go.mod +++ b/go.mod @@ -3,6 +3,7 @@ module github.com/ava-labs/teleporter-token-bridge go 1.21 require ( + github.com/ava-labs/avalanchego v1.11.1 github.com/ava-labs/subnet-evm v0.6.1 github.com/ava-labs/teleporter v1.0.0 github.com/ethereum/go-ethereum v1.12.0 @@ -16,7 +17,6 @@ require ( github.com/NYTimes/gziphandler v1.1.1 // indirect github.com/VictoriaMetrics/fastcache v1.10.0 // indirect github.com/ava-labs/avalanche-network-runner v1.7.6 // indirect - github.com/ava-labs/avalanchego v1.11.1 // indirect github.com/ava-labs/coreth v0.13.0-rc.0 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect @@ -134,7 +134,7 @@ require ( google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect google.golang.org/grpc v1.58.3 // indirect - google.golang.org/protobuf v1.31.0 // indirect + google.golang.org/protobuf v1.33.0 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/go.sum b/go.sum index 2d57a664..d5bfdd20 100644 --- a/go.sum +++ b/go.sum @@ -1016,8 +1016,8 @@ google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlba google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= -google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= +google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/scripts/abi_bindings.sh b/scripts/abi_bindings.sh index 3e6e596f..cb209dbf 100755 --- a/scripts/abi_bindings.sh +++ b/scripts/abi_bindings.sh @@ -15,6 +15,7 @@ source $TELEPORTER_PATH/scripts/utils.sh setARCH +# Contract names to generate Go bindings for DEFAULT_CONTRACT_LIST="ERC20Source ERC20Destination NativeTokenSource" CONTRACT_LIST= diff --git a/tests/flows/basic_erc20_send_receive.go b/tests/flows/basic_erc20_send_receive.go index 0f8d861c..4200280e 100644 --- a/tests/flows/basic_erc20_send_receive.go +++ b/tests/flows/basic_erc20_send_receive.go @@ -54,7 +54,7 @@ func BasicERC20SendReceive(network interfaces.Network) { fundedKey, subnetBInfo, fundedAddress, - subnetAInfo, + subnetAInfo.BlockchainID, erc20SourceAddress, tokenName, tokenSymbol, @@ -104,9 +104,9 @@ func BasicERC20SendReceive(network interfaces.Network) { utils.CheckERC20DestinationWithdrawal( ctx, erc20Destination, + receipt, recipientAddress, bridgedAmount, - receipt, ) // Check that the recipient received the tokens @@ -158,9 +158,9 @@ func BasicERC20SendReceive(network interfaces.Network) { ctx, erc20SourceAddress, sourceToken, + receipt, recipientAddress, bridgedAmount, - receipt, ) // Check that the recipient received the tokens diff --git a/tests/utils/utils.go b/tests/utils/utils.go index a59ffff6..4d25f614 100644 --- a/tests/utils/utils.go +++ b/tests/utils/utils.go @@ -8,6 +8,7 @@ import ( "crypto/ecdsa" "math/big" + "github.com/ava-labs/avalanchego/ids" "github.com/ava-labs/subnet-evm/accounts/abi/bind" "github.com/ava-labs/subnet-evm/core/types" erc20destination "github.com/ava-labs/teleporter-token-bridge/abi-bindings/go/ERC20Destination" @@ -53,12 +54,11 @@ func DeployERC20Destination( senderKey *ecdsa.PrivateKey, subnet interfaces.SubnetTestInfo, teleporterManager common.Address, - sourceSubnet interfaces.SubnetTestInfo, + sourceBlockchainID ids.ID, tokenSourceAddress common.Address, tokenName string, tokenSymbol string, tokenDecimals uint8, - ) (common.Address, *erc20destination.ERC20Destination) { opts, err := bind.NewKeyedTransactorWithChainID( senderKey, @@ -70,7 +70,7 @@ func DeployERC20Destination( subnet.RPCClient, subnet.TeleporterRegistryAddress, teleporterManager, - sourceSubnet.BlockchainID, + sourceBlockchainID, tokenSourceAddress, tokenName, tokenSymbol, @@ -220,27 +220,27 @@ func CheckERC20SourceWithdrawal( ctx context.Context, erc20SourceAddress common.Address, sourceToken *exampleerc20.ExampleERC20, - recipientAddress common.Address, - amount *big.Int, receipt *types.Receipt, + expectedRecipientAddress common.Address, + expectedAmount *big.Int, ) { sourceTransferEvent, err := teleporterUtils.GetEventFromLogs(receipt.Logs, sourceToken.ParseTransfer) Expect(err).Should(BeNil()) Expect(sourceTransferEvent.From).Should(Equal(erc20SourceAddress)) - Expect(sourceTransferEvent.To).Should(Equal(recipientAddress)) - Expect(sourceTransferEvent.Value).Should(Equal(amount)) + Expect(sourceTransferEvent.To).Should(Equal(expectedRecipientAddress)) + Expect(sourceTransferEvent.Value).Should(Equal(expectedAmount)) } func CheckERC20DestinationWithdrawal( ctx context.Context, erc20Destination *erc20destination.ERC20Destination, - recipientAddress common.Address, - amount *big.Int, receipt *types.Receipt, + expectedRecipientAddress common.Address, + expectedAmount *big.Int, ) { transferEvent, err := teleporterUtils.GetEventFromLogs(receipt.Logs, erc20Destination.ParseTransfer) Expect(err).Should(BeNil()) Expect(transferEvent.From).Should(Equal(common.Address{})) - Expect(transferEvent.To).Should(Equal(recipientAddress)) - Expect(transferEvent.Value).Should(Equal(amount)) + Expect(transferEvent.To).Should(Equal(expectedRecipientAddress)) + Expect(transferEvent.Value).Should(Equal(expectedAmount)) }