diff --git a/contracts/generated/ManagementContract/ManagementContract.go b/contracts/generated/ManagementContract/ManagementContract.go index 03fc3d8834..01a6b051d7 100644 --- a/contracts/generated/ManagementContract/ManagementContract.go +++ b/contracts/generated/ManagementContract/ManagementContract.go @@ -53,8 +53,8 @@ type StructsMetaRollup struct { // ManagementContractMetaData contains all meta data concerning the ManagementContract contract. var ManagementContractMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ECDSAInvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"ECDSAInvalidSignatureLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"ECDSAInvalidSignatureS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"ImportantContractAddressUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"messageBusAddress\",\"type\":\"address\"}],\"name\":\"LogManagementContractCreated\",\"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\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"Hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"Signature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"LastSequenceNumber\",\"type\":\"uint256\"}],\"internalType\":\"structStructs.MetaRollup\",\"name\":\"r\",\"type\":\"tuple\"},{\"internalType\":\"string\",\"name\":\"_rollupData\",\"type\":\"string\"},{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"internalType\":\"structStructs.CrossChainMessage[]\",\"name\":\"messages\",\"type\":\"tuple[]\"}],\"internalType\":\"structStructs.HeaderCrossChainData\",\"name\":\"crossChainData\",\"type\":\"tuple\"}],\"name\":\"AddRollup\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"}],\"name\":\"Attested\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"GetHostAddresses\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"GetImportantContractKeys\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"rollupHash\",\"type\":\"bytes32\"}],\"name\":\"GetRollupByHash\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"Hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"Signature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"LastSequenceNumber\",\"type\":\"uint256\"}],\"internalType\":\"structStructs.MetaRollup\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_enclaveID\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_initSecret\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"_hostAddress\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_genesisAttestation\",\"type\":\"string\"}],\"name\":\"InitializeNetworkSecret\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"IsWithdrawalAvailable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"requestReport\",\"type\":\"string\"}],\"name\":\"RequestNetworkSecret\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"attesterID\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"requesterID\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"attesterSig\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"responseSecret\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"hostAddress\",\"type\":\"string\"},{\"internalType\":\"bool\",\"name\":\"verifyAttester\",\"type\":\"bool\"}],\"name\":\"RespondNetworkSecret\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RetrieveAllBridgeFunds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"SetImportantContractAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"importantContractAddresses\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"importantContractKeys\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastBatchSeqNo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageBus\",\"outputs\":[{\"internalType\":\"contractIMessageBus\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b5061001a3361001f565b610090565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6131548061009f6000396000f3fe60806040523480156200001157600080fd5b50600436106200016c5760003560e01c80637281099611620000dd578063a1a227fa116200008b578063bbd79e15116200006e578063bbd79e15146200034e578063e34fbfc81462000365578063f2fde38b146200037a57600080fd5b8063a1a227fa1462000329578063a52f433c146200033d57600080fd5b80638236a7ba11620000c05780638236a7ba14620002ab5780638da5cb5b14620002d257806398077e86146200030357600080fd5b80637281099614620002975780638129fc1c14620002a157600080fd5b806343348b2f116200013b57806359a90071116200011e57806359a90071146200026c5780636a30d26c1462000283578063715018a6146200028d57600080fd5b806343348b2f1462000213578063440c953b146200025357600080fd5b806303e72e4814620001715780632c77c81f146200018a578063324ff86614620001a15780633e60a22f14620001c3575b600080fd5b620001886200018236600462001605565b62000391565b005b620001886200019b366004620016a5565b620004a4565b620001ab62000584565b604051620001ba91906200179c565b60405180910390f35b620001fa620001d436600462001802565b80516020818301810180516003825292820191909301209152546001600160a01b031681565b6040516001600160a01b039091168152602001620001ba565b620002426200022436600462001843565b6001600160a01b031660009081526020819052604090205460ff1690565b6040519015158152602001620001ba565b6200025d60055481565b604051908152602001620001ba565b620001886200027d36600462001868565b62000667565b620001ab62000756565b6200018862000830565b6200018862000848565b62000188620008cc565b620002c2620002bc36600462001919565b62000a9f565b604051620001ba92919062001933565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b0316620001fa565b6200031a6200031436600462001919565b62000b8f565b604051620001ba919062001979565b600754620001fa906001600160a01b031681565b600454610100900460ff1662000242565b620001886200035f3660046200198e565b62000c44565b620001886200037636600462001a5f565b5050565b620001886200038b36600462001843565b62000e15565b6200039b62000e72565b60006001600160a01b0316600383604051620003b8919062001aa5565b908152604051908190036020019020546001600160a01b0316036200041757600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0162000415838262001b51565b505b806003836040516200042a919062001aa5565b90815260405190819003602001812080546001600160a01b039390931673ffffffffffffffffffffffffffffffffffffffff19909316929092179091557f17b2f9f5748931099ffee882b5b64f4a560b5c55da9b4f4e396dae3bb9f98cb59062000498908490849062001c1e565b60405180910390a15050565b6000620004f68535620004bb602088018862001c4b565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062000ee992505050565b6001600160a01b03811660009081526020819052604090205490915060ff16620005675760405162461bcd60e51b815260206004820152601660248201527f656e636c6176654944206e6f742061747465737465640000000000000000000060448201526064015b60405180910390fd5b620005728562000f17565b6200057d8262000f4f565b5050505050565b60606001805480602002602001604051908101604052809291908181526020016000905b828210156200065e578382906000526020600020018054620005ca9062001ac3565b80601f0160208091040260200160405190810160405280929190818152602001828054620005f89062001ac3565b8015620006495780601f106200061d5761010080835404028352916020019162000649565b820191906000526020600020905b8154815290600101906020018083116200062b57829003601f168201915b505050505081526020019060010190620005a8565b50505050905090565b60045460ff1615620006e25760405162461bcd60e51b815260206004820152602260248201527f6e6574776f726b2073656372657420616c726561647920696e697469616c697a60448201527f656400000000000000000000000000000000000000000000000000000000000060648201526084016200055e565b60048054600160ff1991821681179092556001600160a01b038816600090815260208190526040812080549092168317909155815480830183559190527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6016200074d848262001b51565b50505050505050565b60606002805480602002602001604051908101604052809291908181526020016000905b828210156200065e5783829060005260206000200180546200079c9062001ac3565b80601f0160208091040260200160405190810160405280929190818152602001828054620007ca9062001ac3565b80156200081b5780601f10620007ef576101008083540402835291602001916200081b565b820191906000526020600020905b815481529060010190602001808311620007fd57829003601f168201915b5050505050815260200190600101906200077a565b6200083a62000e72565b6200084660006200101f565b565b6200085262000e72565b6007546040517f36d2da900000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b03909116906336d2da9090602401600060405180830381600087803b158015620008b157600080fd5b505af1158015620008c6573d6000803e3d6000fd5b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015620009185750825b905060008267ffffffffffffffff166001148015620009365750303b155b90508115801562000945575080155b156200097d576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff191660011785558315620009b257845468ff00000000000000001916680100000000000000001785555b620009bd336200109d565b6000600555604051620009d0906200152f565b604051809103906000f080158015620009ed573d6000803e3d6000fd5b506007805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691821790556040519081527fbd726cf82ac9c3260b1495107182e336e0654b25c10915648c0cc15b2bb72cbf9060200160405180910390a183156200057d57845468ff000000000000000019168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050505050565b60408051606080820183526000808352602080840183905283850182905285825260068152848220855193840190955284548352600185018054929586949390928401919062000aef9062001ac3565b80601f016020809104026020016040519081016040528092919081815260200182805462000b1d9062001ac3565b801562000b6e5780601f1062000b425761010080835404028352916020019162000b6e565b820191906000526020600020905b81548152906001019060200180831162000b5057829003601f168201915b50505091835250506002919091015460209091015280519094149492505050565b6002818154811062000ba057600080fd5b90600052602060002001600091509050805462000bbd9062001ac3565b80601f016020809104026020016040519081016040528092919081815260200182805462000beb9062001ac3565b801562000c3c5780601f1062000c105761010080835404028352916020019162000c3c565b820191906000526020600020905b81548152906001019060200180831162000c1e57829003601f168201915b505050505081565b6001600160a01b03861660009081526020819052604090205460ff168062000cd55760405162461bcd60e51b815260206004820152602360248201527f726573706f6e64696e67206174746573746572206973206e6f7420617474657360448201527f746564000000000000000000000000000000000000000000000000000000000060648201526084016200055e565b811562000dae57600062000d108888868860405160200162000cfb949392919062001c95565b604051602081830303815290604052620010b2565b9050600062000d20828862000ee9565b9050886001600160a01b0316816001600160a01b03161462000dab5760405162461bcd60e51b815260206004820152602c60248201527f63616c63756c61746564206164647265737320616e642061747465737465724960448201527f4420646f6e74206d61746368000000000000000000000000000000000000000060648201526084016200055e565b50505b6001600160a01b0386166000908152602081905260408120805460ff191660019081179091558054808201825591527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60162000e0b848262001b51565b5050505050505050565b62000e1f62000e72565b6001600160a01b03811662000e64576040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600060048201526024016200055e565b62000e6f816200101f565b50565b3362000ea57f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b03161462000846576040517f118cdaa70000000000000000000000000000000000000000000000000000000081523360048201526024016200055e565b60008060008062000efb8686620010f1565b92509250925062000f0d828262001142565b5090949350505050565b80356000908152600660205260409020819062000f35828262001cf5565b50506005546040820135111562000e6f5760400135600555565b600062000f5d828062001e05565b9050905060005b818110156200101a576007546001600160a01b0316639730886d62000f8a858062001e05565b8481811062000f9d5762000f9d62001e52565b905060200281019062000fb1919062001e68565b60016040518363ffffffff1660e01b815260040162000fd292919062001f18565b600060405180830381600087803b15801562000fed57600080fd5b505af115801562001002573d6000803e3d6000fd5b5050505080620010129062001fda565b905062000f64565b505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b620010a762001258565b62000e6f81620012c0565b6000620010c08251620012ca565b82604051602001620010d492919062002002565b604051602081830303815290604052805190602001209050919050565b600080600083516041036200112f5760208401516040850151606086015160001a620011208882858562001371565b9550955095505050506200113b565b50508151600091506002905b9250925092565b600082600381111562001159576200115962002061565b0362001163575050565b60018260038111156200117a576200117a62002061565b03620011b2576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002826003811115620011c957620011c962002061565b0362001205576040517ffce698f7000000000000000000000000000000000000000000000000000000008152600481018290526024016200055e565b60038260038111156200121c576200121c62002061565b0362000376576040517fd78bce0c000000000000000000000000000000000000000000000000000000008152600481018290526024016200055e565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1662000846576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62000e1f62001258565b60606000620012d98362001445565b600101905060008167ffffffffffffffff811115620012fc57620012fc6200153d565b6040519080825280601f01601f19166020018201604052801562001327576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846200133157509392505050565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115620013ae57506000915060039050826200143b565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801562001403573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811662001431575060009250600191508290506200143b565b9250600091508190505b9450945094915050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106200148f577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310620014bc576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310620014db57662386f26fc10000830492506010015b6305f5e1008310620014f4576305f5e100830492506008015b61271083106200150957612710830492506004015b606483106200151c576064830492506002015b600a831062001529576001015b92915050565b6110a7806200207883390190565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200156557600080fd5b813567ffffffffffffffff808211156200158357620015836200153d565b604051601f8301601f19908116603f01168101908282118183101715620015ae57620015ae6200153d565b81604052838152866020858801011115620015c857600080fd5b836020870160208301376000602085830101528094505050505092915050565b80356001600160a01b03811681146200160057600080fd5b919050565b600080604083850312156200161957600080fd5b823567ffffffffffffffff8111156200163157600080fd5b6200163f8582860162001553565b9250506200165060208401620015e8565b90509250929050565b60008083601f8401126200166c57600080fd5b50813567ffffffffffffffff8111156200168557600080fd5b6020830191508360208285010111156200169e57600080fd5b9250929050565b60008060008060608587031215620016bc57600080fd5b843567ffffffffffffffff80821115620016d557600080fd5b9086019060608289031215620016ea57600080fd5b909450602086013590808211156200170157600080fd5b6200170f8883890162001659565b909550935060408701359150808211156200172957600080fd5b508501602081880312156200173d57600080fd5b939692955090935050565b60005b83811015620017655781810151838201526020016200174b565b50506000910152565b600081518084526200178881602086016020860162001748565b601f01601f19169290920160200192915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015620017f557603f19888603018452620017e28583516200176e565b94509285019290850190600101620017c3565b5092979650505050505050565b6000602082840312156200181557600080fd5b813567ffffffffffffffff8111156200182d57600080fd5b6200183b8482850162001553565b949350505050565b6000602082840312156200185657600080fd5b6200186182620015e8565b9392505050565b600080600080600080608087890312156200188257600080fd5b6200188d87620015e8565b9550602087013567ffffffffffffffff80821115620018ab57600080fd5b620018b98a838b0162001659565b90975095506040890135915080821115620018d357600080fd5b620018e18a838b0162001553565b94506060890135915080821115620018f857600080fd5b506200190789828a0162001659565b979a9699509497509295939492505050565b6000602082840312156200192c57600080fd5b5035919050565b82151581526040602082015281516040820152600060208301516060808401526200196260a08401826200176e565b905060408401516080840152809150509392505050565b6020815260006200186160208301846200176e565b60008060008060008060c08789031215620019a857600080fd5b620019b387620015e8565b9550620019c360208801620015e8565b9450604087013567ffffffffffffffff80821115620019e157600080fd5b620019ef8a838b0162001553565b9550606089013591508082111562001a0657600080fd5b62001a148a838b0162001553565b9450608089013591508082111562001a2b57600080fd5b5062001a3a89828a0162001553565b92505060a0870135801515811462001a5157600080fd5b809150509295509295509295565b6000806020838503121562001a7357600080fd5b823567ffffffffffffffff81111562001a8b57600080fd5b62001a998582860162001659565b90969095509350505050565b6000825162001ab981846020870162001748565b9190910192915050565b600181811c9082168062001ad857607f821691505b60208210810362001af957634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200101a57600081815260208120601f850160051c8101602086101562001b285750805b601f850160051c820191505b8181101562001b495782815560010162001b34565b505050505050565b815167ffffffffffffffff81111562001b6e5762001b6e6200153d565b62001b868162001b7f845462001ac3565b8462001aff565b602080601f83116001811462001bbe576000841562001ba55750858301515b600019600386901b1c1916600185901b17855562001b49565b600085815260208120601f198616915b8281101562001bef5788860151825594840194600190910190840162001bce565b508582101562001c0e5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60408152600062001c3360408301856200176e565b90506001600160a01b03831660208301529392505050565b6000808335601e1984360301811262001c6357600080fd5b83018035915067ffffffffffffffff82111562001c7f57600080fd5b6020019150368190038213156200169e57600080fd5b60006bffffffffffffffffffffffff19808760601b168352808660601b16601484015250835162001cce81602885016020880162001748565b83519083019062001ce781602884016020880162001748565b016028019695505050505050565b813581556001808201602080850135601e1986360301811262001d1757600080fd5b8501803567ffffffffffffffff81111562001d3157600080fd5b803603838301131562001d4357600080fd5b62001d5b8162001d54865462001ac3565b8662001aff565b6000601f82116001811462001d94576000831562001d7b57508382018501355b600019600385901b1c1916600184901b17865562001df0565b600086815260209020601f19841690835b8281101562001dc65786850188013582559387019390890190870162001da5565b508482101562001de65760001960f88660031b161c198785880101351681555b50508683881b0186555b50505050505050604082013560028201555050565b6000808335601e1984360301811262001e1d57600080fd5b83018035915067ffffffffffffffff82111562001e3957600080fd5b6020019150600581901b36038213156200169e57600080fd5b634e487b7160e01b600052603260045260246000fd5b6000823560be1983360301811262001ab957600080fd5b803563ffffffff811681146200160057600080fd5b6000808335601e1984360301811262001eac57600080fd5b830160208101925035905067ffffffffffffffff81111562001ecd57600080fd5b8036038213156200169e57600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b803560ff811681146200160057600080fd5b604081526001600160a01b0362001f2f84620015e8565b1660408201526000602084013567ffffffffffffffff811680821462001f5457600080fd5b60608401525063ffffffff62001f6d6040860162001e7f565b16608083015262001f816060850162001e7f565b63ffffffff1660a083015262001f9b608085018562001e94565b60c08085015262001fb26101008501828462001edd565b91505062001fc360a0860162001f06565b60ff1660e084015260209092019290925292915050565b60006001820162001ffb57634e487b7160e01b600052601160045260246000fd5b5060010190565b7f19457468657265756d205369676e6564204d6573736167653a0a0000000000008152600083516200203c81601a85016020880162001748565b8351908301906200205581601a84016020880162001748565b01601a01949350505050565b634e487b7160e01b600052602160045260246000fdfe608060405234801561001057600080fd5b50338061003757604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b61004081610046565b50610096565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611002806100a56000396000f3fe6080604052600436106100b55760003560e01c80638da5cb5b1161006957806399a3ad211161004e57806399a3ad2114610269578063b1454caa14610289578063f2fde38b146102c257610129565b80638da5cb5b146102215780639730886d1461024957610129565b8063346633fb1161009a578063346633fb146101d957806336d2da90146101ec578063715018a61461020c57610129565b80630fcfbd111461017657806333a88c72146101a957610129565b36610129576040517f346633fb0000000000000000000000000000000000000000000000000000000081523360048201523460248201819052309163346633fb91906044016000604051808303818588803b15801561011357600080fd5b505af1158015610127573d6000803e3d6000fd5b005b60405162461bcd60e51b815260206004820152600b60248201527f756e737570706f7274656400000000000000000000000000000000000000000060448201526064015b60405180910390fd5b34801561018257600080fd5b50610196610191366004610945565b6102e2565b6040519081526020015b60405180910390f35b3480156101b557600080fd5b506101c96101c4366004610945565b610398565b60405190151581526020016101a0565b6101276101e736600461098f565b6103eb565b3480156101f857600080fd5b506101276102073660046109bb565b6104b7565b34801561021857600080fd5b50610127610566565b34801561022d57600080fd5b506000546040516001600160a01b0390911681526020016101a0565b34801561025557600080fd5b506101276102643660046109d8565b61057a565b34801561027557600080fd5b5061012761028436600461098f565b6106cc565b34801561029557600080fd5b506102a96102a4366004610a4e565b61077c565b60405167ffffffffffffffff90911681526020016101a0565b3480156102ce57600080fd5b506101276102dd3660046109bb565b6107d5565b600080826040516020016102f69190610b3a565b60408051601f19818403018152918152815160209283012060008181526001909352912054909150806103915760405162461bcd60e51b815260206004820152602160248201527f54686973206d65737361676520776173206e65766572207375626d697474656460448201527f2e00000000000000000000000000000000000000000000000000000000000000606482015260840161016d565b9392505050565b600080826040516020016103ac9190610b3a565b60408051601f1981840301815291815281516020928301206000818152600190935291205490915080158015906103e35750428111155b949350505050565b6000341180156103fa57508034145b61046c5760405162461bcd60e51b815260206004820152603060248201527f417474656d7074696e6720746f2073656e642076616c756520776974686f757460448201527f2070726f766964696e6720457468657200000000000000000000000000000000606482015260840161016d565b604080513381526001600160a01b0384166020820152348183015290517ff1365f826a788d6c1a955db0eed5ba8642674219c4771f8c65918617511a15609181900360600190a15050565b6104bf61082c565b6000816001600160a01b03164760405160006040518083038185875af1925050503d806000811461050c576040519150601f19603f3d011682016040523d82523d6000602084013e610511565b606091505b50509050806105625760405162461bcd60e51b815260206004820152601460248201527f6661696c65642073656e64696e672076616c7565000000000000000000000000604482015260640161016d565b5050565b61056e61082c565b6105786000610872565b565b61058261082c565b600061058e8242610c3b565b90506000836040516020016105a39190610b3a565b60408051601f198184030181529181528151602092830120600081815260019093529120549091501561063e5760405162461bcd60e51b815260206004820152602160248201527f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636560448201527f2100000000000000000000000000000000000000000000000000000000000000606482015260840161016d565b6000818152600160209081526040822084905560029190610661908701876109bb565b6001600160a01b03168152602081019190915260400160009081209061068d6080870160608801610c54565b63ffffffff168152602080820192909252604001600090812080546001810182559082529190208591600402016106c48282610e2a565b505050505050565b6106d461082c565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610721576040519150601f19603f3d011682016040523d82523d6000602084013e610726565b606091505b50509050806107775760405162461bcd60e51b815260206004820152601460248201527f6661696c65642073656e64696e672076616c7565000000000000000000000000604482015260640161016d565b505050565b6000610787336108cf565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef775937338288888888886040516107c49796959493929190610f44565b60405180910390a195945050505050565b6107dd61082c565b6001600160a01b038116610820576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526000600482015260240161016d565b61082981610872565b50565b6000546001600160a01b03163314610578576040517f118cdaa700000000000000000000000000000000000000000000000000000000815233600482015260240161016d565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381166000908152600360205260408120805467ffffffffffffffff1691600191906109028385610fa4565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b600060c0828403121561093f57600080fd5b50919050565b60006020828403121561095757600080fd5b813567ffffffffffffffff81111561096e57600080fd5b6103e38482850161092d565b6001600160a01b038116811461082957600080fd5b600080604083850312156109a257600080fd5b82356109ad8161097a565b946020939093013593505050565b6000602082840312156109cd57600080fd5b81356103918161097a565b600080604083850312156109eb57600080fd5b823567ffffffffffffffff811115610a0257600080fd5b610a0e8582860161092d565b95602094909401359450505050565b63ffffffff8116811461082957600080fd5b60ff8116811461082957600080fd5b8035610a4981610a2f565b919050565b600080600080600060808688031215610a6657600080fd5b8535610a7181610a1d565b94506020860135610a8181610a1d565b9350604086013567ffffffffffffffff80821115610a9e57600080fd5b818801915088601f830112610ab257600080fd5b813581811115610ac157600080fd5b896020828501011115610ad357600080fd5b6020830195508094505050506060860135610aed81610a2f565b809150509295509295909350565b67ffffffffffffffff8116811461082957600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6020815260008235610b4b8161097a565b6001600160a01b0381166020840152506020830135610b6981610afb565b67ffffffffffffffff808216604085015260408501359150610b8a82610a1d565b63ffffffff808316606086015260608601359250610ba783610a1d565b80831660808601525060808501359150601e19853603018212610bc957600080fd5b6020918501918201913581811115610be057600080fd5b803603831315610bef57600080fd5b60c060a0860152610c0460e086018285610b11565b92505050610c1460a08501610a3e565b60ff811660c0850152509392505050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610c4e57610c4e610c25565b92915050565b600060208284031215610c6657600080fd5b813561039181610a1d565b60008135610c4e81610a1d565b6000808335601e19843603018112610c9557600080fd5b83018035915067ffffffffffffffff821115610cb057600080fd5b602001915036819003821315610cc557600080fd5b9250929050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680610cf657607f821691505b60208210810361093f57634e487b7160e01b600052602260045260246000fd5b601f82111561077757600081815260208120601f850160051c81016020861015610d3d5750805b601f850160051c820191505b818110156106c457828155600101610d49565b67ffffffffffffffff831115610d7457610d74610ccc565b610d8883610d828354610ce2565b83610d16565b6000601f841160018114610dbc5760008515610da45750838201355b600019600387901b1c1916600186901b178355610e16565b600083815260209020601f19861690835b82811015610ded5786850135825560209485019460019092019101610dcd565b5086821015610e0a5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b60008135610c4e81610a2f565b8135610e358161097a565b6001600160a01b038116905081548173ffffffffffffffffffffffffffffffffffffffff1982161783556020840135610e6d81610afb565b7bffffffffffffffff00000000000000000000000000000000000000008160a01b1690507fffffffff0000000000000000000000000000000000000000000000000000000081848285161717855560408601359250610ecb83610a1d565b921760e09190911b909116178155610f03610ee860608401610c71565b6001830163ffffffff821663ffffffff198254161781555050565b610f106080830183610c7e565b610f1e818360028601610d5c565b5050610562610f2f60a08401610e1d565b6003830160ff821660ff198254161781555050565b6001600160a01b038816815267ffffffffffffffff87166020820152600063ffffffff808816604084015280871660608401525060c06080830152610f8d60c083018587610b11565b905060ff831660a083015298975050505050505050565b67ffffffffffffffff818116838216019080821115610fc557610fc5610c25565b509291505056fea264697066735822122055bbe17521778f602b3eab0e1e16144809be200e76e1af574dfaadbe93774a6264736f6c63430008140033a2646970667358221220ae2c20528f8cafd542b7ca23dd65b4512fc4abd52f3272ceec2b92df73f7f0db64736f6c63430008140033", + ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ECDSAInvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"ECDSAInvalidSignatureLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"ECDSAInvalidSignatureS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"ImportantContractAddressUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"messageBusAddress\",\"type\":\"address\"}],\"name\":\"LogManagementContractCreated\",\"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\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"Hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"Signature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"LastSequenceNumber\",\"type\":\"uint256\"}],\"internalType\":\"structStructs.MetaRollup\",\"name\":\"r\",\"type\":\"tuple\"},{\"internalType\":\"string\",\"name\":\"_rollupData\",\"type\":\"string\"},{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"internalType\":\"structStructs.CrossChainMessage[]\",\"name\":\"messages\",\"type\":\"tuple[]\"}],\"internalType\":\"structStructs.HeaderCrossChainData\",\"name\":\"crossChainData\",\"type\":\"tuple\"}],\"name\":\"AddRollup\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"}],\"name\":\"Attested\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"GetHostAddresses\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"GetImportantContractKeys\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"rollupHash\",\"type\":\"bytes32\"}],\"name\":\"GetRollupByHash\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"Hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"Signature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"LastSequenceNumber\",\"type\":\"uint256\"}],\"internalType\":\"structStructs.MetaRollup\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"}],\"name\":\"GrantSequencerEnclave\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_enclaveID\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_initSecret\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"_hostAddress\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_genesisAttestation\",\"type\":\"string\"}],\"name\":\"InitializeNetworkSecret\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"}],\"name\":\"IsSequencerEnclave\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"IsWithdrawalAvailable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"requestReport\",\"type\":\"string\"}],\"name\":\"RequestNetworkSecret\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"attesterID\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"requesterID\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"attesterSig\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"responseSecret\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"hostAddress\",\"type\":\"string\"},{\"internalType\":\"bool\",\"name\":\"verifyAttester\",\"type\":\"bool\"}],\"name\":\"RespondNetworkSecret\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RetrieveAllBridgeFunds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"}],\"name\":\"RevokeSequencerEnclave\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"SetImportantContractAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"importantContractAddresses\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"importantContractKeys\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastBatchSeqNo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageBus\",\"outputs\":[{\"internalType\":\"contractIMessageBus\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x608060405234801561001057600080fd5b5061001a3361001f565b610090565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6133aa8061009f6000396000f3fe60806040523480156200001157600080fd5b5060043610620001a15760003560e01c80637281099611620000e9578063a1a227fa1162000097578063db5d91b1116200006e578063db5d91b114620003c8578063e34fbfc814620003f7578063f2fde38b146200040c57600080fd5b8063a1a227fa146200038c578063a52f433c14620003a0578063bbd79e1514620003b157600080fd5b80638236a7ba11620000cc5780638236a7ba146200030e5780638da5cb5b146200033557806398077e86146200036657600080fd5b80637281099614620002fa5780638129fc1c146200030457600080fd5b8063440c953b11620001535780636a30d26c116200012a5780636a30d26c14620002cf5780636b9707d614620002d9578063715018a614620002f057600080fd5b8063440c953b14620002885780634766573814620002a157806359a9007114620002b857600080fd5b8063324ff8661162000188578063324ff86614620001d65780633e60a22f14620001f857806343348b2f146200024857600080fd5b806303e72e4814620001a65780632c77c81f14620001bf575b600080fd5b620001bd620001b73660046200185b565b62000423565b005b620001bd620001d0366004620018fb565b62000536565b620001e062000680565b604051620001ef9190620019f2565b60405180910390f35b6200022f6200020936600462001a58565b80516020818301810180516004825292820191909301209152546001600160a01b031681565b6040516001600160a01b039091168152602001620001ef565b620002776200025936600462001a99565b6001600160a01b031660009081526020819052604090205460ff1690565b6040519015158152602001620001ef565b6200029260065481565b604051908152602001620001ef565b620001bd620002b236600462001a99565b62000763565b620001bd620002c936600462001abe565b620007fe565b620001e062000914565b620001bd620002ea36600462001a99565b620009ee565b620001bd62000a83565b620001bd62000a9b565b620001bd62000b1f565b620003256200031f36600462001b6f565b62000cf2565b604051620001ef92919062001b89565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166200022f565b6200037d6200037736600462001b6f565b62000de2565b604051620001ef919062001bcf565b6008546200022f906001600160a01b031681565b600554610100900460ff1662000277565b620001bd620003c236600462001be4565b62000e97565b62000277620003d936600462001a99565b6001600160a01b031660009081526001602052604090205460ff1690565b620001bd6200040836600462001cb5565b5050565b620001bd6200041d36600462001a99565b6200106b565b6200042d620010c8565b60006001600160a01b03166004836040516200044a919062001cfb565b908152604051908190036020019020546001600160a01b031603620004a957600380546001810182556000919091527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b01620004a7838262001da7565b505b80600483604051620004bc919062001cfb565b90815260405190819003602001812080546001600160a01b039390931673ffffffffffffffffffffffffffffffffffffffff19909316929092179091557f17b2f9f5748931099ffee882b5b64f4a560b5c55da9b4f4e396dae3bb9f98cb5906200052a908490849062001e74565b60405180910390a15050565b60006200058885356200054d602088018862001ea1565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200113f92505050565b6001600160a01b03811660009081526020819052604090205490915060ff16620005f95760405162461bcd60e51b815260206004820152601660248201527f656e636c6176654944206e6f742061747465737465640000000000000000000060448201526064015b60405180910390fd5b6001600160a01b03811660009081526001602052604090205460ff16620006635760405162461bcd60e51b815260206004820152601960248201527f656e636c6176654944206e6f7420612073657175656e636572000000000000006044820152606401620005f0565b6200066e856200116d565b6200067982620011a5565b5050505050565b60606002805480602002602001604051908101604052809291908181526020016000905b828210156200075a578382906000526020600020018054620006c69062001d19565b80601f0160208091040260200160405190810160405280929190818152602001828054620006f49062001d19565b8015620007455780601f10620007195761010080835404028352916020019162000745565b820191906000526020600020905b8154815290600101906020018083116200072757829003601f168201915b505050505081526020019060010190620006a4565b50505050905090565b6200076d620010c8565b6001600160a01b03811660009081526020819052604090205460ff16620007d75760405162461bcd60e51b815260206004820152601660248201527f656e636c6176654944206e6f74206174746573746564000000000000000000006044820152606401620005f0565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b60055460ff1615620008795760405162461bcd60e51b815260206004820152602260248201527f6e6574776f726b2073656372657420616c726561647920696e697469616c697a60448201527f65640000000000000000000000000000000000000000000000000000000000006064820152608401620005f0565b60058054600160ff1991821681179092556001600160a01b03881660009081526020819052604081208054909216831790915560028054928301815590527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace01620008e5848262001da7565b5050506001600160a01b039093166000908152600160208190526040909120805460ff19169091179055505050565b60606003805480602002602001604051908101604052809291908181526020016000905b828210156200075a5783829060005260206000200180546200095a9062001d19565b80601f0160208091040260200160405190810160405280929190818152602001828054620009889062001d19565b8015620009d95780601f10620009ad57610100808354040283529160200191620009d9565b820191906000526020600020905b815481529060010190602001808311620009bb57829003601f168201915b50505050508152602001906001019062000938565b620009f8620010c8565b6001600160a01b03811660009081526001602052604090205460ff1662000a625760405162461bcd60e51b815260206004820152601960248201527f656e636c6176654944206e6f7420612073657175656e636572000000000000006044820152606401620005f0565b6001600160a01b03166000908152600160205260409020805460ff19169055565b62000a8d620010c8565b62000a99600062001275565b565b62000aa5620010c8565b6008546040517f36d2da900000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b03909116906336d2da9090602401600060405180830381600087803b15801562000b0457600080fd5b505af115801562000b19573d6000803e3d6000fd5b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff1660008115801562000b6b5750825b905060008267ffffffffffffffff16600114801562000b895750303b155b90508115801562000b98575080155b1562000bd0576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831562000c0557845468ff00000000000000001916680100000000000000001785555b62000c1033620012f3565b600060065560405162000c239062001785565b604051809103906000f08015801562000c40573d6000803e3d6000fd5b506008805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691821790556040519081527fbd726cf82ac9c3260b1495107182e336e0654b25c10915648c0cc15b2bb72cbf9060200160405180910390a183156200067957845468ff000000000000000019168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050505050565b60408051606080820183526000808352602080840183905283850182905285825260078152848220855193840190955284548352600185018054929586949390928401919062000d429062001d19565b80601f016020809104026020016040519081016040528092919081815260200182805462000d709062001d19565b801562000dc15780601f1062000d955761010080835404028352916020019162000dc1565b820191906000526020600020905b81548152906001019060200180831162000da357829003601f168201915b50505091835250506002919091015460209091015280519094149492505050565b6003818154811062000df357600080fd5b90600052602060002001600091509050805462000e109062001d19565b80601f016020809104026020016040519081016040528092919081815260200182805462000e3e9062001d19565b801562000e8f5780601f1062000e635761010080835404028352916020019162000e8f565b820191906000526020600020905b81548152906001019060200180831162000e7157829003601f168201915b505050505081565b6001600160a01b03861660009081526020819052604090205460ff168062000f285760405162461bcd60e51b815260206004820152602360248201527f726573706f6e64696e67206174746573746572206973206e6f7420617474657360448201527f74656400000000000000000000000000000000000000000000000000000000006064820152608401620005f0565b81156200100157600062000f638888868860405160200162000f4e949392919062001eeb565b60405160208183030381529060405262001308565b9050600062000f7382886200113f565b9050886001600160a01b0316816001600160a01b03161462000ffe5760405162461bcd60e51b815260206004820152602c60248201527f63616c63756c61746564206164647265737320616e642061747465737465724960448201527f4420646f6e74206d6174636800000000000000000000000000000000000000006064820152608401620005f0565b50505b6001600160a01b0386166000908152602081905260408120805460ff191660019081179091556002805491820181559091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0162001061848262001da7565b5050505050505050565b62001075620010c8565b6001600160a01b038116620010ba576040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260006004820152602401620005f0565b620010c58162001275565b50565b33620010fb7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b03161462000a99576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401620005f0565b60008060008062001151868662001347565b92509250925062001163828262001398565b5090949350505050565b8035600090815260076020526040902081906200118b828262001f4b565b505060065460408201351115620010c55760400135600655565b6000620011b382806200205b565b9050905060005b8181101562001270576008546001600160a01b0316639730886d620011e085806200205b565b84818110620011f357620011f3620020a8565b9050602002810190620012079190620020be565b60016040518363ffffffff1660e01b8152600401620012289291906200216e565b600060405180830381600087803b1580156200124357600080fd5b505af115801562001258573d6000803e3d6000fd5b5050505080620012689062002230565b9050620011ba565b505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b620012fd620014ae565b620010c58162001516565b600062001316825162001520565b826040516020016200132a92919062002258565b604051602081830303815290604052805190602001209050919050565b60008060008351604103620013855760208401516040850151606086015160001a6200137688828585620015c7565b95509550955050505062001391565b50508151600091506002905b9250925092565b6000826003811115620013af57620013af620022b7565b03620013b9575050565b6001826003811115620013d057620013d0620022b7565b0362001408576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028260038111156200141f576200141f620022b7565b036200145b576040517ffce698f700000000000000000000000000000000000000000000000000000000815260048101829052602401620005f0565b6003826003811115620014725762001472620022b7565b0362000408576040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260048101829052602401620005f0565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1662000a99576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62001075620014ae565b606060006200152f836200169b565b600101905060008167ffffffffffffffff81111562001552576200155262001793565b6040519080825280601f01601f1916602001820160405280156200157d576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846200158757509392505050565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111562001604575060009150600390508262001691565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801562001659573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116620016875750600092506001915082905062001691565b9250600091508190505b9450945094915050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310620016e5577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831062001712576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106200173157662386f26fc10000830492506010015b6305f5e10083106200174a576305f5e100830492506008015b61271083106200175f57612710830492506004015b6064831062001772576064830492506002015b600a83106200177f576001015b92915050565b6110a780620022ce83390190565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620017bb57600080fd5b813567ffffffffffffffff80821115620017d957620017d962001793565b604051601f8301601f19908116603f0116810190828211818310171562001804576200180462001793565b816040528381528660208588010111156200181e57600080fd5b836020870160208301376000602085830101528094505050505092915050565b80356001600160a01b03811681146200185657600080fd5b919050565b600080604083850312156200186f57600080fd5b823567ffffffffffffffff8111156200188757600080fd5b6200189585828601620017a9565b925050620018a6602084016200183e565b90509250929050565b60008083601f840112620018c257600080fd5b50813567ffffffffffffffff811115620018db57600080fd5b602083019150836020828501011115620018f457600080fd5b9250929050565b600080600080606085870312156200191257600080fd5b843567ffffffffffffffff808211156200192b57600080fd5b90860190606082890312156200194057600080fd5b909450602086013590808211156200195757600080fd5b6200196588838901620018af565b909550935060408701359150808211156200197f57600080fd5b508501602081880312156200199357600080fd5b939692955090935050565b60005b83811015620019bb578181015183820152602001620019a1565b50506000910152565b60008151808452620019de8160208601602086016200199e565b601f01601f19169290920160200192915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101562001a4b57603f1988860301845262001a38858351620019c4565b9450928501929085019060010162001a19565b5092979650505050505050565b60006020828403121562001a6b57600080fd5b813567ffffffffffffffff81111562001a8357600080fd5b62001a9184828501620017a9565b949350505050565b60006020828403121562001aac57600080fd5b62001ab7826200183e565b9392505050565b6000806000806000806080878903121562001ad857600080fd5b62001ae3876200183e565b9550602087013567ffffffffffffffff8082111562001b0157600080fd5b62001b0f8a838b01620018af565b9097509550604089013591508082111562001b2957600080fd5b62001b378a838b01620017a9565b9450606089013591508082111562001b4e57600080fd5b5062001b5d89828a01620018af565b979a9699509497509295939492505050565b60006020828403121562001b8257600080fd5b5035919050565b821515815260406020820152815160408201526000602083015160608084015262001bb860a0840182620019c4565b905060408401516080840152809150509392505050565b60208152600062001ab76020830184620019c4565b60008060008060008060c0878903121562001bfe57600080fd5b62001c09876200183e565b955062001c19602088016200183e565b9450604087013567ffffffffffffffff8082111562001c3757600080fd5b62001c458a838b01620017a9565b9550606089013591508082111562001c5c57600080fd5b62001c6a8a838b01620017a9565b9450608089013591508082111562001c8157600080fd5b5062001c9089828a01620017a9565b92505060a0870135801515811462001ca757600080fd5b809150509295509295509295565b6000806020838503121562001cc957600080fd5b823567ffffffffffffffff81111562001ce157600080fd5b62001cef85828601620018af565b90969095509350505050565b6000825162001d0f8184602087016200199e565b9190910192915050565b600181811c9082168062001d2e57607f821691505b60208210810362001d4f57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200127057600081815260208120601f850160051c8101602086101562001d7e5750805b601f850160051c820191505b8181101562001d9f5782815560010162001d8a565b505050505050565b815167ffffffffffffffff81111562001dc45762001dc462001793565b62001ddc8162001dd5845462001d19565b8462001d55565b602080601f83116001811462001e14576000841562001dfb5750858301515b600019600386901b1c1916600185901b17855562001d9f565b600085815260208120601f198616915b8281101562001e455788860151825594840194600190910190840162001e24565b508582101562001e645787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60408152600062001e896040830185620019c4565b90506001600160a01b03831660208301529392505050565b6000808335601e1984360301811262001eb957600080fd5b83018035915067ffffffffffffffff82111562001ed557600080fd5b602001915036819003821315620018f457600080fd5b60006bffffffffffffffffffffffff19808760601b168352808660601b16601484015250835162001f248160288501602088016200199e565b83519083019062001f3d8160288401602088016200199e565b016028019695505050505050565b813581556001808201602080850135601e1986360301811262001f6d57600080fd5b8501803567ffffffffffffffff81111562001f8757600080fd5b803603838301131562001f9957600080fd5b62001fb18162001faa865462001d19565b8662001d55565b6000601f82116001811462001fea576000831562001fd157508382018501355b600019600385901b1c1916600184901b17865562002046565b600086815260209020601f19841690835b828110156200201c5786850188013582559387019390890190870162001ffb565b50848210156200203c5760001960f88660031b161c198785880101351681555b50508683881b0186555b50505050505050604082013560028201555050565b6000808335601e198436030181126200207357600080fd5b83018035915067ffffffffffffffff8211156200208f57600080fd5b6020019150600581901b3603821315620018f457600080fd5b634e487b7160e01b600052603260045260246000fd5b6000823560be1983360301811262001d0f57600080fd5b803563ffffffff811681146200185657600080fd5b6000808335601e198436030181126200210257600080fd5b830160208101925035905067ffffffffffffffff8111156200212357600080fd5b803603821315620018f457600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b803560ff811681146200185657600080fd5b604081526001600160a01b0362002185846200183e565b1660408201526000602084013567ffffffffffffffff8116808214620021aa57600080fd5b60608401525063ffffffff620021c360408601620020d5565b166080830152620021d760608501620020d5565b63ffffffff1660a0830152620021f16080850185620020ea565b60c080850152620022086101008501828462002133565b9150506200221960a086016200215c565b60ff1660e084015260209092019290925292915050565b6000600182016200225157634e487b7160e01b600052601160045260246000fd5b5060010190565b7f19457468657265756d205369676e6564204d6573736167653a0a0000000000008152600083516200229281601a8501602088016200199e565b835190830190620022ab81601a8401602088016200199e565b01601a01949350505050565b634e487b7160e01b600052602160045260246000fdfe608060405234801561001057600080fd5b50338061003757604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b61004081610046565b50610096565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611002806100a56000396000f3fe6080604052600436106100b55760003560e01c80638da5cb5b1161006957806399a3ad211161004e57806399a3ad2114610269578063b1454caa14610289578063f2fde38b146102c257610129565b80638da5cb5b146102215780639730886d1461024957610129565b8063346633fb1161009a578063346633fb146101d957806336d2da90146101ec578063715018a61461020c57610129565b80630fcfbd111461017657806333a88c72146101a957610129565b36610129576040517f346633fb0000000000000000000000000000000000000000000000000000000081523360048201523460248201819052309163346633fb91906044016000604051808303818588803b15801561011357600080fd5b505af1158015610127573d6000803e3d6000fd5b005b60405162461bcd60e51b815260206004820152600b60248201527f756e737570706f7274656400000000000000000000000000000000000000000060448201526064015b60405180910390fd5b34801561018257600080fd5b50610196610191366004610945565b6102e2565b6040519081526020015b60405180910390f35b3480156101b557600080fd5b506101c96101c4366004610945565b610398565b60405190151581526020016101a0565b6101276101e736600461098f565b6103eb565b3480156101f857600080fd5b506101276102073660046109bb565b6104b7565b34801561021857600080fd5b50610127610566565b34801561022d57600080fd5b506000546040516001600160a01b0390911681526020016101a0565b34801561025557600080fd5b506101276102643660046109d8565b61057a565b34801561027557600080fd5b5061012761028436600461098f565b6106cc565b34801561029557600080fd5b506102a96102a4366004610a4e565b61077c565b60405167ffffffffffffffff90911681526020016101a0565b3480156102ce57600080fd5b506101276102dd3660046109bb565b6107d5565b600080826040516020016102f69190610b3a565b60408051601f19818403018152918152815160209283012060008181526001909352912054909150806103915760405162461bcd60e51b815260206004820152602160248201527f54686973206d65737361676520776173206e65766572207375626d697474656460448201527f2e00000000000000000000000000000000000000000000000000000000000000606482015260840161016d565b9392505050565b600080826040516020016103ac9190610b3a565b60408051601f1981840301815291815281516020928301206000818152600190935291205490915080158015906103e35750428111155b949350505050565b6000341180156103fa57508034145b61046c5760405162461bcd60e51b815260206004820152603060248201527f417474656d7074696e6720746f2073656e642076616c756520776974686f757460448201527f2070726f766964696e6720457468657200000000000000000000000000000000606482015260840161016d565b604080513381526001600160a01b0384166020820152348183015290517ff1365f826a788d6c1a955db0eed5ba8642674219c4771f8c65918617511a15609181900360600190a15050565b6104bf61082c565b6000816001600160a01b03164760405160006040518083038185875af1925050503d806000811461050c576040519150601f19603f3d011682016040523d82523d6000602084013e610511565b606091505b50509050806105625760405162461bcd60e51b815260206004820152601460248201527f6661696c65642073656e64696e672076616c7565000000000000000000000000604482015260640161016d565b5050565b61056e61082c565b6105786000610872565b565b61058261082c565b600061058e8242610c3b565b90506000836040516020016105a39190610b3a565b60408051601f198184030181529181528151602092830120600081815260019093529120549091501561063e5760405162461bcd60e51b815260206004820152602160248201527f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636560448201527f2100000000000000000000000000000000000000000000000000000000000000606482015260840161016d565b6000818152600160209081526040822084905560029190610661908701876109bb565b6001600160a01b03168152602081019190915260400160009081209061068d6080870160608801610c54565b63ffffffff168152602080820192909252604001600090812080546001810182559082529190208591600402016106c48282610e2a565b505050505050565b6106d461082c565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610721576040519150601f19603f3d011682016040523d82523d6000602084013e610726565b606091505b50509050806107775760405162461bcd60e51b815260206004820152601460248201527f6661696c65642073656e64696e672076616c7565000000000000000000000000604482015260640161016d565b505050565b6000610787336108cf565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef775937338288888888886040516107c49796959493929190610f44565b60405180910390a195945050505050565b6107dd61082c565b6001600160a01b038116610820576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526000600482015260240161016d565b61082981610872565b50565b6000546001600160a01b03163314610578576040517f118cdaa700000000000000000000000000000000000000000000000000000000815233600482015260240161016d565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381166000908152600360205260408120805467ffffffffffffffff1691600191906109028385610fa4565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b600060c0828403121561093f57600080fd5b50919050565b60006020828403121561095757600080fd5b813567ffffffffffffffff81111561096e57600080fd5b6103e38482850161092d565b6001600160a01b038116811461082957600080fd5b600080604083850312156109a257600080fd5b82356109ad8161097a565b946020939093013593505050565b6000602082840312156109cd57600080fd5b81356103918161097a565b600080604083850312156109eb57600080fd5b823567ffffffffffffffff811115610a0257600080fd5b610a0e8582860161092d565b95602094909401359450505050565b63ffffffff8116811461082957600080fd5b60ff8116811461082957600080fd5b8035610a4981610a2f565b919050565b600080600080600060808688031215610a6657600080fd5b8535610a7181610a1d565b94506020860135610a8181610a1d565b9350604086013567ffffffffffffffff80821115610a9e57600080fd5b818801915088601f830112610ab257600080fd5b813581811115610ac157600080fd5b896020828501011115610ad357600080fd5b6020830195508094505050506060860135610aed81610a2f565b809150509295509295909350565b67ffffffffffffffff8116811461082957600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6020815260008235610b4b8161097a565b6001600160a01b0381166020840152506020830135610b6981610afb565b67ffffffffffffffff808216604085015260408501359150610b8a82610a1d565b63ffffffff808316606086015260608601359250610ba783610a1d565b80831660808601525060808501359150601e19853603018212610bc957600080fd5b6020918501918201913581811115610be057600080fd5b803603831315610bef57600080fd5b60c060a0860152610c0460e086018285610b11565b92505050610c1460a08501610a3e565b60ff811660c0850152509392505050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610c4e57610c4e610c25565b92915050565b600060208284031215610c6657600080fd5b813561039181610a1d565b60008135610c4e81610a1d565b6000808335601e19843603018112610c9557600080fd5b83018035915067ffffffffffffffff821115610cb057600080fd5b602001915036819003821315610cc557600080fd5b9250929050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680610cf657607f821691505b60208210810361093f57634e487b7160e01b600052602260045260246000fd5b601f82111561077757600081815260208120601f850160051c81016020861015610d3d5750805b601f850160051c820191505b818110156106c457828155600101610d49565b67ffffffffffffffff831115610d7457610d74610ccc565b610d8883610d828354610ce2565b83610d16565b6000601f841160018114610dbc5760008515610da45750838201355b600019600387901b1c1916600186901b178355610e16565b600083815260209020601f19861690835b82811015610ded5786850135825560209485019460019092019101610dcd565b5086821015610e0a5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b60008135610c4e81610a2f565b8135610e358161097a565b6001600160a01b038116905081548173ffffffffffffffffffffffffffffffffffffffff1982161783556020840135610e6d81610afb565b7bffffffffffffffff00000000000000000000000000000000000000008160a01b1690507fffffffff0000000000000000000000000000000000000000000000000000000081848285161717855560408601359250610ecb83610a1d565b921760e09190911b909116178155610f03610ee860608401610c71565b6001830163ffffffff821663ffffffff198254161781555050565b610f106080830183610c7e565b610f1e818360028601610d5c565b5050610562610f2f60a08401610e1d565b6003830160ff821660ff198254161781555050565b6001600160a01b038816815267ffffffffffffffff87166020820152600063ffffffff808816604084015280871660608401525060c06080830152610f8d60c083018587610b11565b905060ff831660a083015298975050505050505050565b67ffffffffffffffff818116838216019080821115610fc557610fc5610c25565b509291505056fea264697066735822122055bbe17521778f602b3eab0e1e16144809be200e76e1af574dfaadbe93774a6264736f6c63430008140033a2646970667358221220ec2b49324e96618d3b357759d174b2142ba9f45a7a75db67fed7662b2c94d98464736f6c63430008140033", } // ManagementContractABI is the input ABI used to generate the binding from. @@ -349,6 +349,37 @@ func (_ManagementContract *ManagementContractCallerSession) GetRollupByHash(roll return _ManagementContract.Contract.GetRollupByHash(&_ManagementContract.CallOpts, rollupHash) } +// IsSequencerEnclave is a free data retrieval call binding the contract method 0xdb5d91b1. +// +// Solidity: function IsSequencerEnclave(address _addr) view returns(bool) +func (_ManagementContract *ManagementContractCaller) IsSequencerEnclave(opts *bind.CallOpts, _addr common.Address) (bool, error) { + var out []interface{} + err := _ManagementContract.contract.Call(opts, &out, "IsSequencerEnclave", _addr) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsSequencerEnclave is a free data retrieval call binding the contract method 0xdb5d91b1. +// +// Solidity: function IsSequencerEnclave(address _addr) view returns(bool) +func (_ManagementContract *ManagementContractSession) IsSequencerEnclave(_addr common.Address) (bool, error) { + return _ManagementContract.Contract.IsSequencerEnclave(&_ManagementContract.CallOpts, _addr) +} + +// IsSequencerEnclave is a free data retrieval call binding the contract method 0xdb5d91b1. +// +// Solidity: function IsSequencerEnclave(address _addr) view returns(bool) +func (_ManagementContract *ManagementContractCallerSession) IsSequencerEnclave(_addr common.Address) (bool, error) { + return _ManagementContract.Contract.IsSequencerEnclave(&_ManagementContract.CallOpts, _addr) +} + // IsWithdrawalAvailable is a free data retrieval call binding the contract method 0xa52f433c. // // Solidity: function IsWithdrawalAvailable() view returns(bool) @@ -556,6 +587,27 @@ func (_ManagementContract *ManagementContractTransactorSession) AddRollup(r Stru return _ManagementContract.Contract.AddRollup(&_ManagementContract.TransactOpts, r, _rollupData, crossChainData) } +// GrantSequencerEnclave is a paid mutator transaction binding the contract method 0x47665738. +// +// Solidity: function GrantSequencerEnclave(address _addr) returns() +func (_ManagementContract *ManagementContractTransactor) GrantSequencerEnclave(opts *bind.TransactOpts, _addr common.Address) (*types.Transaction, error) { + return _ManagementContract.contract.Transact(opts, "GrantSequencerEnclave", _addr) +} + +// GrantSequencerEnclave is a paid mutator transaction binding the contract method 0x47665738. +// +// Solidity: function GrantSequencerEnclave(address _addr) returns() +func (_ManagementContract *ManagementContractSession) GrantSequencerEnclave(_addr common.Address) (*types.Transaction, error) { + return _ManagementContract.Contract.GrantSequencerEnclave(&_ManagementContract.TransactOpts, _addr) +} + +// GrantSequencerEnclave is a paid mutator transaction binding the contract method 0x47665738. +// +// Solidity: function GrantSequencerEnclave(address _addr) returns() +func (_ManagementContract *ManagementContractTransactorSession) GrantSequencerEnclave(_addr common.Address) (*types.Transaction, error) { + return _ManagementContract.Contract.GrantSequencerEnclave(&_ManagementContract.TransactOpts, _addr) +} + // InitializeNetworkSecret is a paid mutator transaction binding the contract method 0x59a90071. // // Solidity: function InitializeNetworkSecret(address _enclaveID, bytes _initSecret, string _hostAddress, string _genesisAttestation) returns() @@ -640,6 +692,27 @@ func (_ManagementContract *ManagementContractTransactorSession) RetrieveAllBridg return _ManagementContract.Contract.RetrieveAllBridgeFunds(&_ManagementContract.TransactOpts) } +// RevokeSequencerEnclave is a paid mutator transaction binding the contract method 0x6b9707d6. +// +// Solidity: function RevokeSequencerEnclave(address _addr) returns() +func (_ManagementContract *ManagementContractTransactor) RevokeSequencerEnclave(opts *bind.TransactOpts, _addr common.Address) (*types.Transaction, error) { + return _ManagementContract.contract.Transact(opts, "RevokeSequencerEnclave", _addr) +} + +// RevokeSequencerEnclave is a paid mutator transaction binding the contract method 0x6b9707d6. +// +// Solidity: function RevokeSequencerEnclave(address _addr) returns() +func (_ManagementContract *ManagementContractSession) RevokeSequencerEnclave(_addr common.Address) (*types.Transaction, error) { + return _ManagementContract.Contract.RevokeSequencerEnclave(&_ManagementContract.TransactOpts, _addr) +} + +// RevokeSequencerEnclave is a paid mutator transaction binding the contract method 0x6b9707d6. +// +// Solidity: function RevokeSequencerEnclave(address _addr) returns() +func (_ManagementContract *ManagementContractTransactorSession) RevokeSequencerEnclave(_addr common.Address) (*types.Transaction, error) { + return _ManagementContract.Contract.RevokeSequencerEnclave(&_ManagementContract.TransactOpts, _addr) +} + // SetImportantContractAddress is a paid mutator transaction binding the contract method 0x03e72e48. // // Solidity: function SetImportantContractAddress(string key, address newAddress) returns() diff --git a/contracts/src/management/ManagementContract.sol b/contracts/src/management/ManagementContract.sol index c948a31a98..7bd79b6798 100644 --- a/contracts/src/management/ManagementContract.sol +++ b/contracts/src/management/ManagementContract.sol @@ -25,6 +25,11 @@ contract ManagementContract is Initializable, OwnableUpgradeable { // mapping of enclaveID to whether it is attested mapping(address => bool) private attested; + // mapping of enclaveID to whether it is permissioned as a sequencer enclave + // note: the enclaveID which initialises the network secret is automatically permissioned as a sequencer. + // Beyond that, the contract owner can grant and revoke sequencer status. + mapping(address => bool) private sequencerEnclave; + // TODO - Revisit the decision to store the host addresses in the smart contract. string[] private hostAddresses; // The addresses of all the Ten hosts on the network. @@ -79,10 +84,11 @@ contract ManagementContract is Initializable, OwnableUpgradeable { function AddRollup(Structs.MetaRollup calldata r, string calldata _rollupData, Structs.HeaderCrossChainData calldata crossChainData) public { // TODO: Add a check that ensures the cross messages are coming from the correct fork using block hashes. - // todo: verify this enclaveID is a permissioned Sequencer enclaveID address enclaveID = ECDSA.recover(r.Hash, r.Signature); // revert if the EnclaveID is not attested require(attested[enclaveID], "enclaveID not attested"); + // revert if the EnclaveID is not permissioned as a sequencer + require(sequencerEnclave[enclaveID], "enclaveID not a sequencer"); AppendRollup(r); pushCrossChainMessages(crossChainData); @@ -99,6 +105,9 @@ contract ManagementContract is Initializable, OwnableUpgradeable { // enclave is now on the list of attested enclaves (and its host address is published for p2p) attested[_enclaveID] = true; hostAddresses.push(_hostAddress); + + // the enclave that starts the network with this call is implicitly a sequencer so doesn't need adding + sequencerEnclave[_enclaveID] = true; } // Enclaves can request the Network Secret given an attestation request report @@ -148,6 +157,24 @@ contract ManagementContract is Initializable, OwnableUpgradeable { return attested[_addr]; } + // Accessor that checks if an address is permissioned as a sequencer + function IsSequencerEnclave(address _addr) view public returns (bool) { + return sequencerEnclave[_addr]; + } + + // Function to grant sequencer status for an enclave - contract owner only + function GrantSequencerEnclave(address _addr) public onlyOwner { + // require the enclave to be attested already + require(attested[_addr], "enclaveID not attested"); + sequencerEnclave[_addr] = true; + } + // Function to revoke sequencer status for an enclave - contract owner only + function RevokeSequencerEnclave(address _addr) public onlyOwner { + // require the enclave to be a sequencer already + require(sequencerEnclave[_addr], "enclaveID not a sequencer"); + delete sequencerEnclave[_addr]; + } + // Testnet function to allow the contract owner to retrieve **all** funds from the network bridge. function RetrieveAllBridgeFunds() public onlyOwner { messageBus.retrieveAllFunds(msg.sender);