diff --git a/contracts/generated/ManagementContract/ManagementContract.go b/contracts/generated/ManagementContract/ManagementContract.go index ee94ead234..e5cd24c602 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\":\"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\":\"_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\":\"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: "0x608060405234801561001057600080fd5b5061001a3361001f565b610090565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6131bd8061009f6000396000f3fe60806040523480156200001157600080fd5b5060043610620001955760003560e01c80637281099611620000e9578063a1a227fa1162000097578063db5d91b1116200006e578063db5d91b114620003ad578063e34fbfc814620003dc578063f2fde38b14620003f157600080fd5b8063a1a227fa1462000371578063a52f433c1462000385578063d4fab887146200039657600080fd5b80638236a7ba11620000cc5780638236a7ba14620002f35780638da5cb5b146200031a57806398077e86146200034b57600080fd5b80637281099614620002df5780638129fc1c14620002e957600080fd5b80634766573811620001475780636a30d26c116200012a5780636a30d26c14620002a55780636b9707d614620002be578063715018a614620002d557600080fd5b806347665738146200027757806368e10383146200028e57600080fd5b80633e60a22f116200017c5780633e60a22f14620001ca57806343348b2f146200021e578063440c953b146200025e57600080fd5b806303e72e48146200019a5780632c77c81f14620001b3575b600080fd5b620001b1620001ab366004620016d3565b62000408565b005b620001b1620001c436600462001773565b6200051b565b62000201620001db36600462001816565b80516020818301810180516003825292820191909301209152546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6200024d6200022f36600462001857565b6001600160a01b031660009081526020819052604090205460ff1690565b604051901515815260200162000215565b6200026860055481565b60405190815260200162000215565b620001b16200028836600462001857565b62000665565b620001b16200029f3660046200187c565b62000700565b620002af620007c4565b6040516200021591906200195a565b620001b1620002cf36600462001857565b620008a7565b620001b16200093c565b620001b162000954565b620001b1620009d8565b6200030a62000304366004620019c0565b62000bab565b60405162000215929190620019da565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031662000201565b620003626200035c366004620019c0565b62000c9b565b60405162000215919062001a20565b60075462000201906001600160a01b031681565b600454610100900460ff166200024d565b620001b1620003a736600462001a35565b62000d50565b6200024d620003be36600462001857565b6001600160a01b031660009081526001602052604090205460ff1690565b620001b1620003ed36600462001ae0565b5050565b620001b16200040236600462001857565b62000ee3565b6200041262000f40565b60006001600160a01b03166003836040516200042f919062001b26565b908152604051908190036020019020546001600160a01b0316036200048e57600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace016200048c838262001bd2565b505b80600383604051620004a1919062001b26565b90815260405190819003602001812080546001600160a01b039390931673ffffffffffffffffffffffffffffffffffffffff19909316929092179091557f17b2f9f5748931099ffee882b5b64f4a560b5c55da9b4f4e396dae3bb9f98cb5906200050f908490849062001c9f565b60405180910390a15050565b60006200056d853562000532602088018862001ccc565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062000fb792505050565b6001600160a01b03811660009081526020819052604090205490915060ff16620005de5760405162461bcd60e51b815260206004820152601660248201527f656e636c6176654944206e6f742061747465737465640000000000000000000060448201526064015b60405180910390fd5b6001600160a01b03811660009081526001602052604090205460ff16620006485760405162461bcd60e51b815260206004820152601960248201527f656e636c6176654944206e6f7420612073657175656e636572000000000000006044820152606401620005d5565b620006538562000fe5565b6200065e826200101d565b5050505050565b6200066f62000f40565b6001600160a01b03811660009081526020819052604090205460ff16620006d95760405162461bcd60e51b815260206004820152601660248201527f656e636c6176654944206e6f74206174746573746564000000000000000000006044820152606401620005d5565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b60045460ff16156200077b5760405162461bcd60e51b815260206004820152602260248201527f6e6574776f726b2073656372657420616c726561647920696e697469616c697a60448201527f65640000000000000000000000000000000000000000000000000000000000006064820152608401620005d5565b50506004805460ff1990811660019081179092556001600160a01b0390941660009081526020818152604080832080548816851790559083905290208054909416179092555050565b60606002805480602002602001604051908101604052809291908181526020016000905b828210156200089e5783829060005260206000200180546200080a9062001b44565b80601f0160208091040260200160405190810160405280929190818152602001828054620008389062001b44565b8015620008895780601f106200085d5761010080835404028352916020019162000889565b820191906000526020600020905b8154815290600101906020018083116200086b57829003601f168201915b505050505081526020019060010190620007e8565b50505050905090565b620008b162000f40565b6001600160a01b03811660009081526001602052604090205460ff166200091b5760405162461bcd60e51b815260206004820152601960248201527f656e636c6176654944206e6f7420612073657175656e636572000000000000006044820152606401620005d5565b6001600160a01b03166000908152600160205260409020805460ff19169055565b6200094662000f40565b620009526000620010ed565b565b6200095e62000f40565b6007546040517f36d2da900000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b03909116906336d2da9090602401600060405180830381600087803b158015620009bd57600080fd5b505af1158015620009d2573d6000803e3d6000fd5b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff1660008115801562000a245750825b905060008267ffffffffffffffff16600114801562000a425750303b155b90508115801562000a51575080155b1562000a89576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831562000abe57845468ff00000000000000001916680100000000000000001785555b62000ac9336200116b565b600060055560405162000adc90620015fd565b604051809103906000f08015801562000af9573d6000803e3d6000fd5b506007805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691821790556040519081527fbd726cf82ac9c3260b1495107182e336e0654b25c10915648c0cc15b2bb72cbf9060200160405180910390a183156200065e57845468ff000000000000000019168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050505050565b60408051606080820183526000808352602080840183905283850182905285825260068152848220855193840190955284548352600185018054929586949390928401919062000bfb9062001b44565b80601f016020809104026020016040519081016040528092919081815260200182805462000c299062001b44565b801562000c7a5780601f1062000c4e5761010080835404028352916020019162000c7a565b820191906000526020600020905b81548152906001019060200180831162000c5c57829003601f168201915b50505091835250506002919091015460209091015280519094149492505050565b6002818154811062000cac57600080fd5b90600052602060002001600091509050805462000cc99062001b44565b80601f016020809104026020016040519081016040528092919081815260200182805462000cf79062001b44565b801562000d485780601f1062000d1c5761010080835404028352916020019162000d48565b820191906000526020600020905b81548152906001019060200180831162000d2a57829003601f168201915b505050505081565b6001600160a01b03851660009081526020819052604090205460ff168062000de15760405162461bcd60e51b815260206004820152602360248201527f726573706f6e64696e67206174746573746572206973206e6f7420617474657360448201527f74656400000000000000000000000000000000000000000000000000000000006064820152608401620005d5565b811562000eb857600062000e1a87878660405160200162000e059392919062001d16565b60405160208183030381529060405262001180565b9050600062000e2a828762000fb7565b9050876001600160a01b0316816001600160a01b03161462000eb55760405162461bcd60e51b815260206004820152602c60248201527f63616c63756c61746564206164647265737320616e642061747465737465724960448201527f4420646f6e74206d6174636800000000000000000000000000000000000000006064820152608401620005d5565b50505b5050506001600160a01b039091166000908152602081905260409020805460ff191660011790555050565b62000eed62000f40565b6001600160a01b03811662000f32576040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260006004820152602401620005d5565b62000f3d81620010ed565b50565b3362000f737f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b03161462000952576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401620005d5565b60008060008062000fc98686620011bf565b92509250925062000fdb828262001210565b5090949350505050565b80356000908152600660205260409020819062001003828262001d5e565b50506005546040820135111562000f3d5760400135600555565b60006200102b828062001e6e565b9050905060005b81811015620010e8576007546001600160a01b0316639730886d62001058858062001e6e565b848181106200106b576200106b62001ebb565b90506020028101906200107f919062001ed1565b60016040518363ffffffff1660e01b8152600401620010a092919062001f81565b600060405180830381600087803b158015620010bb57600080fd5b505af1158015620010d0573d6000803e3d6000fd5b5050505080620010e09062002043565b905062001032565b505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6200117562001326565b62000f3d816200138e565b60006200118e825162001398565b82604051602001620011a29291906200206b565b604051602081830303815290604052805190602001209050919050565b60008060008351604103620011fd5760208401516040850151606086015160001a620011ee888285856200143f565b95509550955050505062001209565b50508151600091506002905b9250925092565b6000826003811115620012275762001227620020ca565b0362001231575050565b6001826003811115620012485762001248620020ca565b0362001280576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002826003811115620012975762001297620020ca565b03620012d3576040517ffce698f700000000000000000000000000000000000000000000000000000000815260048101829052602401620005d5565b6003826003811115620012ea57620012ea620020ca565b03620003ed576040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260048101829052602401620005d5565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1662000952576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62000eed62001326565b60606000620013a78362001513565b600101905060008167ffffffffffffffff811115620013ca57620013ca6200160b565b6040519080825280601f01601f191660200182016040528015620013f5576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084620013ff57509392505050565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156200147c575060009150600390508262001509565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015620014d1573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116620014ff5750600092506001915082905062001509565b9250600091508190505b9450945094915050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106200155d577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106200158a576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310620015a957662386f26fc10000830492506010015b6305f5e1008310620015c2576305f5e100830492506008015b6127108310620015d757612710830492506004015b60648310620015ea576064830492506002015b600a8310620015f7576001015b92915050565b6110a780620020e183390190565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200163357600080fd5b813567ffffffffffffffff808211156200165157620016516200160b565b604051601f8301601f19908116603f011681019082821181831017156200167c576200167c6200160b565b816040528381528660208588010111156200169657600080fd5b836020870160208301376000602085830101528094505050505092915050565b80356001600160a01b0381168114620016ce57600080fd5b919050565b60008060408385031215620016e757600080fd5b823567ffffffffffffffff811115620016ff57600080fd5b6200170d8582860162001621565b9250506200171e60208401620016b6565b90509250929050565b60008083601f8401126200173a57600080fd5b50813567ffffffffffffffff8111156200175357600080fd5b6020830191508360208285010111156200176c57600080fd5b9250929050565b600080600080606085870312156200178a57600080fd5b843567ffffffffffffffff80821115620017a357600080fd5b9086019060608289031215620017b857600080fd5b90945060208601359080821115620017cf57600080fd5b620017dd8883890162001727565b90955093506040870135915080821115620017f757600080fd5b508501602081880312156200180b57600080fd5b939692955090935050565b6000602082840312156200182957600080fd5b813567ffffffffffffffff8111156200184157600080fd5b6200184f8482850162001621565b949350505050565b6000602082840312156200186a57600080fd5b6200187582620016b6565b9392505050565b6000806000806000606086880312156200189557600080fd5b620018a086620016b6565b9450602086013567ffffffffffffffff80821115620018be57600080fd5b620018cc89838a0162001727565b90965094506040880135915080821115620018e657600080fd5b50620018f58882890162001727565b969995985093965092949392505050565b60005b838110156200192357818101518382015260200162001909565b50506000910152565b600081518084526200194681602086016020860162001906565b601f01601f19169290920160200192915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015620019b357603f19888603018452620019a08583516200192c565b9450928501929085019060010162001981565b5092979650505050505050565b600060208284031215620019d357600080fd5b5035919050565b821515815260406020820152815160408201526000602083015160608084015262001a0960a08401826200192c565b905060408401516080840152809150509392505050565b6020815260006200187560208301846200192c565b600080600080600060a0868803121562001a4e57600080fd5b62001a5986620016b6565b945062001a6960208701620016b6565b9350604086013567ffffffffffffffff8082111562001a8757600080fd5b62001a9589838a0162001621565b9450606088013591508082111562001aac57600080fd5b5062001abb8882890162001621565b9250506080860135801515811462001ad257600080fd5b809150509295509295909350565b6000806020838503121562001af457600080fd5b823567ffffffffffffffff81111562001b0c57600080fd5b62001b1a8582860162001727565b90969095509350505050565b6000825162001b3a81846020870162001906565b9190910192915050565b600181811c9082168062001b5957607f821691505b60208210810362001b7a57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620010e857600081815260208120601f850160051c8101602086101562001ba95750805b601f850160051c820191505b8181101562001bca5782815560010162001bb5565b505050505050565b815167ffffffffffffffff81111562001bef5762001bef6200160b565b62001c078162001c00845462001b44565b8462001b80565b602080601f83116001811462001c3f576000841562001c265750858301515b600019600386901b1c1916600185901b17855562001bca565b600085815260208120601f198616915b8281101562001c705788860151825594840194600190910190840162001c4f565b508582101562001c8f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60408152600062001cb460408301856200192c565b90506001600160a01b03831660208301529392505050565b6000808335601e1984360301811262001ce457600080fd5b83018035915067ffffffffffffffff82111562001d0057600080fd5b6020019150368190038213156200176c57600080fd5b60006bffffffffffffffffffffffff19808660601b168352808560601b16601484015250825162001d4f81602885016020870162001906565b91909101602801949350505050565b813581556001808201602080850135601e1986360301811262001d8057600080fd5b8501803567ffffffffffffffff81111562001d9a57600080fd5b803603838301131562001dac57600080fd5b62001dc48162001dbd865462001b44565b8662001b80565b6000601f82116001811462001dfd576000831562001de457508382018501355b600019600385901b1c1916600184901b17865562001e59565b600086815260209020601f19841690835b8281101562001e2f5786850188013582559387019390890190870162001e0e565b508482101562001e4f5760001960f88660031b161c198785880101351681555b50508683881b0186555b50505050505050604082013560028201555050565b6000808335601e1984360301811262001e8657600080fd5b83018035915067ffffffffffffffff82111562001ea257600080fd5b6020019150600581901b36038213156200176c57600080fd5b634e487b7160e01b600052603260045260246000fd5b6000823560be1983360301811262001b3a57600080fd5b803563ffffffff81168114620016ce57600080fd5b6000808335601e1984360301811262001f1557600080fd5b830160208101925035905067ffffffffffffffff81111562001f3657600080fd5b8036038213156200176c57600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b803560ff81168114620016ce57600080fd5b604081526001600160a01b0362001f9884620016b6565b1660408201526000602084013567ffffffffffffffff811680821462001fbd57600080fd5b60608401525063ffffffff62001fd66040860162001ee8565b16608083015262001fea6060850162001ee8565b63ffffffff1660a083015262002004608085018562001efd565b60c0808501526200201b6101008501828462001f46565b9150506200202c60a0860162001f6f565b60ff1660e084015260209092019290925292915050565b6000600182016200206457634e487b7160e01b600052601160045260246000fd5b5060010190565b7f19457468657265756d205369676e6564204d6573736167653a0a000000000000815260008351620020a581601a85016020880162001906565b835190830190620020be81601a84016020880162001906565b01601a01949350505050565b634e487b7160e01b600052602160045260246000fdfe608060405234801561001057600080fd5b50338061003757604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b61004081610046565b50610096565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611002806100a56000396000f3fe6080604052600436106100b55760003560e01c80638da5cb5b1161006957806399a3ad211161004e57806399a3ad2114610269578063b1454caa14610289578063f2fde38b146102c257610129565b80638da5cb5b146102215780639730886d1461024957610129565b8063346633fb1161009a578063346633fb146101d957806336d2da90146101ec578063715018a61461020c57610129565b80630fcfbd111461017657806333a88c72146101a957610129565b36610129576040517f346633fb0000000000000000000000000000000000000000000000000000000081523360048201523460248201819052309163346633fb91906044016000604051808303818588803b15801561011357600080fd5b505af1158015610127573d6000803e3d6000fd5b005b60405162461bcd60e51b815260206004820152600b60248201527f756e737570706f7274656400000000000000000000000000000000000000000060448201526064015b60405180910390fd5b34801561018257600080fd5b50610196610191366004610945565b6102e2565b6040519081526020015b60405180910390f35b3480156101b557600080fd5b506101c96101c4366004610945565b610398565b60405190151581526020016101a0565b6101276101e736600461098f565b6103eb565b3480156101f857600080fd5b506101276102073660046109bb565b6104b7565b34801561021857600080fd5b50610127610566565b34801561022d57600080fd5b506000546040516001600160a01b0390911681526020016101a0565b34801561025557600080fd5b506101276102643660046109d8565b61057a565b34801561027557600080fd5b5061012761028436600461098f565b6106cc565b34801561029557600080fd5b506102a96102a4366004610a4e565b61077c565b60405167ffffffffffffffff90911681526020016101a0565b3480156102ce57600080fd5b506101276102dd3660046109bb565b6107d5565b600080826040516020016102f69190610b3a565b60408051601f19818403018152918152815160209283012060008181526001909352912054909150806103915760405162461bcd60e51b815260206004820152602160248201527f54686973206d65737361676520776173206e65766572207375626d697474656460448201527f2e00000000000000000000000000000000000000000000000000000000000000606482015260840161016d565b9392505050565b600080826040516020016103ac9190610b3a565b60408051601f1981840301815291815281516020928301206000818152600190935291205490915080158015906103e35750428111155b949350505050565b6000341180156103fa57508034145b61046c5760405162461bcd60e51b815260206004820152603060248201527f417474656d7074696e6720746f2073656e642076616c756520776974686f757460448201527f2070726f766964696e6720457468657200000000000000000000000000000000606482015260840161016d565b604080513381526001600160a01b0384166020820152348183015290517ff1365f826a788d6c1a955db0eed5ba8642674219c4771f8c65918617511a15609181900360600190a15050565b6104bf61082c565b6000816001600160a01b03164760405160006040518083038185875af1925050503d806000811461050c576040519150601f19603f3d011682016040523d82523d6000602084013e610511565b606091505b50509050806105625760405162461bcd60e51b815260206004820152601460248201527f6661696c65642073656e64696e672076616c7565000000000000000000000000604482015260640161016d565b5050565b61056e61082c565b6105786000610872565b565b61058261082c565b600061058e8242610c3b565b90506000836040516020016105a39190610b3a565b60408051601f198184030181529181528151602092830120600081815260019093529120549091501561063e5760405162461bcd60e51b815260206004820152602160248201527f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636560448201527f2100000000000000000000000000000000000000000000000000000000000000606482015260840161016d565b6000818152600160209081526040822084905560029190610661908701876109bb565b6001600160a01b03168152602081019190915260400160009081209061068d6080870160608801610c54565b63ffffffff168152602080820192909252604001600090812080546001810182559082529190208591600402016106c48282610e2a565b505050505050565b6106d461082c565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610721576040519150601f19603f3d011682016040523d82523d6000602084013e610726565b606091505b50509050806107775760405162461bcd60e51b815260206004820152601460248201527f6661696c65642073656e64696e672076616c7565000000000000000000000000604482015260640161016d565b505050565b6000610787336108cf565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef775937338288888888886040516107c49796959493929190610f44565b60405180910390a195945050505050565b6107dd61082c565b6001600160a01b038116610820576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526000600482015260240161016d565b61082981610872565b50565b6000546001600160a01b03163314610578576040517f118cdaa700000000000000000000000000000000000000000000000000000000815233600482015260240161016d565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381166000908152600360205260408120805467ffffffffffffffff1691600191906109028385610fa4565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b600060c0828403121561093f57600080fd5b50919050565b60006020828403121561095757600080fd5b813567ffffffffffffffff81111561096e57600080fd5b6103e38482850161092d565b6001600160a01b038116811461082957600080fd5b600080604083850312156109a257600080fd5b82356109ad8161097a565b946020939093013593505050565b6000602082840312156109cd57600080fd5b81356103918161097a565b600080604083850312156109eb57600080fd5b823567ffffffffffffffff811115610a0257600080fd5b610a0e8582860161092d565b95602094909401359450505050565b63ffffffff8116811461082957600080fd5b60ff8116811461082957600080fd5b8035610a4981610a2f565b919050565b600080600080600060808688031215610a6657600080fd5b8535610a7181610a1d565b94506020860135610a8181610a1d565b9350604086013567ffffffffffffffff80821115610a9e57600080fd5b818801915088601f830112610ab257600080fd5b813581811115610ac157600080fd5b896020828501011115610ad357600080fd5b6020830195508094505050506060860135610aed81610a2f565b809150509295509295909350565b67ffffffffffffffff8116811461082957600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6020815260008235610b4b8161097a565b6001600160a01b0381166020840152506020830135610b6981610afb565b67ffffffffffffffff808216604085015260408501359150610b8a82610a1d565b63ffffffff808316606086015260608601359250610ba783610a1d565b80831660808601525060808501359150601e19853603018212610bc957600080fd5b6020918501918201913581811115610be057600080fd5b803603831315610bef57600080fd5b60c060a0860152610c0460e086018285610b11565b92505050610c1460a08501610a3e565b60ff811660c0850152509392505050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610c4e57610c4e610c25565b92915050565b600060208284031215610c6657600080fd5b813561039181610a1d565b60008135610c4e81610a1d565b6000808335601e19843603018112610c9557600080fd5b83018035915067ffffffffffffffff821115610cb057600080fd5b602001915036819003821315610cc557600080fd5b9250929050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680610cf657607f821691505b60208210810361093f57634e487b7160e01b600052602260045260246000fd5b601f82111561077757600081815260208120601f850160051c81016020861015610d3d5750805b601f850160051c820191505b818110156106c457828155600101610d49565b67ffffffffffffffff831115610d7457610d74610ccc565b610d8883610d828354610ce2565b83610d16565b6000601f841160018114610dbc5760008515610da45750838201355b600019600387901b1c1916600186901b178355610e16565b600083815260209020601f19861690835b82811015610ded5786850135825560209485019460019092019101610dcd565b5086821015610e0a5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b60008135610c4e81610a2f565b8135610e358161097a565b6001600160a01b038116905081548173ffffffffffffffffffffffffffffffffffffffff1982161783556020840135610e6d81610afb565b7bffffffffffffffff00000000000000000000000000000000000000008160a01b1690507fffffffff0000000000000000000000000000000000000000000000000000000081848285161717855560408601359250610ecb83610a1d565b921760e09190911b909116178155610f03610ee860608401610c71565b6001830163ffffffff821663ffffffff198254161781555050565b610f106080830183610c7e565b610f1e818360028601610d5c565b5050610562610f2f60a08401610e1d565b6003830160ff821660ff198254161781555050565b6001600160a01b038816815267ffffffffffffffff87166020820152600063ffffffff808816604084015280871660608401525060c06080830152610f8d60c083018587610b11565b905060ff831660a083015298975050505050505050565b67ffffffffffffffff818116838216019080821115610fc557610fc5610c25565b509291505056fea264697066735822122055bbe17521778f602b3eab0e1e16144809be200e76e1af574dfaadbe93774a6264736f6c63430008140033a2646970667358221220988c97557f81218d102add918ac3bc9901a051f845bec5d8043436c3f645561a64736f6c63430008140033", + 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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"enclaveID\",\"type\":\"address\"}],\"name\":\"SequencerEnclaveGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"enclaveID\",\"type\":\"address\"}],\"name\":\"SequencerEnclaveRevoked\",\"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\":\"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\":\"_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\":\"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: "0x608060405234801561001057600080fd5b5061001a3361001f565b610090565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b61324d8061009f6000396000f3fe60806040523480156200001157600080fd5b5060043610620001955760003560e01c80637281099611620000e9578063a1a227fa1162000097578063db5d91b1116200006e578063db5d91b114620003ad578063e34fbfc814620003dc578063f2fde38b14620003f157600080fd5b8063a1a227fa1462000371578063a52f433c1462000385578063d4fab887146200039657600080fd5b80638236a7ba11620000cc5780638236a7ba14620002f35780638da5cb5b146200031a57806398077e86146200034b57600080fd5b80637281099614620002df5780638129fc1c14620002e957600080fd5b80634766573811620001475780636a30d26c116200012a5780636a30d26c14620002a55780636b9707d614620002be578063715018a614620002d557600080fd5b806347665738146200027757806368e10383146200028e57600080fd5b80633e60a22f116200017c5780633e60a22f14620001ca57806343348b2f146200021e578063440c953b146200025e57600080fd5b806303e72e48146200019a5780632c77c81f14620001b3575b600080fd5b620001b1620001ab36600462001763565b62000408565b005b620001b1620001c436600462001803565b6200051b565b62000201620001db366004620018a6565b80516020818301810180516003825292820191909301209152546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6200024d6200022f366004620018e7565b6001600160a01b031660009081526020819052604090205460ff1690565b604051901515815260200162000215565b6200026860055481565b60405190815260200162000215565b620001b162000288366004620018e7565b62000665565b620001b16200029f3660046200190c565b62000735565b620002af6200082c565b604051620002159190620019ea565b620001b1620002cf366004620018e7565b6200090f565b620001b1620009d5565b620001b1620009ed565b620001b162000a71565b6200030a6200030436600462001a50565b62000c3b565b6040516200021592919062001a6a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031662000201565b620003626200035c36600462001a50565b62000d2b565b60405162000215919062001ab0565b60075462000201906001600160a01b031681565b600454610100900460ff166200024d565b620001b1620003a736600462001ac5565b62000de0565b6200024d620003be366004620018e7565b6001600160a01b031660009081526001602052604090205460ff1690565b620001b1620003ed36600462001b70565b5050565b620001b162000402366004620018e7565b62000f73565b6200041262000fd0565b60006001600160a01b03166003836040516200042f919062001bb6565b908152604051908190036020019020546001600160a01b0316036200048e57600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace016200048c838262001c62565b505b80600383604051620004a1919062001bb6565b90815260405190819003602001812080546001600160a01b039390931673ffffffffffffffffffffffffffffffffffffffff19909316929092179091557f17b2f9f5748931099ffee882b5b64f4a560b5c55da9b4f4e396dae3bb9f98cb5906200050f908490849062001d2f565b60405180910390a15050565b60006200056d853562000532602088018862001d5c565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200104792505050565b6001600160a01b03811660009081526020819052604090205490915060ff16620005de5760405162461bcd60e51b815260206004820152601660248201527f656e636c6176654944206e6f742061747465737465640000000000000000000060448201526064015b60405180910390fd5b6001600160a01b03811660009081526001602052604090205460ff16620006485760405162461bcd60e51b815260206004820152601960248201527f656e636c6176654944206e6f7420612073657175656e636572000000000000006044820152606401620005d5565b620006538562001075565b6200065e82620010ad565b5050505050565b6200066f62000fd0565b6001600160a01b03811660009081526020819052604090205460ff16620006d95760405162461bcd60e51b815260206004820152601660248201527f656e636c6176654944206e6f74206174746573746564000000000000000000006044820152606401620005d5565b6001600160a01b038116600081815260016020818152604092839020805460ff191690921790915590519182527ffe64c7181f0fc60e300dc02cca368cdfa94d7ca45902de3b9a9d80070e76093691015b60405180910390a150565b60045460ff1615620007b05760405162461bcd60e51b815260206004820152602260248201527f6e6574776f726b2073656372657420616c726561647920696e697469616c697a60448201527f65640000000000000000000000000000000000000000000000000000000000006064820152608401620005d5565b60048054600160ff1991821681179092556001600160a01b038716600081815260208181526040808320805486168717905585825291829020805490941690941790925590519081527ffe64c7181f0fc60e300dc02cca368cdfa94d7ca45902de3b9a9d80070e76093691015b60405180910390a15050505050565b60606002805480602002602001604051908101604052809291908181526020016000905b8282101562000906578382906000526020600020018054620008729062001bd4565b80601f0160208091040260200160405190810160405280929190818152602001828054620008a09062001bd4565b8015620008f15780601f10620008c557610100808354040283529160200191620008f1565b820191906000526020600020905b815481529060010190602001808311620008d357829003601f168201915b50505050508152602001906001019062000850565b50505050905090565b6200091962000fd0565b6001600160a01b03811660009081526001602052604090205460ff16620009835760405162461bcd60e51b815260206004820152601960248201527f656e636c6176654944206e6f7420612073657175656e636572000000000000006044820152606401620005d5565b6001600160a01b038116600081815260016020908152604091829020805460ff1916905590519182527f0f279980343c7ca542fde9fa5396555068efb5cd560d9cf9c191aa2911079b4791016200072a565b620009df62000fd0565b620009eb60006200117d565b565b620009f762000fd0565b6007546040517f36d2da900000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b03909116906336d2da9090602401600060405180830381600087803b15801562000a5657600080fd5b505af115801562000a6b573d6000803e3d6000fd5b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff1660008115801562000abd5750825b905060008267ffffffffffffffff16600114801562000adb5750303b155b90508115801562000aea575080155b1562000b22576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831562000b5757845468ff00000000000000001916680100000000000000001785555b62000b6233620011fb565b600060055560405162000b75906200168d565b604051809103906000f08015801562000b92573d6000803e3d6000fd5b506007805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691821790556040519081527fbd726cf82ac9c3260b1495107182e336e0654b25c10915648c0cc15b2bb72cbf9060200160405180910390a183156200065e57845468ff000000000000000019168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906020016200081d565b60408051606080820183526000808352602080840183905283850182905285825260068152848220855193840190955284548352600185018054929586949390928401919062000c8b9062001bd4565b80601f016020809104026020016040519081016040528092919081815260200182805462000cb99062001bd4565b801562000d0a5780601f1062000cde5761010080835404028352916020019162000d0a565b820191906000526020600020905b81548152906001019060200180831162000cec57829003601f168201915b50505091835250506002919091015460209091015280519094149492505050565b6002818154811062000d3c57600080fd5b90600052602060002001600091509050805462000d599062001bd4565b80601f016020809104026020016040519081016040528092919081815260200182805462000d879062001bd4565b801562000dd85780601f1062000dac5761010080835404028352916020019162000dd8565b820191906000526020600020905b81548152906001019060200180831162000dba57829003601f168201915b505050505081565b6001600160a01b03851660009081526020819052604090205460ff168062000e715760405162461bcd60e51b815260206004820152602360248201527f726573706f6e64696e67206174746573746572206973206e6f7420617474657360448201527f74656400000000000000000000000000000000000000000000000000000000006064820152608401620005d5565b811562000f4857600062000eaa87878660405160200162000e959392919062001da6565b60405160208183030381529060405262001210565b9050600062000eba828762001047565b9050876001600160a01b0316816001600160a01b03161462000f455760405162461bcd60e51b815260206004820152602c60248201527f63616c63756c61746564206164647265737320616e642061747465737465724960448201527f4420646f6e74206d6174636800000000000000000000000000000000000000006064820152608401620005d5565b50505b5050506001600160a01b039091166000908152602081905260409020805460ff191660011790555050565b62000f7d62000fd0565b6001600160a01b03811662000fc2576040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260006004820152602401620005d5565b62000fcd816200117d565b50565b33620010037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614620009eb576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401620005d5565b6000806000806200105986866200124f565b9250925092506200106b8282620012a0565b5090949350505050565b80356000908152600660205260409020819062001093828262001dee565b50506005546040820135111562000fcd5760400135600555565b6000620010bb828062001efe565b9050905060005b8181101562001178576007546001600160a01b0316639730886d620010e8858062001efe565b84818110620010fb57620010fb62001f4b565b90506020028101906200110f919062001f61565b60016040518363ffffffff1660e01b81526004016200113092919062002011565b600060405180830381600087803b1580156200114b57600080fd5b505af115801562001160573d6000803e3d6000fd5b50505050806200117090620020d3565b9050620010c2565b505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b62001205620013b6565b62000fcd816200141e565b60006200121e825162001428565b8260405160200162001232929190620020fb565b604051602081830303815290604052805190602001209050919050565b600080600083516041036200128d5760208401516040850151606086015160001a6200127e88828585620014cf565b95509550955050505062001299565b50508151600091506002905b9250925092565b6000826003811115620012b757620012b76200215a565b03620012c1575050565b6001826003811115620012d857620012d86200215a565b0362001310576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028260038111156200132757620013276200215a565b0362001363576040517ffce698f700000000000000000000000000000000000000000000000000000000815260048101829052602401620005d5565b60038260038111156200137a576200137a6200215a565b03620003ed576040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260048101829052602401620005d5565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16620009eb576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62000f7d620013b6565b606060006200143783620015a3565b600101905060008167ffffffffffffffff8111156200145a576200145a6200169b565b6040519080825280601f01601f19166020018201604052801562001485576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846200148f57509392505050565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156200150c575060009150600390508262001599565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801562001561573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166200158f5750600092506001915082905062001599565b9250600091508190505b9450945094915050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310620015ed577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106200161a576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106200163957662386f26fc10000830492506010015b6305f5e100831062001652576305f5e100830492506008015b61271083106200166757612710830492506004015b606483106200167a576064830492506002015b600a831062001687576001015b92915050565b6110a7806200217183390190565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620016c357600080fd5b813567ffffffffffffffff80821115620016e157620016e16200169b565b604051601f8301601f19908116603f011681019082821181831017156200170c576200170c6200169b565b816040528381528660208588010111156200172657600080fd5b836020870160208301376000602085830101528094505050505092915050565b80356001600160a01b03811681146200175e57600080fd5b919050565b600080604083850312156200177757600080fd5b823567ffffffffffffffff8111156200178f57600080fd5b6200179d85828601620016b1565b925050620017ae6020840162001746565b90509250929050565b60008083601f840112620017ca57600080fd5b50813567ffffffffffffffff811115620017e357600080fd5b602083019150836020828501011115620017fc57600080fd5b9250929050565b600080600080606085870312156200181a57600080fd5b843567ffffffffffffffff808211156200183357600080fd5b90860190606082890312156200184857600080fd5b909450602086013590808211156200185f57600080fd5b6200186d88838901620017b7565b909550935060408701359150808211156200188757600080fd5b508501602081880312156200189b57600080fd5b939692955090935050565b600060208284031215620018b957600080fd5b813567ffffffffffffffff811115620018d157600080fd5b620018df84828501620016b1565b949350505050565b600060208284031215620018fa57600080fd5b620019058262001746565b9392505050565b6000806000806000606086880312156200192557600080fd5b620019308662001746565b9450602086013567ffffffffffffffff808211156200194e57600080fd5b6200195c89838a01620017b7565b909650945060408801359150808211156200197657600080fd5b506200198588828901620017b7565b969995985093965092949392505050565b60005b83811015620019b357818101518382015260200162001999565b50506000910152565b60008151808452620019d681602086016020860162001996565b601f01601f19169290920160200192915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101562001a4357603f1988860301845262001a30858351620019bc565b9450928501929085019060010162001a11565b5092979650505050505050565b60006020828403121562001a6357600080fd5b5035919050565b821515815260406020820152815160408201526000602083015160608084015262001a9960a0840182620019bc565b905060408401516080840152809150509392505050565b602081526000620019056020830184620019bc565b600080600080600060a0868803121562001ade57600080fd5b62001ae98662001746565b945062001af96020870162001746565b9350604086013567ffffffffffffffff8082111562001b1757600080fd5b62001b2589838a01620016b1565b9450606088013591508082111562001b3c57600080fd5b5062001b4b88828901620016b1565b9250506080860135801515811462001b6257600080fd5b809150509295509295909350565b6000806020838503121562001b8457600080fd5b823567ffffffffffffffff81111562001b9c57600080fd5b62001baa85828601620017b7565b90969095509350505050565b6000825162001bca81846020870162001996565b9190910192915050565b600181811c9082168062001be957607f821691505b60208210810362001c0a57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200117857600081815260208120601f850160051c8101602086101562001c395750805b601f850160051c820191505b8181101562001c5a5782815560010162001c45565b505050505050565b815167ffffffffffffffff81111562001c7f5762001c7f6200169b565b62001c978162001c90845462001bd4565b8462001c10565b602080601f83116001811462001ccf576000841562001cb65750858301515b600019600386901b1c1916600185901b17855562001c5a565b600085815260208120601f198616915b8281101562001d005788860151825594840194600190910190840162001cdf565b508582101562001d1f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60408152600062001d446040830185620019bc565b90506001600160a01b03831660208301529392505050565b6000808335601e1984360301811262001d7457600080fd5b83018035915067ffffffffffffffff82111562001d9057600080fd5b602001915036819003821315620017fc57600080fd5b60006bffffffffffffffffffffffff19808660601b168352808560601b16601484015250825162001ddf81602885016020870162001996565b91909101602801949350505050565b813581556001808201602080850135601e1986360301811262001e1057600080fd5b8501803567ffffffffffffffff81111562001e2a57600080fd5b803603838301131562001e3c57600080fd5b62001e548162001e4d865462001bd4565b8662001c10565b6000601f82116001811462001e8d576000831562001e7457508382018501355b600019600385901b1c1916600184901b17865562001ee9565b600086815260209020601f19841690835b8281101562001ebf5786850188013582559387019390890190870162001e9e565b508482101562001edf5760001960f88660031b161c198785880101351681555b50508683881b0186555b50505050505050604082013560028201555050565b6000808335601e1984360301811262001f1657600080fd5b83018035915067ffffffffffffffff82111562001f3257600080fd5b6020019150600581901b3603821315620017fc57600080fd5b634e487b7160e01b600052603260045260246000fd5b6000823560be1983360301811262001bca57600080fd5b803563ffffffff811681146200175e57600080fd5b6000808335601e1984360301811262001fa557600080fd5b830160208101925035905067ffffffffffffffff81111562001fc657600080fd5b803603821315620017fc57600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b803560ff811681146200175e57600080fd5b604081526001600160a01b03620020288462001746565b1660408201526000602084013567ffffffffffffffff81168082146200204d57600080fd5b60608401525063ffffffff620020666040860162001f78565b1660808301526200207a6060850162001f78565b63ffffffff1660a083015262002094608085018562001f8d565b60c080850152620020ab6101008501828462001fd6565b915050620020bc60a0860162001fff565b60ff1660e084015260209092019290925292915050565b600060018201620020f457634e487b7160e01b600052601160045260246000fd5b5060010190565b7f19457468657265756d205369676e6564204d6573736167653a0a0000000000008152600083516200213581601a85016020880162001996565b8351908301906200214e81601a84016020880162001996565b01601a01949350505050565b634e487b7160e01b600052602160045260246000fdfe608060405234801561001057600080fd5b50338061003757604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b61004081610046565b50610096565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611002806100a56000396000f3fe6080604052600436106100b55760003560e01c80638da5cb5b1161006957806399a3ad211161004e57806399a3ad2114610269578063b1454caa14610289578063f2fde38b146102c257610129565b80638da5cb5b146102215780639730886d1461024957610129565b8063346633fb1161009a578063346633fb146101d957806336d2da90146101ec578063715018a61461020c57610129565b80630fcfbd111461017657806333a88c72146101a957610129565b36610129576040517f346633fb0000000000000000000000000000000000000000000000000000000081523360048201523460248201819052309163346633fb91906044016000604051808303818588803b15801561011357600080fd5b505af1158015610127573d6000803e3d6000fd5b005b60405162461bcd60e51b815260206004820152600b60248201527f756e737570706f7274656400000000000000000000000000000000000000000060448201526064015b60405180910390fd5b34801561018257600080fd5b50610196610191366004610945565b6102e2565b6040519081526020015b60405180910390f35b3480156101b557600080fd5b506101c96101c4366004610945565b610398565b60405190151581526020016101a0565b6101276101e736600461098f565b6103eb565b3480156101f857600080fd5b506101276102073660046109bb565b6104b7565b34801561021857600080fd5b50610127610566565b34801561022d57600080fd5b506000546040516001600160a01b0390911681526020016101a0565b34801561025557600080fd5b506101276102643660046109d8565b61057a565b34801561027557600080fd5b5061012761028436600461098f565b6106cc565b34801561029557600080fd5b506102a96102a4366004610a4e565b61077c565b60405167ffffffffffffffff90911681526020016101a0565b3480156102ce57600080fd5b506101276102dd3660046109bb565b6107d5565b600080826040516020016102f69190610b3a565b60408051601f19818403018152918152815160209283012060008181526001909352912054909150806103915760405162461bcd60e51b815260206004820152602160248201527f54686973206d65737361676520776173206e65766572207375626d697474656460448201527f2e00000000000000000000000000000000000000000000000000000000000000606482015260840161016d565b9392505050565b600080826040516020016103ac9190610b3a565b60408051601f1981840301815291815281516020928301206000818152600190935291205490915080158015906103e35750428111155b949350505050565b6000341180156103fa57508034145b61046c5760405162461bcd60e51b815260206004820152603060248201527f417474656d7074696e6720746f2073656e642076616c756520776974686f757460448201527f2070726f766964696e6720457468657200000000000000000000000000000000606482015260840161016d565b604080513381526001600160a01b0384166020820152348183015290517ff1365f826a788d6c1a955db0eed5ba8642674219c4771f8c65918617511a15609181900360600190a15050565b6104bf61082c565b6000816001600160a01b03164760405160006040518083038185875af1925050503d806000811461050c576040519150601f19603f3d011682016040523d82523d6000602084013e610511565b606091505b50509050806105625760405162461bcd60e51b815260206004820152601460248201527f6661696c65642073656e64696e672076616c7565000000000000000000000000604482015260640161016d565b5050565b61056e61082c565b6105786000610872565b565b61058261082c565b600061058e8242610c3b565b90506000836040516020016105a39190610b3a565b60408051601f198184030181529181528151602092830120600081815260019093529120549091501561063e5760405162461bcd60e51b815260206004820152602160248201527f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636560448201527f2100000000000000000000000000000000000000000000000000000000000000606482015260840161016d565b6000818152600160209081526040822084905560029190610661908701876109bb565b6001600160a01b03168152602081019190915260400160009081209061068d6080870160608801610c54565b63ffffffff168152602080820192909252604001600090812080546001810182559082529190208591600402016106c48282610e2a565b505050505050565b6106d461082c565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610721576040519150601f19603f3d011682016040523d82523d6000602084013e610726565b606091505b50509050806107775760405162461bcd60e51b815260206004820152601460248201527f6661696c65642073656e64696e672076616c7565000000000000000000000000604482015260640161016d565b505050565b6000610787336108cf565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef775937338288888888886040516107c49796959493929190610f44565b60405180910390a195945050505050565b6107dd61082c565b6001600160a01b038116610820576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526000600482015260240161016d565b61082981610872565b50565b6000546001600160a01b03163314610578576040517f118cdaa700000000000000000000000000000000000000000000000000000000815233600482015260240161016d565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381166000908152600360205260408120805467ffffffffffffffff1691600191906109028385610fa4565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b600060c0828403121561093f57600080fd5b50919050565b60006020828403121561095757600080fd5b813567ffffffffffffffff81111561096e57600080fd5b6103e38482850161092d565b6001600160a01b038116811461082957600080fd5b600080604083850312156109a257600080fd5b82356109ad8161097a565b946020939093013593505050565b6000602082840312156109cd57600080fd5b81356103918161097a565b600080604083850312156109eb57600080fd5b823567ffffffffffffffff811115610a0257600080fd5b610a0e8582860161092d565b95602094909401359450505050565b63ffffffff8116811461082957600080fd5b60ff8116811461082957600080fd5b8035610a4981610a2f565b919050565b600080600080600060808688031215610a6657600080fd5b8535610a7181610a1d565b94506020860135610a8181610a1d565b9350604086013567ffffffffffffffff80821115610a9e57600080fd5b818801915088601f830112610ab257600080fd5b813581811115610ac157600080fd5b896020828501011115610ad357600080fd5b6020830195508094505050506060860135610aed81610a2f565b809150509295509295909350565b67ffffffffffffffff8116811461082957600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6020815260008235610b4b8161097a565b6001600160a01b0381166020840152506020830135610b6981610afb565b67ffffffffffffffff808216604085015260408501359150610b8a82610a1d565b63ffffffff808316606086015260608601359250610ba783610a1d565b80831660808601525060808501359150601e19853603018212610bc957600080fd5b6020918501918201913581811115610be057600080fd5b803603831315610bef57600080fd5b60c060a0860152610c0460e086018285610b11565b92505050610c1460a08501610a3e565b60ff811660c0850152509392505050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610c4e57610c4e610c25565b92915050565b600060208284031215610c6657600080fd5b813561039181610a1d565b60008135610c4e81610a1d565b6000808335601e19843603018112610c9557600080fd5b83018035915067ffffffffffffffff821115610cb057600080fd5b602001915036819003821315610cc557600080fd5b9250929050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680610cf657607f821691505b60208210810361093f57634e487b7160e01b600052602260045260246000fd5b601f82111561077757600081815260208120601f850160051c81016020861015610d3d5750805b601f850160051c820191505b818110156106c457828155600101610d49565b67ffffffffffffffff831115610d7457610d74610ccc565b610d8883610d828354610ce2565b83610d16565b6000601f841160018114610dbc5760008515610da45750838201355b600019600387901b1c1916600186901b178355610e16565b600083815260209020601f19861690835b82811015610ded5786850135825560209485019460019092019101610dcd565b5086821015610e0a5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b60008135610c4e81610a2f565b8135610e358161097a565b6001600160a01b038116905081548173ffffffffffffffffffffffffffffffffffffffff1982161783556020840135610e6d81610afb565b7bffffffffffffffff00000000000000000000000000000000000000008160a01b1690507fffffffff0000000000000000000000000000000000000000000000000000000081848285161717855560408601359250610ecb83610a1d565b921760e09190911b909116178155610f03610ee860608401610c71565b6001830163ffffffff821663ffffffff198254161781555050565b610f106080830183610c7e565b610f1e818360028601610d5c565b5050610562610f2f60a08401610e1d565b6003830160ff821660ff198254161781555050565b6001600160a01b038816815267ffffffffffffffff87166020820152600063ffffffff808816604084015280871660608401525060c06080830152610f8d60c083018587610b11565b905060ff831660a083015298975050505050505050565b67ffffffffffffffff818116838216019080821115610fc557610fc5610c25565b509291505056fea264697066735822122055bbe17521778f602b3eab0e1e16144809be200e76e1af574dfaadbe93774a6264736f6c63430008140033a2646970667358221220b91e70a097d4f12e0c50d9ddaac491daf1d5adde5e1e04907a2a3abbee0d7ba264736f6c63430008140033", } // ManagementContractABI is the input ABI used to generate the binding from. @@ -1321,3 +1321,271 @@ func (_ManagementContract *ManagementContractFilterer) ParseOwnershipTransferred event.Raw = log return event, nil } + +// ManagementContractSequencerEnclaveGrantedIterator is returned from FilterSequencerEnclaveGranted and is used to iterate over the raw logs and unpacked data for SequencerEnclaveGranted events raised by the ManagementContract contract. +type ManagementContractSequencerEnclaveGrantedIterator struct { + Event *ManagementContractSequencerEnclaveGranted // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ManagementContractSequencerEnclaveGrantedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ManagementContractSequencerEnclaveGranted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ManagementContractSequencerEnclaveGranted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ManagementContractSequencerEnclaveGrantedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ManagementContractSequencerEnclaveGrantedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ManagementContractSequencerEnclaveGranted represents a SequencerEnclaveGranted event raised by the ManagementContract contract. +type ManagementContractSequencerEnclaveGranted struct { + EnclaveID common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterSequencerEnclaveGranted is a free log retrieval operation binding the contract event 0xfe64c7181f0fc60e300dc02cca368cdfa94d7ca45902de3b9a9d80070e760936. +// +// Solidity: event SequencerEnclaveGranted(address enclaveID) +func (_ManagementContract *ManagementContractFilterer) FilterSequencerEnclaveGranted(opts *bind.FilterOpts) (*ManagementContractSequencerEnclaveGrantedIterator, error) { + + logs, sub, err := _ManagementContract.contract.FilterLogs(opts, "SequencerEnclaveGranted") + if err != nil { + return nil, err + } + return &ManagementContractSequencerEnclaveGrantedIterator{contract: _ManagementContract.contract, event: "SequencerEnclaveGranted", logs: logs, sub: sub}, nil +} + +// WatchSequencerEnclaveGranted is a free log subscription operation binding the contract event 0xfe64c7181f0fc60e300dc02cca368cdfa94d7ca45902de3b9a9d80070e760936. +// +// Solidity: event SequencerEnclaveGranted(address enclaveID) +func (_ManagementContract *ManagementContractFilterer) WatchSequencerEnclaveGranted(opts *bind.WatchOpts, sink chan<- *ManagementContractSequencerEnclaveGranted) (event.Subscription, error) { + + logs, sub, err := _ManagementContract.contract.WatchLogs(opts, "SequencerEnclaveGranted") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ManagementContractSequencerEnclaveGranted) + if err := _ManagementContract.contract.UnpackLog(event, "SequencerEnclaveGranted", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseSequencerEnclaveGranted is a log parse operation binding the contract event 0xfe64c7181f0fc60e300dc02cca368cdfa94d7ca45902de3b9a9d80070e760936. +// +// Solidity: event SequencerEnclaveGranted(address enclaveID) +func (_ManagementContract *ManagementContractFilterer) ParseSequencerEnclaveGranted(log types.Log) (*ManagementContractSequencerEnclaveGranted, error) { + event := new(ManagementContractSequencerEnclaveGranted) + if err := _ManagementContract.contract.UnpackLog(event, "SequencerEnclaveGranted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ManagementContractSequencerEnclaveRevokedIterator is returned from FilterSequencerEnclaveRevoked and is used to iterate over the raw logs and unpacked data for SequencerEnclaveRevoked events raised by the ManagementContract contract. +type ManagementContractSequencerEnclaveRevokedIterator struct { + Event *ManagementContractSequencerEnclaveRevoked // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ManagementContractSequencerEnclaveRevokedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ManagementContractSequencerEnclaveRevoked) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ManagementContractSequencerEnclaveRevoked) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ManagementContractSequencerEnclaveRevokedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ManagementContractSequencerEnclaveRevokedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ManagementContractSequencerEnclaveRevoked represents a SequencerEnclaveRevoked event raised by the ManagementContract contract. +type ManagementContractSequencerEnclaveRevoked struct { + EnclaveID common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterSequencerEnclaveRevoked is a free log retrieval operation binding the contract event 0x0f279980343c7ca542fde9fa5396555068efb5cd560d9cf9c191aa2911079b47. +// +// Solidity: event SequencerEnclaveRevoked(address enclaveID) +func (_ManagementContract *ManagementContractFilterer) FilterSequencerEnclaveRevoked(opts *bind.FilterOpts) (*ManagementContractSequencerEnclaveRevokedIterator, error) { + + logs, sub, err := _ManagementContract.contract.FilterLogs(opts, "SequencerEnclaveRevoked") + if err != nil { + return nil, err + } + return &ManagementContractSequencerEnclaveRevokedIterator{contract: _ManagementContract.contract, event: "SequencerEnclaveRevoked", logs: logs, sub: sub}, nil +} + +// WatchSequencerEnclaveRevoked is a free log subscription operation binding the contract event 0x0f279980343c7ca542fde9fa5396555068efb5cd560d9cf9c191aa2911079b47. +// +// Solidity: event SequencerEnclaveRevoked(address enclaveID) +func (_ManagementContract *ManagementContractFilterer) WatchSequencerEnclaveRevoked(opts *bind.WatchOpts, sink chan<- *ManagementContractSequencerEnclaveRevoked) (event.Subscription, error) { + + logs, sub, err := _ManagementContract.contract.WatchLogs(opts, "SequencerEnclaveRevoked") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ManagementContractSequencerEnclaveRevoked) + if err := _ManagementContract.contract.UnpackLog(event, "SequencerEnclaveRevoked", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseSequencerEnclaveRevoked is a log parse operation binding the contract event 0x0f279980343c7ca542fde9fa5396555068efb5cd560d9cf9c191aa2911079b47. +// +// Solidity: event SequencerEnclaveRevoked(address enclaveID) +func (_ManagementContract *ManagementContractFilterer) ParseSequencerEnclaveRevoked(log types.Log) (*ManagementContractSequencerEnclaveRevoked, error) { + event := new(ManagementContractSequencerEnclaveRevoked) + if err := _ManagementContract.contract.UnpackLog(event, "SequencerEnclaveRevoked", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/contracts/src/bridge/L1/ObscuroBridge.sol b/contracts/src/bridge/L1/ObscuroBridge.sol index add4d98559..4d1db98459 100644 --- a/contracts/src/bridge/L1/ObscuroBridge.sol +++ b/contracts/src/bridge/L1/ObscuroBridge.sol @@ -84,9 +84,9 @@ contract ObscuroBridge is } function sendERC20( - address asset, // USDC, USDT, TEN (disabled), ETH - uint256 amount, // 10 - address receiver // ADDRESS + address asset, + uint256 amount, + address receiver ) external override { require(amount > 0, "Attempting empty transfer."); require( diff --git a/contracts/src/management/ManagementContract.sol b/contracts/src/management/ManagementContract.sol index 24a80e2878..b760283f07 100644 --- a/contracts/src/management/ManagementContract.sol +++ b/contracts/src/management/ManagementContract.sol @@ -20,8 +20,9 @@ contract ManagementContract is Initializable, OwnableUpgradeable { } event LogManagementContractCreated(address messageBusAddress); - // Event to log changes to important contract addresses event ImportantContractAddressUpdated(string key, address newAddress); + event SequencerEnclaveGranted(address enclaveID); + event SequencerEnclaveRevoked(address enclaveID); // mapping of enclaveID to whether it is attested mapping(address => bool) private attested; @@ -105,6 +106,7 @@ contract ManagementContract is Initializable, OwnableUpgradeable { // the enclave that starts the network with this call is implicitly a sequencer so doesn't need adding sequencerEnclave[_enclaveID] = true; + emit SequencerEnclaveGranted(_enclaveID); } // Enclaves can request the Network Secret given an attestation request report @@ -158,12 +160,14 @@ contract ManagementContract is Initializable, OwnableUpgradeable { // require the enclave to be attested already require(attested[_addr], "enclaveID not attested"); sequencerEnclave[_addr] = true; + emit SequencerEnclaveGranted(_addr); } // 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]; + emit SequencerEnclaveRevoked(_addr); } // Testnet function to allow the contract owner to retrieve **all** funds from the network bridge. diff --git a/design/host/host_db_requirements.md b/design/host/host_db_requirements.md index 95a556f701..6a48f59f29 100644 --- a/design/host/host_db_requirements.md +++ b/design/host/host_db_requirements.md @@ -122,7 +122,7 @@ but on mainnet this won't be possible, so we need to store the `tx_count` in thi `ExtBatch.TxHashes` and expose a new Enclave API to retrieve this. ```sql -create table if not exists transactions_host +create table if not exists transaction_host ( hash binary(32) primary key, b_sequence int REFERENCES batch_host diff --git a/go.mod b/go.mod index 1b31f6b8e2..0e64673930 100644 --- a/go.mod +++ b/go.mod @@ -7,6 +7,7 @@ replace github.com/docker/docker => github.com/docker/docker v20.10.3-0.20220224 require ( github.com/Microsoft/go-winio v0.6.1 github.com/andybalholm/brotli v1.1.0 + github.com/codeclysm/extract/v3 v3.1.1 github.com/deckarep/golang-set/v2 v2.6.0 github.com/dgraph-io/ristretto v0.1.1 github.com/docker/docker v25.0.4+incompatible @@ -102,11 +103,14 @@ require ( github.com/golang/protobuf v1.5.4 // indirect github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb // indirect github.com/gorilla/mux v1.8.1 // indirect + github.com/h2non/filetype v1.1.3 // indirect github.com/holiman/billy v0.0.0-20240216141850-2abb0c79d3c4 // indirect github.com/holiman/bloomfilter/v2 v2.0.3 // indirect github.com/huin/goupnp v1.3.0 // indirect github.com/jackpal/go-nat-pmp v1.0.2 // indirect github.com/json-iterator/go v1.1.12 // indirect + github.com/juju/errors v0.0.0-20181118221551-089d3ea4e4d5 // indirect + github.com/juju/loggo v1.0.0 // indirect github.com/klauspost/compress v1.17.7 // indirect github.com/klauspost/cpuid/v2 v2.2.7 // indirect github.com/kr/pretty v0.3.1 // indirect @@ -145,6 +149,7 @@ require ( github.com/twitchyliquid64/golang-asm v0.15.1 // indirect github.com/tyler-smith/go-bip39 v1.1.0 // indirect github.com/ugorji/go/codec v1.2.12 // indirect + github.com/ulikunitz/xz v0.5.11 // indirect github.com/valyala/bytebufferpool v1.0.0 // indirect github.com/xrash/smetrics v0.0.0-20240312152122-5f08fbb34913 // indirect github.com/yusufpapurcu/wmi v1.2.4 // indirect @@ -155,6 +160,7 @@ require ( golang.org/x/text v0.14.0 // indirect golang.org/x/tools v0.20.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20240318140521-94a12d6c2237 // indirect + gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22 // indirect gopkg.in/square/go-jose.v2 v2.6.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect gotest.tools/v3 v3.5.1 // indirect diff --git a/go.sum b/go.sum index 307c1d4c18..ba44fffebf 100644 --- a/go.sum +++ b/go.sum @@ -13,6 +13,8 @@ github.com/allegro/bigcache v1.2.1 h1:hg1sY1raCwic3Vnsvje6TT7/pnZba83LeFck5NrFKS github.com/allegro/bigcache v1.2.1/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= github.com/andybalholm/brotli v1.1.0 h1:eLKJA0d02Lf0mVpIDgYnqXcUn0GqVmEFny3VuID1U3M= github.com/andybalholm/brotli v1.1.0/go.mod h1:sms7XGricyQI9K10gOSf56VKKWS4oLer58Q+mhRPtnY= +github.com/arduino/go-paths-helper v1.2.0 h1:qDW93PR5IZUN/jzO4rCtexiwF8P4OIcOmcSgAYLZfY4= +github.com/arduino/go-paths-helper v1.2.0/go.mod h1:HpxtKph+g238EJHq4geEPv9p+gl3v5YYu35Yb+w31Ck= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bits-and-blooms/bitset v1.13.0 h1:bAQ9OPNFYbGHV6Nez0tmNI0RiEu7/hxlYJRUA0wFAVE= @@ -49,6 +51,8 @@ github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwP github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ= +github.com/codeclysm/extract/v3 v3.1.1 h1:iHZtdEAwSTqPrd+1n4jfhr1qBhUWtHlMTjT90+fJVXg= +github.com/codeclysm/extract/v3 v3.1.1/go.mod h1:ZJi80UG2JtfHqJI+lgJSCACttZi++dHxfWuPaMhlOfQ= github.com/consensys/bavard v0.1.13 h1:oLhMLOFGTLdlda/kma4VOJazblc7IM5y5QPd2A/YjhQ= github.com/consensys/bavard v0.1.13/go.mod h1:9ItSMtA/dXMAiL7BG6bqW2m3NdSEObYWoH223nGHukI= github.com/consensys/gnark-crypto v0.12.1 h1:lHH39WuuFgVHONRl3J0LRBtuYdQTumFSDtJF7HpyG8M= @@ -184,6 +188,8 @@ github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= github.com/gorilla/websocket v1.5.1 h1:gmztn0JnHVt9JZquRuzLw3g4wouNVzKL15iLr/zn/QY= github.com/gorilla/websocket v1.5.1/go.mod h1:x3kM2JMyaluk02fnUJpQuwD2dCS5NDG2ZHL0uE0tcaY= +github.com/h2non/filetype v1.1.3 h1:FKkx9QbD7HR/zjK1Ia5XiBsq9zdLi5Kf3zGyFTAFkGg= +github.com/h2non/filetype v1.1.3/go.mod h1:319b3zT68BvV+WRj7cwy856M2ehB3HqNOt6sy1HndBY= github.com/hashicorp/go-bexpr v0.1.14 h1:uKDeyuOhWhT1r5CiMTjdVY4Aoxdxs6EtwgTGnlosyp4= github.com/hashicorp/go-bexpr v0.1.14/go.mod h1:gN7hRKB3s7yT+YvTdnhZVLTENejvhlkZ8UE4YVBS+Q8= github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= @@ -203,6 +209,13 @@ github.com/jolestar/go-commons-pool/v2 v2.1.2 h1:E+XGo58F23t7HtZiC/W6jzO2Ux2IccS github.com/jolestar/go-commons-pool/v2 v2.1.2/go.mod h1:r4NYccrkS5UqP1YQI1COyTZ9UjPJAAGTUxzcsK1kqhY= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= +github.com/juju/ansiterm v0.0.0-20180109212912-720a0952cc2a/go.mod h1:UJSiEoRfvx3hP73CvoARgeLjaIOjybY9vj8PUPPFGeU= +github.com/juju/errors v0.0.0-20181118221551-089d3ea4e4d5 h1:rhqTjzJlm7EbkELJDKMTU7udov+Se0xZkWmugr6zGok= +github.com/juju/errors v0.0.0-20181118221551-089d3ea4e4d5/go.mod h1:W54LbzXuIE0boCoNJfwqpmkKJ1O4TCTZMetAt6jGk7Q= +github.com/juju/loggo v1.0.0 h1:Y6ZMQOGR9Aj3BGkiWx7HBbIx6zNwNkxhVNOHU2i1bl0= +github.com/juju/loggo v1.0.0/go.mod h1:NIXFioti1SmKAlKNuUwbMenNdef59IF52+ZzuOmHYkg= +github.com/juju/testing v0.0.0-20200510222523-6c8c298c77a0 h1:+WWUkhnTjV6RNOxkcwk79qrjeyHEHvBzlneueBsatX4= +github.com/juju/testing v0.0.0-20200510222523-6c8c298c77a0/go.mod h1:hpGvhGHPVbNBraRLZEhoQwFLMrjK8PSlO4D3nDjKYXo= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.17.7 h1:ehO88t2UGzQK66LMdE8tibEd1ErmzZjNEqWkjLAKQQg= @@ -223,8 +236,11 @@ github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ= github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI= github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/lunixbochs/vtclean v0.0.0-20160125035106-4fbf7632a2c6/go.mod h1:pHhQNgMf3btfWnGBVipUOjRYhoOsdGqdm/+2c2E2WMI= +github.com/mattn/go-colorable v0.0.6/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= +github.com/mattn/go-isatty v0.0.0-20160806122752-66b8e73f3f5c/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= @@ -341,6 +357,8 @@ github.com/tyler-smith/go-bip39 v1.1.0 h1:5eUemwrMargf3BSLRRCalXT93Ns6pQJIjYQN2n github.com/tyler-smith/go-bip39 v1.1.0/go.mod h1:gUYDtqQw1JS3ZJ8UWVcGTGqqr6YIN3CWg+kkNaLt55U= github.com/ugorji/go/codec v1.2.12 h1:9LC83zGrHhuUA9l16C9AHXAqEV/2wBQ4nkvumAE65EE= github.com/ugorji/go/codec v1.2.12/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= +github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8= +github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/urfave/cli/v2 v2.27.1 h1:8xSQ6szndafKVRmfyeUMxkNUJQMjL1F2zmsZ+qHpfho= github.com/urfave/cli/v2 v2.27.1/go.mod h1:8qnjx1vcq5s2/wpsqoZFndg2CE5tNFyrTvS6SinrnYQ= github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= @@ -445,9 +463,12 @@ google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2 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-20160105164936-4f90aeace3a2/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22 h1:VpOs+IwYnYBaFnrNAeB8UUWtL3vEUnzSCL1nVjPhqrw= +gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA= gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc= gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc= gopkg.in/square/go-jose.v2 v2.6.0 h1:NGk74WTnPKBNUhNzQX7PYcTLUjoq7mzKk2OKbvwk2iI= diff --git a/go/common/enclave.go b/go/common/enclave.go index 59a9d06be4..d1f0e4a7ec 100644 --- a/go/common/enclave.go +++ b/go/common/enclave.go @@ -142,9 +142,6 @@ type EnclaveScan interface { // GetCustomQuery returns the data of a custom query GetCustomQuery(ctx context.Context, encryptedParams EncryptedParamsGetStorageAt) (*responses.PrivateQueryResponse, SystemError) - // GetPublicTransactionData returns a list of public transaction data - GetPublicTransactionData(ctx context.Context, pagination *QueryPagination) (*TransactionListingResponse, SystemError) - // EnclavePublicConfig returns network data that is known to the enclave but can be shared publicly EnclavePublicConfig(context.Context) (*EnclavePublicConfig, SystemError) } diff --git a/go/common/host/services.go b/go/common/host/services.go index 8b76acf2f3..314331efc5 100644 --- a/go/common/host/services.go +++ b/go/common/host/services.go @@ -118,14 +118,20 @@ type L1Publisher interface { // L2BatchRepository provides an interface for the host to request L2 batch data (live-streaming and historical) type L2BatchRepository interface { - // Subscribe will register a batch handler to receive new batches as they arrive - Subscribe(handler L2BatchHandler) func() + // SubscribeNewBatches will register a handler to receive new batches from the publisher as they arrive at the host + SubscribeNewBatches(handler L2BatchHandler) func() + + // SubscribeValidatedBatches will register a handler to receive batches that have been validated by the enclave + SubscribeValidatedBatches(handler L2BatchHandler) func() FetchBatchBySeqNo(background context.Context, seqNo *big.Int) (*common.ExtBatch, error) // AddBatch is used to notify the repository of a new batch, e.g. from the enclave when seq produces one or a rollup is consumed // Note: it is fine to add batches that the repo already has, it will just ignore them AddBatch(batch *common.ExtBatch) error + + // NotifyNewValidatedHead - called after an enclave validates a batch, to update the repo's validated head and notify subscribers + NotifyNewValidatedHead(batch *common.ExtBatch) } // L2BatchHandler is an interface for receiving new batches from the publisher as they arrive diff --git a/go/common/rpc/generated/enclave.pb.go b/go/common/rpc/generated/enclave.pb.go index 3de72010b0..11a4e05c49 100644 --- a/go/common/rpc/generated/enclave.pb.go +++ b/go/common/rpc/generated/enclave.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.0 -// protoc v4.24.3 +// protoc-gen-go v1.32.0 +// protoc v4.25.3 // source: enclave.proto package generated @@ -20,108 +20,6 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) -type GetPublicTransactionDataRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Pagination *Pagination `protobuf:"bytes,1,opt,name=pagination,proto3" json:"pagination,omitempty"` -} - -func (x *GetPublicTransactionDataRequest) Reset() { - *x = GetPublicTransactionDataRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetPublicTransactionDataRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetPublicTransactionDataRequest) ProtoMessage() {} - -func (x *GetPublicTransactionDataRequest) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetPublicTransactionDataRequest.ProtoReflect.Descriptor instead. -func (*GetPublicTransactionDataRequest) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{0} -} - -func (x *GetPublicTransactionDataRequest) GetPagination() *Pagination { - if x != nil { - return x.Pagination - } - return nil -} - -type GetPublicTransactionDataResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - PublicTransactionData []byte `protobuf:"bytes,1,opt,name=publicTransactionData,proto3" json:"publicTransactionData,omitempty"` - SystemError *SystemError `protobuf:"bytes,2,opt,name=systemError,proto3" json:"systemError,omitempty"` -} - -func (x *GetPublicTransactionDataResponse) Reset() { - *x = GetPublicTransactionDataResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetPublicTransactionDataResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetPublicTransactionDataResponse) ProtoMessage() {} - -func (x *GetPublicTransactionDataResponse) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetPublicTransactionDataResponse.ProtoReflect.Descriptor instead. -func (*GetPublicTransactionDataResponse) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{1} -} - -func (x *GetPublicTransactionDataResponse) GetPublicTransactionData() []byte { - if x != nil { - return x.PublicTransactionData - } - return nil -} - -func (x *GetPublicTransactionDataResponse) GetSystemError() *SystemError { - if x != nil { - return x.SystemError - } - return nil -} - type EnclavePublicConfigRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -131,7 +29,7 @@ type EnclavePublicConfigRequest struct { func (x *EnclavePublicConfigRequest) Reset() { *x = EnclavePublicConfigRequest{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[2] + mi := &file_enclave_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -144,7 +42,7 @@ func (x *EnclavePublicConfigRequest) String() string { func (*EnclavePublicConfigRequest) ProtoMessage() {} func (x *EnclavePublicConfigRequest) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[2] + mi := &file_enclave_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -157,7 +55,7 @@ func (x *EnclavePublicConfigRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use EnclavePublicConfigRequest.ProtoReflect.Descriptor instead. func (*EnclavePublicConfigRequest) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{2} + return file_enclave_proto_rawDescGZIP(), []int{0} } type EnclavePublicConfigResponse struct { @@ -172,7 +70,7 @@ type EnclavePublicConfigResponse struct { func (x *EnclavePublicConfigResponse) Reset() { *x = EnclavePublicConfigResponse{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[3] + mi := &file_enclave_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -185,7 +83,7 @@ func (x *EnclavePublicConfigResponse) String() string { func (*EnclavePublicConfigResponse) ProtoMessage() {} func (x *EnclavePublicConfigResponse) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[3] + mi := &file_enclave_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -198,7 +96,7 @@ func (x *EnclavePublicConfigResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use EnclavePublicConfigResponse.ProtoReflect.Descriptor instead. func (*EnclavePublicConfigResponse) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{3} + return file_enclave_proto_rawDescGZIP(), []int{1} } func (x *EnclavePublicConfigResponse) GetL2MessageBusAddress() []byte { @@ -226,7 +124,7 @@ type GetReceiptsByAddressRequest struct { func (x *GetReceiptsByAddressRequest) Reset() { *x = GetReceiptsByAddressRequest{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[4] + mi := &file_enclave_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -239,7 +137,7 @@ func (x *GetReceiptsByAddressRequest) String() string { func (*GetReceiptsByAddressRequest) ProtoMessage() {} func (x *GetReceiptsByAddressRequest) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[4] + mi := &file_enclave_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -252,7 +150,7 @@ func (x *GetReceiptsByAddressRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetReceiptsByAddressRequest.ProtoReflect.Descriptor instead. func (*GetReceiptsByAddressRequest) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{4} + return file_enclave_proto_rawDescGZIP(), []int{2} } func (x *GetReceiptsByAddressRequest) GetEncryptedParams() []byte { @@ -274,7 +172,7 @@ type GetReceiptsByAddressResponse struct { func (x *GetReceiptsByAddressResponse) Reset() { *x = GetReceiptsByAddressResponse{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[5] + mi := &file_enclave_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -287,7 +185,7 @@ func (x *GetReceiptsByAddressResponse) String() string { func (*GetReceiptsByAddressResponse) ProtoMessage() {} func (x *GetReceiptsByAddressResponse) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[5] + mi := &file_enclave_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -300,7 +198,7 @@ func (x *GetReceiptsByAddressResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetReceiptsByAddressResponse.ProtoReflect.Descriptor instead. func (*GetReceiptsByAddressResponse) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{5} + return file_enclave_proto_rawDescGZIP(), []int{3} } func (x *GetReceiptsByAddressResponse) GetEncodedEnclaveResponse() []byte { @@ -328,7 +226,7 @@ type GetBatchRequest struct { func (x *GetBatchRequest) Reset() { *x = GetBatchRequest{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[6] + mi := &file_enclave_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -341,7 +239,7 @@ func (x *GetBatchRequest) String() string { func (*GetBatchRequest) ProtoMessage() {} func (x *GetBatchRequest) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[6] + mi := &file_enclave_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -354,7 +252,7 @@ func (x *GetBatchRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetBatchRequest.ProtoReflect.Descriptor instead. func (*GetBatchRequest) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{6} + return file_enclave_proto_rawDescGZIP(), []int{4} } func (x *GetBatchRequest) GetKnownHead() []byte { @@ -375,7 +273,7 @@ type GetBatchBySeqNoRequest struct { func (x *GetBatchBySeqNoRequest) Reset() { *x = GetBatchBySeqNoRequest{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[7] + mi := &file_enclave_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -388,7 +286,7 @@ func (x *GetBatchBySeqNoRequest) String() string { func (*GetBatchBySeqNoRequest) ProtoMessage() {} func (x *GetBatchBySeqNoRequest) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[7] + mi := &file_enclave_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -401,7 +299,7 @@ func (x *GetBatchBySeqNoRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetBatchBySeqNoRequest.ProtoReflect.Descriptor instead. func (*GetBatchBySeqNoRequest) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{7} + return file_enclave_proto_rawDescGZIP(), []int{5} } func (x *GetBatchBySeqNoRequest) GetSeqNo() uint64 { @@ -423,7 +321,7 @@ type GetBatchResponse struct { func (x *GetBatchResponse) Reset() { *x = GetBatchResponse{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[8] + mi := &file_enclave_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -436,7 +334,7 @@ func (x *GetBatchResponse) String() string { func (*GetBatchResponse) ProtoMessage() {} func (x *GetBatchResponse) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[8] + mi := &file_enclave_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -449,7 +347,7 @@ func (x *GetBatchResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetBatchResponse.ProtoReflect.Descriptor instead. func (*GetBatchResponse) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{8} + return file_enclave_proto_rawDescGZIP(), []int{6} } func (x *GetBatchResponse) GetBatch() []byte { @@ -477,7 +375,7 @@ type GetRollupDataRequest struct { func (x *GetRollupDataRequest) Reset() { *x = GetRollupDataRequest{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[9] + mi := &file_enclave_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -490,7 +388,7 @@ func (x *GetRollupDataRequest) String() string { func (*GetRollupDataRequest) ProtoMessage() {} func (x *GetRollupDataRequest) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[9] + mi := &file_enclave_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -503,7 +401,7 @@ func (x *GetRollupDataRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetRollupDataRequest.ProtoReflect.Descriptor instead. func (*GetRollupDataRequest) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{9} + return file_enclave_proto_rawDescGZIP(), []int{7} } func (x *GetRollupDataRequest) GetHash() []byte { @@ -525,7 +423,7 @@ type GetRollupDataResponse struct { func (x *GetRollupDataResponse) Reset() { *x = GetRollupDataResponse{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[10] + mi := &file_enclave_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -538,7 +436,7 @@ func (x *GetRollupDataResponse) String() string { func (*GetRollupDataResponse) ProtoMessage() {} func (x *GetRollupDataResponse) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[10] + mi := &file_enclave_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -551,7 +449,7 @@ func (x *GetRollupDataResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetRollupDataResponse.ProtoReflect.Descriptor instead. func (*GetRollupDataResponse) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{10} + return file_enclave_proto_rawDescGZIP(), []int{8} } func (x *GetRollupDataResponse) GetMsg() *PublicRollupDataMsg { @@ -580,7 +478,7 @@ type PublicRollupDataMsg struct { func (x *PublicRollupDataMsg) Reset() { *x = PublicRollupDataMsg{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[11] + mi := &file_enclave_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -593,7 +491,7 @@ func (x *PublicRollupDataMsg) String() string { func (*PublicRollupDataMsg) ProtoMessage() {} func (x *PublicRollupDataMsg) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[11] + mi := &file_enclave_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -606,7 +504,7 @@ func (x *PublicRollupDataMsg) ProtoReflect() protoreflect.Message { // Deprecated: Use PublicRollupDataMsg.ProtoReflect.Descriptor instead. func (*PublicRollupDataMsg) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{11} + return file_enclave_proto_rawDescGZIP(), []int{9} } func (x *PublicRollupDataMsg) GetStartSeq() uint64 { @@ -632,7 +530,7 @@ type StreamL2UpdatesRequest struct { func (x *StreamL2UpdatesRequest) Reset() { *x = StreamL2UpdatesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[12] + mi := &file_enclave_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -645,7 +543,7 @@ func (x *StreamL2UpdatesRequest) String() string { func (*StreamL2UpdatesRequest) ProtoMessage() {} func (x *StreamL2UpdatesRequest) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[12] + mi := &file_enclave_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -658,7 +556,7 @@ func (x *StreamL2UpdatesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StreamL2UpdatesRequest.ProtoReflect.Descriptor instead. func (*StreamL2UpdatesRequest) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{12} + return file_enclave_proto_rawDescGZIP(), []int{10} } type EncodedUpdateResponse struct { @@ -672,7 +570,7 @@ type EncodedUpdateResponse struct { func (x *EncodedUpdateResponse) Reset() { *x = EncodedUpdateResponse{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[13] + mi := &file_enclave_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -685,7 +583,7 @@ func (x *EncodedUpdateResponse) String() string { func (*EncodedUpdateResponse) ProtoMessage() {} func (x *EncodedUpdateResponse) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[13] + mi := &file_enclave_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -698,7 +596,7 @@ func (x *EncodedUpdateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use EncodedUpdateResponse.ProtoReflect.Descriptor instead. func (*EncodedUpdateResponse) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{13} + return file_enclave_proto_rawDescGZIP(), []int{11} } func (x *EncodedUpdateResponse) GetBatch() []byte { @@ -720,7 +618,7 @@ type Pagination struct { func (x *Pagination) Reset() { *x = Pagination{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[14] + mi := &file_enclave_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -733,7 +631,7 @@ func (x *Pagination) String() string { func (*Pagination) ProtoMessage() {} func (x *Pagination) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[14] + mi := &file_enclave_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -746,7 +644,7 @@ func (x *Pagination) ProtoReflect() protoreflect.Message { // Deprecated: Use Pagination.ProtoReflect.Descriptor instead. func (*Pagination) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{14} + return file_enclave_proto_rawDescGZIP(), []int{12} } func (x *Pagination) GetOffset() int32 { @@ -775,7 +673,7 @@ type SystemError struct { func (x *SystemError) Reset() { *x = SystemError{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[15] + mi := &file_enclave_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -788,7 +686,7 @@ func (x *SystemError) String() string { func (*SystemError) ProtoMessage() {} func (x *SystemError) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[15] + mi := &file_enclave_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -801,7 +699,7 @@ func (x *SystemError) ProtoReflect() protoreflect.Message { // Deprecated: Use SystemError.ProtoReflect.Descriptor instead. func (*SystemError) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{15} + return file_enclave_proto_rawDescGZIP(), []int{13} } func (x *SystemError) GetErrorCode() int32 { @@ -827,7 +725,7 @@ type GetTotalContractCountRequest struct { func (x *GetTotalContractCountRequest) Reset() { *x = GetTotalContractCountRequest{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[16] + mi := &file_enclave_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -840,7 +738,7 @@ func (x *GetTotalContractCountRequest) String() string { func (*GetTotalContractCountRequest) ProtoMessage() {} func (x *GetTotalContractCountRequest) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[16] + mi := &file_enclave_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -853,7 +751,7 @@ func (x *GetTotalContractCountRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetTotalContractCountRequest.ProtoReflect.Descriptor instead. func (*GetTotalContractCountRequest) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{16} + return file_enclave_proto_rawDescGZIP(), []int{14} } type GetTotalContractCountResponse struct { @@ -868,7 +766,7 @@ type GetTotalContractCountResponse struct { func (x *GetTotalContractCountResponse) Reset() { *x = GetTotalContractCountResponse{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[17] + mi := &file_enclave_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -881,7 +779,7 @@ func (x *GetTotalContractCountResponse) String() string { func (*GetTotalContractCountResponse) ProtoMessage() {} func (x *GetTotalContractCountResponse) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[17] + mi := &file_enclave_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -894,7 +792,7 @@ func (x *GetTotalContractCountResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetTotalContractCountResponse.ProtoReflect.Descriptor instead. func (*GetTotalContractCountResponse) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{17} + return file_enclave_proto_rawDescGZIP(), []int{15} } func (x *GetTotalContractCountResponse) GetCount() int64 { @@ -922,7 +820,7 @@ type DebugEventLogRelevancyRequest struct { func (x *DebugEventLogRelevancyRequest) Reset() { *x = DebugEventLogRelevancyRequest{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[18] + mi := &file_enclave_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -935,7 +833,7 @@ func (x *DebugEventLogRelevancyRequest) String() string { func (*DebugEventLogRelevancyRequest) ProtoMessage() {} func (x *DebugEventLogRelevancyRequest) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[18] + mi := &file_enclave_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -948,7 +846,7 @@ func (x *DebugEventLogRelevancyRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DebugEventLogRelevancyRequest.ProtoReflect.Descriptor instead. func (*DebugEventLogRelevancyRequest) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{18} + return file_enclave_proto_rawDescGZIP(), []int{16} } func (x *DebugEventLogRelevancyRequest) GetTxHash() []byte { @@ -970,7 +868,7 @@ type DebugEventLogRelevancyResponse struct { func (x *DebugEventLogRelevancyResponse) Reset() { *x = DebugEventLogRelevancyResponse{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[19] + mi := &file_enclave_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -983,7 +881,7 @@ func (x *DebugEventLogRelevancyResponse) String() string { func (*DebugEventLogRelevancyResponse) ProtoMessage() {} func (x *DebugEventLogRelevancyResponse) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[19] + mi := &file_enclave_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -996,7 +894,7 @@ func (x *DebugEventLogRelevancyResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DebugEventLogRelevancyResponse.ProtoReflect.Descriptor instead. func (*DebugEventLogRelevancyResponse) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{19} + return file_enclave_proto_rawDescGZIP(), []int{17} } func (x *DebugEventLogRelevancyResponse) GetMsg() string { @@ -1025,7 +923,7 @@ type DebugTraceTransactionRequest struct { func (x *DebugTraceTransactionRequest) Reset() { *x = DebugTraceTransactionRequest{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[20] + mi := &file_enclave_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1038,7 +936,7 @@ func (x *DebugTraceTransactionRequest) String() string { func (*DebugTraceTransactionRequest) ProtoMessage() {} func (x *DebugTraceTransactionRequest) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[20] + mi := &file_enclave_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1051,7 +949,7 @@ func (x *DebugTraceTransactionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DebugTraceTransactionRequest.ProtoReflect.Descriptor instead. func (*DebugTraceTransactionRequest) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{20} + return file_enclave_proto_rawDescGZIP(), []int{18} } func (x *DebugTraceTransactionRequest) GetTxHash() []byte { @@ -1080,7 +978,7 @@ type DebugTraceTransactionResponse struct { func (x *DebugTraceTransactionResponse) Reset() { *x = DebugTraceTransactionResponse{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[21] + mi := &file_enclave_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1093,7 +991,7 @@ func (x *DebugTraceTransactionResponse) String() string { func (*DebugTraceTransactionResponse) ProtoMessage() {} func (x *DebugTraceTransactionResponse) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[21] + mi := &file_enclave_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1106,7 +1004,7 @@ func (x *DebugTraceTransactionResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DebugTraceTransactionResponse.ProtoReflect.Descriptor instead. func (*DebugTraceTransactionResponse) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{21} + return file_enclave_proto_rawDescGZIP(), []int{19} } func (x *DebugTraceTransactionResponse) GetMsg() string { @@ -1134,7 +1032,7 @@ type CreateBatchRequest struct { func (x *CreateBatchRequest) Reset() { *x = CreateBatchRequest{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[22] + mi := &file_enclave_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1147,7 +1045,7 @@ func (x *CreateBatchRequest) String() string { func (*CreateBatchRequest) ProtoMessage() {} func (x *CreateBatchRequest) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[22] + mi := &file_enclave_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1160,7 +1058,7 @@ func (x *CreateBatchRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateBatchRequest.ProtoReflect.Descriptor instead. func (*CreateBatchRequest) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{22} + return file_enclave_proto_rawDescGZIP(), []int{20} } func (x *CreateBatchRequest) GetSkipIfEmpty() bool { @@ -1181,7 +1079,7 @@ type CreateBatchResponse struct { func (x *CreateBatchResponse) Reset() { *x = CreateBatchResponse{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[23] + mi := &file_enclave_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1194,7 +1092,7 @@ func (x *CreateBatchResponse) String() string { func (*CreateBatchResponse) ProtoMessage() {} func (x *CreateBatchResponse) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[23] + mi := &file_enclave_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1207,7 +1105,7 @@ func (x *CreateBatchResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateBatchResponse.ProtoReflect.Descriptor instead. func (*CreateBatchResponse) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{23} + return file_enclave_proto_rawDescGZIP(), []int{21} } func (x *CreateBatchResponse) GetError() string { @@ -1228,7 +1126,7 @@ type CreateRollupRequest struct { func (x *CreateRollupRequest) Reset() { *x = CreateRollupRequest{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[24] + mi := &file_enclave_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1241,7 +1139,7 @@ func (x *CreateRollupRequest) String() string { func (*CreateRollupRequest) ProtoMessage() {} func (x *CreateRollupRequest) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[24] + mi := &file_enclave_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1254,7 +1152,7 @@ func (x *CreateRollupRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateRollupRequest.ProtoReflect.Descriptor instead. func (*CreateRollupRequest) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{24} + return file_enclave_proto_rawDescGZIP(), []int{22} } func (x *CreateRollupRequest) GetFromSequenceNumber() uint64 { @@ -1276,7 +1174,7 @@ type CreateRollupResponse struct { func (x *CreateRollupResponse) Reset() { *x = CreateRollupResponse{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[25] + mi := &file_enclave_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1289,7 +1187,7 @@ func (x *CreateRollupResponse) String() string { func (*CreateRollupResponse) ProtoMessage() {} func (x *CreateRollupResponse) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[25] + mi := &file_enclave_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1302,7 +1200,7 @@ func (x *CreateRollupResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateRollupResponse.ProtoReflect.Descriptor instead. func (*CreateRollupResponse) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{25} + return file_enclave_proto_rawDescGZIP(), []int{23} } func (x *CreateRollupResponse) GetMsg() *ExtRollupMsg { @@ -1328,7 +1226,7 @@ type StatusRequest struct { func (x *StatusRequest) Reset() { *x = StatusRequest{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[26] + mi := &file_enclave_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1341,7 +1239,7 @@ func (x *StatusRequest) String() string { func (*StatusRequest) ProtoMessage() {} func (x *StatusRequest) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[26] + mi := &file_enclave_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1354,7 +1252,7 @@ func (x *StatusRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StatusRequest.ProtoReflect.Descriptor instead. func (*StatusRequest) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{26} + return file_enclave_proto_rawDescGZIP(), []int{24} } type StatusResponse struct { @@ -1371,7 +1269,7 @@ type StatusResponse struct { func (x *StatusResponse) Reset() { *x = StatusResponse{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[27] + mi := &file_enclave_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1384,7 +1282,7 @@ func (x *StatusResponse) String() string { func (*StatusResponse) ProtoMessage() {} func (x *StatusResponse) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[27] + mi := &file_enclave_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1397,7 +1295,7 @@ func (x *StatusResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StatusResponse.ProtoReflect.Descriptor instead. func (*StatusResponse) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{27} + return file_enclave_proto_rawDescGZIP(), []int{25} } func (x *StatusResponse) GetStatusCode() int32 { @@ -1437,7 +1335,7 @@ type AttestationRequest struct { func (x *AttestationRequest) Reset() { *x = AttestationRequest{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[28] + mi := &file_enclave_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1450,7 +1348,7 @@ func (x *AttestationRequest) String() string { func (*AttestationRequest) ProtoMessage() {} func (x *AttestationRequest) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[28] + mi := &file_enclave_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1463,7 +1361,7 @@ func (x *AttestationRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use AttestationRequest.ProtoReflect.Descriptor instead. func (*AttestationRequest) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{28} + return file_enclave_proto_rawDescGZIP(), []int{26} } type AttestationResponse struct { @@ -1478,7 +1376,7 @@ type AttestationResponse struct { func (x *AttestationResponse) Reset() { *x = AttestationResponse{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[29] + mi := &file_enclave_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1491,7 +1389,7 @@ func (x *AttestationResponse) String() string { func (*AttestationResponse) ProtoMessage() {} func (x *AttestationResponse) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[29] + mi := &file_enclave_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1504,7 +1402,7 @@ func (x *AttestationResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use AttestationResponse.ProtoReflect.Descriptor instead. func (*AttestationResponse) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{29} + return file_enclave_proto_rawDescGZIP(), []int{27} } func (x *AttestationResponse) GetAttestationReportMsg() *AttestationReportMsg { @@ -1530,7 +1428,7 @@ type GenerateSecretRequest struct { func (x *GenerateSecretRequest) Reset() { *x = GenerateSecretRequest{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[30] + mi := &file_enclave_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1543,7 +1441,7 @@ func (x *GenerateSecretRequest) String() string { func (*GenerateSecretRequest) ProtoMessage() {} func (x *GenerateSecretRequest) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[30] + mi := &file_enclave_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1556,7 +1454,7 @@ func (x *GenerateSecretRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GenerateSecretRequest.ProtoReflect.Descriptor instead. func (*GenerateSecretRequest) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{30} + return file_enclave_proto_rawDescGZIP(), []int{28} } type GenerateSecretResponse struct { @@ -1571,7 +1469,7 @@ type GenerateSecretResponse struct { func (x *GenerateSecretResponse) Reset() { *x = GenerateSecretResponse{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[31] + mi := &file_enclave_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1584,7 +1482,7 @@ func (x *GenerateSecretResponse) String() string { func (*GenerateSecretResponse) ProtoMessage() {} func (x *GenerateSecretResponse) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[31] + mi := &file_enclave_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1597,7 +1495,7 @@ func (x *GenerateSecretResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GenerateSecretResponse.ProtoReflect.Descriptor instead. func (*GenerateSecretResponse) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{31} + return file_enclave_proto_rawDescGZIP(), []int{29} } func (x *GenerateSecretResponse) GetEncryptedSharedEnclaveSecret() []byte { @@ -1625,7 +1523,7 @@ type InitEnclaveRequest struct { func (x *InitEnclaveRequest) Reset() { *x = InitEnclaveRequest{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[32] + mi := &file_enclave_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1638,7 +1536,7 @@ func (x *InitEnclaveRequest) String() string { func (*InitEnclaveRequest) ProtoMessage() {} func (x *InitEnclaveRequest) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[32] + mi := &file_enclave_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1651,7 +1549,7 @@ func (x *InitEnclaveRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use InitEnclaveRequest.ProtoReflect.Descriptor instead. func (*InitEnclaveRequest) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{32} + return file_enclave_proto_rawDescGZIP(), []int{30} } func (x *InitEnclaveRequest) GetEncryptedSharedEnclaveSecret() []byte { @@ -1672,7 +1570,7 @@ type InitEnclaveResponse struct { func (x *InitEnclaveResponse) Reset() { *x = InitEnclaveResponse{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[33] + mi := &file_enclave_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1685,7 +1583,7 @@ func (x *InitEnclaveResponse) String() string { func (*InitEnclaveResponse) ProtoMessage() {} func (x *InitEnclaveResponse) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[33] + mi := &file_enclave_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1698,7 +1596,7 @@ func (x *InitEnclaveResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use InitEnclaveResponse.ProtoReflect.Descriptor instead. func (*InitEnclaveResponse) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{33} + return file_enclave_proto_rawDescGZIP(), []int{31} } func (x *InitEnclaveResponse) GetSystemError() *SystemError { @@ -1717,7 +1615,7 @@ type EnclaveIDRequest struct { func (x *EnclaveIDRequest) Reset() { *x = EnclaveIDRequest{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[34] + mi := &file_enclave_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1730,7 +1628,7 @@ func (x *EnclaveIDRequest) String() string { func (*EnclaveIDRequest) ProtoMessage() {} func (x *EnclaveIDRequest) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[34] + mi := &file_enclave_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1743,7 +1641,7 @@ func (x *EnclaveIDRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use EnclaveIDRequest.ProtoReflect.Descriptor instead. func (*EnclaveIDRequest) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{34} + return file_enclave_proto_rawDescGZIP(), []int{32} } type EnclaveIDResponse struct { @@ -1758,7 +1656,7 @@ type EnclaveIDResponse struct { func (x *EnclaveIDResponse) Reset() { *x = EnclaveIDResponse{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[35] + mi := &file_enclave_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1771,7 +1669,7 @@ func (x *EnclaveIDResponse) String() string { func (*EnclaveIDResponse) ProtoMessage() {} func (x *EnclaveIDResponse) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[35] + mi := &file_enclave_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1784,7 +1682,7 @@ func (x *EnclaveIDResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use EnclaveIDResponse.ProtoReflect.Descriptor instead. func (*EnclaveIDResponse) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{35} + return file_enclave_proto_rawDescGZIP(), []int{33} } func (x *EnclaveIDResponse) GetEnclaveID() []byte { @@ -1812,7 +1710,7 @@ type StartRequest struct { func (x *StartRequest) Reset() { *x = StartRequest{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[36] + mi := &file_enclave_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1825,7 +1723,7 @@ func (x *StartRequest) String() string { func (*StartRequest) ProtoMessage() {} func (x *StartRequest) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[36] + mi := &file_enclave_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1838,7 +1736,7 @@ func (x *StartRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StartRequest.ProtoReflect.Descriptor instead. func (*StartRequest) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{36} + return file_enclave_proto_rawDescGZIP(), []int{34} } func (x *StartRequest) GetEncodedBlock() []byte { @@ -1859,7 +1757,7 @@ type StartResponse struct { func (x *StartResponse) Reset() { *x = StartResponse{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[37] + mi := &file_enclave_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1872,7 +1770,7 @@ func (x *StartResponse) String() string { func (*StartResponse) ProtoMessage() {} func (x *StartResponse) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[37] + mi := &file_enclave_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1885,7 +1783,7 @@ func (x *StartResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StartResponse.ProtoReflect.Descriptor instead. func (*StartResponse) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{37} + return file_enclave_proto_rawDescGZIP(), []int{35} } func (x *StartResponse) GetSystemError() *SystemError { @@ -1908,7 +1806,7 @@ type SubmitBlockRequest struct { func (x *SubmitBlockRequest) Reset() { *x = SubmitBlockRequest{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[38] + mi := &file_enclave_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1921,7 +1819,7 @@ func (x *SubmitBlockRequest) String() string { func (*SubmitBlockRequest) ProtoMessage() {} func (x *SubmitBlockRequest) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[38] + mi := &file_enclave_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1934,7 +1832,7 @@ func (x *SubmitBlockRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SubmitBlockRequest.ProtoReflect.Descriptor instead. func (*SubmitBlockRequest) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{38} + return file_enclave_proto_rawDescGZIP(), []int{36} } func (x *SubmitBlockRequest) GetEncodedBlock() []byte { @@ -1970,7 +1868,7 @@ type SubmitBlockResponse struct { func (x *SubmitBlockResponse) Reset() { *x = SubmitBlockResponse{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[39] + mi := &file_enclave_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1983,7 +1881,7 @@ func (x *SubmitBlockResponse) String() string { func (*SubmitBlockResponse) ProtoMessage() {} func (x *SubmitBlockResponse) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[39] + mi := &file_enclave_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1996,7 +1894,7 @@ func (x *SubmitBlockResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SubmitBlockResponse.ProtoReflect.Descriptor instead. func (*SubmitBlockResponse) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{39} + return file_enclave_proto_rawDescGZIP(), []int{37} } func (x *SubmitBlockResponse) GetBlockSubmissionResponse() *BlockSubmissionResponseMsg { @@ -2024,7 +1922,7 @@ type SubmitTxRequest struct { func (x *SubmitTxRequest) Reset() { *x = SubmitTxRequest{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[40] + mi := &file_enclave_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2037,7 +1935,7 @@ func (x *SubmitTxRequest) String() string { func (*SubmitTxRequest) ProtoMessage() {} func (x *SubmitTxRequest) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[40] + mi := &file_enclave_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2050,7 +1948,7 @@ func (x *SubmitTxRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SubmitTxRequest.ProtoReflect.Descriptor instead. func (*SubmitTxRequest) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{40} + return file_enclave_proto_rawDescGZIP(), []int{38} } func (x *SubmitTxRequest) GetEncryptedTx() []byte { @@ -2072,7 +1970,7 @@ type SubmitTxResponse struct { func (x *SubmitTxResponse) Reset() { *x = SubmitTxResponse{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[41] + mi := &file_enclave_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2085,7 +1983,7 @@ func (x *SubmitTxResponse) String() string { func (*SubmitTxResponse) ProtoMessage() {} func (x *SubmitTxResponse) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[41] + mi := &file_enclave_proto_msgTypes[39] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2098,7 +1996,7 @@ func (x *SubmitTxResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SubmitTxResponse.ProtoReflect.Descriptor instead. func (*SubmitTxResponse) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{41} + return file_enclave_proto_rawDescGZIP(), []int{39} } func (x *SubmitTxResponse) GetEncodedEnclaveResponse() []byte { @@ -2126,7 +2024,7 @@ type SubmitBatchRequest struct { func (x *SubmitBatchRequest) Reset() { *x = SubmitBatchRequest{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[42] + mi := &file_enclave_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2139,7 +2037,7 @@ func (x *SubmitBatchRequest) String() string { func (*SubmitBatchRequest) ProtoMessage() {} func (x *SubmitBatchRequest) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[42] + mi := &file_enclave_proto_msgTypes[40] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2152,7 +2050,7 @@ func (x *SubmitBatchRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SubmitBatchRequest.ProtoReflect.Descriptor instead. func (*SubmitBatchRequest) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{42} + return file_enclave_proto_rawDescGZIP(), []int{40} } func (x *SubmitBatchRequest) GetBatch() *ExtBatchMsg { @@ -2173,7 +2071,7 @@ type SubmitBatchResponse struct { func (x *SubmitBatchResponse) Reset() { *x = SubmitBatchResponse{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[43] + mi := &file_enclave_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2186,7 +2084,7 @@ func (x *SubmitBatchResponse) String() string { func (*SubmitBatchResponse) ProtoMessage() {} func (x *SubmitBatchResponse) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[43] + mi := &file_enclave_proto_msgTypes[41] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2199,7 +2097,7 @@ func (x *SubmitBatchResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SubmitBatchResponse.ProtoReflect.Descriptor instead. func (*SubmitBatchResponse) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{43} + return file_enclave_proto_rawDescGZIP(), []int{41} } func (x *SubmitBatchResponse) GetSystemError() *SystemError { @@ -2220,7 +2118,7 @@ type ObsCallRequest struct { func (x *ObsCallRequest) Reset() { *x = ObsCallRequest{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[44] + mi := &file_enclave_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2233,7 +2131,7 @@ func (x *ObsCallRequest) String() string { func (*ObsCallRequest) ProtoMessage() {} func (x *ObsCallRequest) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[44] + mi := &file_enclave_proto_msgTypes[42] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2246,7 +2144,7 @@ func (x *ObsCallRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ObsCallRequest.ProtoReflect.Descriptor instead. func (*ObsCallRequest) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{44} + return file_enclave_proto_rawDescGZIP(), []int{42} } func (x *ObsCallRequest) GetEncryptedParams() []byte { @@ -2268,7 +2166,7 @@ type ObsCallResponse struct { func (x *ObsCallResponse) Reset() { *x = ObsCallResponse{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[45] + mi := &file_enclave_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2281,7 +2179,7 @@ func (x *ObsCallResponse) String() string { func (*ObsCallResponse) ProtoMessage() {} func (x *ObsCallResponse) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[45] + mi := &file_enclave_proto_msgTypes[43] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2294,7 +2192,7 @@ func (x *ObsCallResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ObsCallResponse.ProtoReflect.Descriptor instead. func (*ObsCallResponse) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{45} + return file_enclave_proto_rawDescGZIP(), []int{43} } func (x *ObsCallResponse) GetEncodedEnclaveResponse() []byte { @@ -2322,7 +2220,7 @@ type GetTransactionCountRequest struct { func (x *GetTransactionCountRequest) Reset() { *x = GetTransactionCountRequest{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[46] + mi := &file_enclave_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2335,7 +2233,7 @@ func (x *GetTransactionCountRequest) String() string { func (*GetTransactionCountRequest) ProtoMessage() {} func (x *GetTransactionCountRequest) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[46] + mi := &file_enclave_proto_msgTypes[44] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2348,7 +2246,7 @@ func (x *GetTransactionCountRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetTransactionCountRequest.ProtoReflect.Descriptor instead. func (*GetTransactionCountRequest) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{46} + return file_enclave_proto_rawDescGZIP(), []int{44} } func (x *GetTransactionCountRequest) GetEncryptedParams() []byte { @@ -2370,7 +2268,7 @@ type GetTransactionCountResponse struct { func (x *GetTransactionCountResponse) Reset() { *x = GetTransactionCountResponse{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[47] + mi := &file_enclave_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2383,7 +2281,7 @@ func (x *GetTransactionCountResponse) String() string { func (*GetTransactionCountResponse) ProtoMessage() {} func (x *GetTransactionCountResponse) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[47] + mi := &file_enclave_proto_msgTypes[45] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2396,7 +2294,7 @@ func (x *GetTransactionCountResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetTransactionCountResponse.ProtoReflect.Descriptor instead. func (*GetTransactionCountResponse) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{47} + return file_enclave_proto_rawDescGZIP(), []int{45} } func (x *GetTransactionCountResponse) GetEncodedEnclaveResponse() []byte { @@ -2422,7 +2320,7 @@ type StopRequest struct { func (x *StopRequest) Reset() { *x = StopRequest{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[48] + mi := &file_enclave_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2435,7 +2333,7 @@ func (x *StopRequest) String() string { func (*StopRequest) ProtoMessage() {} func (x *StopRequest) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[48] + mi := &file_enclave_proto_msgTypes[46] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2448,7 +2346,7 @@ func (x *StopRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StopRequest.ProtoReflect.Descriptor instead. func (*StopRequest) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{48} + return file_enclave_proto_rawDescGZIP(), []int{46} } type StopResponse struct { @@ -2462,7 +2360,7 @@ type StopResponse struct { func (x *StopResponse) Reset() { *x = StopResponse{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[49] + mi := &file_enclave_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2475,7 +2373,7 @@ func (x *StopResponse) String() string { func (*StopResponse) ProtoMessage() {} func (x *StopResponse) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[49] + mi := &file_enclave_proto_msgTypes[47] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2488,7 +2386,7 @@ func (x *StopResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StopResponse.ProtoReflect.Descriptor instead. func (*StopResponse) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{49} + return file_enclave_proto_rawDescGZIP(), []int{47} } func (x *StopResponse) GetSystemError() *SystemError { @@ -2509,7 +2407,7 @@ type GetTransactionRequest struct { func (x *GetTransactionRequest) Reset() { *x = GetTransactionRequest{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[50] + mi := &file_enclave_proto_msgTypes[48] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2522,7 +2420,7 @@ func (x *GetTransactionRequest) String() string { func (*GetTransactionRequest) ProtoMessage() {} func (x *GetTransactionRequest) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[50] + mi := &file_enclave_proto_msgTypes[48] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2535,7 +2433,7 @@ func (x *GetTransactionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetTransactionRequest.ProtoReflect.Descriptor instead. func (*GetTransactionRequest) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{50} + return file_enclave_proto_rawDescGZIP(), []int{48} } func (x *GetTransactionRequest) GetEncryptedParams() []byte { @@ -2557,7 +2455,7 @@ type GetTransactionResponse struct { func (x *GetTransactionResponse) Reset() { *x = GetTransactionResponse{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[51] + mi := &file_enclave_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2570,7 +2468,7 @@ func (x *GetTransactionResponse) String() string { func (*GetTransactionResponse) ProtoMessage() {} func (x *GetTransactionResponse) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[51] + mi := &file_enclave_proto_msgTypes[49] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2583,7 +2481,7 @@ func (x *GetTransactionResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetTransactionResponse.ProtoReflect.Descriptor instead. func (*GetTransactionResponse) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{51} + return file_enclave_proto_rawDescGZIP(), []int{49} } func (x *GetTransactionResponse) GetEncodedEnclaveResponse() []byte { @@ -2611,7 +2509,7 @@ type GetTransactionReceiptRequest struct { func (x *GetTransactionReceiptRequest) Reset() { *x = GetTransactionReceiptRequest{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[52] + mi := &file_enclave_proto_msgTypes[50] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2624,7 +2522,7 @@ func (x *GetTransactionReceiptRequest) String() string { func (*GetTransactionReceiptRequest) ProtoMessage() {} func (x *GetTransactionReceiptRequest) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[52] + mi := &file_enclave_proto_msgTypes[50] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2637,7 +2535,7 @@ func (x *GetTransactionReceiptRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetTransactionReceiptRequest.ProtoReflect.Descriptor instead. func (*GetTransactionReceiptRequest) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{52} + return file_enclave_proto_rawDescGZIP(), []int{50} } func (x *GetTransactionReceiptRequest) GetEncryptedParams() []byte { @@ -2659,7 +2557,7 @@ type GetTransactionReceiptResponse struct { func (x *GetTransactionReceiptResponse) Reset() { *x = GetTransactionReceiptResponse{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[53] + mi := &file_enclave_proto_msgTypes[51] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2672,7 +2570,7 @@ func (x *GetTransactionReceiptResponse) String() string { func (*GetTransactionReceiptResponse) ProtoMessage() {} func (x *GetTransactionReceiptResponse) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[53] + mi := &file_enclave_proto_msgTypes[51] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2685,7 +2583,7 @@ func (x *GetTransactionReceiptResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetTransactionReceiptResponse.ProtoReflect.Descriptor instead. func (*GetTransactionReceiptResponse) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{53} + return file_enclave_proto_rawDescGZIP(), []int{51} } func (x *GetTransactionReceiptResponse) GetEncodedEnclaveResponse() []byte { @@ -2713,7 +2611,7 @@ type GetBalanceRequest struct { func (x *GetBalanceRequest) Reset() { *x = GetBalanceRequest{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[54] + mi := &file_enclave_proto_msgTypes[52] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2726,7 +2624,7 @@ func (x *GetBalanceRequest) String() string { func (*GetBalanceRequest) ProtoMessage() {} func (x *GetBalanceRequest) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[54] + mi := &file_enclave_proto_msgTypes[52] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2739,7 +2637,7 @@ func (x *GetBalanceRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetBalanceRequest.ProtoReflect.Descriptor instead. func (*GetBalanceRequest) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{54} + return file_enclave_proto_rawDescGZIP(), []int{52} } func (x *GetBalanceRequest) GetEncryptedParams() []byte { @@ -2761,7 +2659,7 @@ type GetBalanceResponse struct { func (x *GetBalanceResponse) Reset() { *x = GetBalanceResponse{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[55] + mi := &file_enclave_proto_msgTypes[53] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2774,7 +2672,7 @@ func (x *GetBalanceResponse) String() string { func (*GetBalanceResponse) ProtoMessage() {} func (x *GetBalanceResponse) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[55] + mi := &file_enclave_proto_msgTypes[53] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2787,7 +2685,7 @@ func (x *GetBalanceResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetBalanceResponse.ProtoReflect.Descriptor instead. func (*GetBalanceResponse) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{55} + return file_enclave_proto_rawDescGZIP(), []int{53} } func (x *GetBalanceResponse) GetEncodedEnclaveResponse() []byte { @@ -2816,7 +2714,7 @@ type GetCodeRequest struct { func (x *GetCodeRequest) Reset() { *x = GetCodeRequest{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[56] + mi := &file_enclave_proto_msgTypes[54] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2829,7 +2727,7 @@ func (x *GetCodeRequest) String() string { func (*GetCodeRequest) ProtoMessage() {} func (x *GetCodeRequest) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[56] + mi := &file_enclave_proto_msgTypes[54] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2842,7 +2740,7 @@ func (x *GetCodeRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetCodeRequest.ProtoReflect.Descriptor instead. func (*GetCodeRequest) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{56} + return file_enclave_proto_rawDescGZIP(), []int{54} } func (x *GetCodeRequest) GetAddress() []byte { @@ -2871,7 +2769,7 @@ type GetCodeResponse struct { func (x *GetCodeResponse) Reset() { *x = GetCodeResponse{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[57] + mi := &file_enclave_proto_msgTypes[55] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2884,7 +2782,7 @@ func (x *GetCodeResponse) String() string { func (*GetCodeResponse) ProtoMessage() {} func (x *GetCodeResponse) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[57] + mi := &file_enclave_proto_msgTypes[55] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2897,7 +2795,7 @@ func (x *GetCodeResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetCodeResponse.ProtoReflect.Descriptor instead. func (*GetCodeResponse) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{57} + return file_enclave_proto_rawDescGZIP(), []int{55} } func (x *GetCodeResponse) GetCode() []byte { @@ -2926,7 +2824,7 @@ type SubscribeRequest struct { func (x *SubscribeRequest) Reset() { *x = SubscribeRequest{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[58] + mi := &file_enclave_proto_msgTypes[56] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2939,7 +2837,7 @@ func (x *SubscribeRequest) String() string { func (*SubscribeRequest) ProtoMessage() {} func (x *SubscribeRequest) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[58] + mi := &file_enclave_proto_msgTypes[56] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2952,7 +2850,7 @@ func (x *SubscribeRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SubscribeRequest.ProtoReflect.Descriptor instead. func (*SubscribeRequest) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{58} + return file_enclave_proto_rawDescGZIP(), []int{56} } func (x *SubscribeRequest) GetId() []byte { @@ -2980,7 +2878,7 @@ type SubscribeResponse struct { func (x *SubscribeResponse) Reset() { *x = SubscribeResponse{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[59] + mi := &file_enclave_proto_msgTypes[57] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2993,7 +2891,7 @@ func (x *SubscribeResponse) String() string { func (*SubscribeResponse) ProtoMessage() {} func (x *SubscribeResponse) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[59] + mi := &file_enclave_proto_msgTypes[57] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3006,7 +2904,7 @@ func (x *SubscribeResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SubscribeResponse.ProtoReflect.Descriptor instead. func (*SubscribeResponse) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{59} + return file_enclave_proto_rawDescGZIP(), []int{57} } func (x *SubscribeResponse) GetSystemError() *SystemError { @@ -3027,7 +2925,7 @@ type UnsubscribeRequest struct { func (x *UnsubscribeRequest) Reset() { *x = UnsubscribeRequest{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[60] + mi := &file_enclave_proto_msgTypes[58] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3040,7 +2938,7 @@ func (x *UnsubscribeRequest) String() string { func (*UnsubscribeRequest) ProtoMessage() {} func (x *UnsubscribeRequest) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[60] + mi := &file_enclave_proto_msgTypes[58] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3053,7 +2951,7 @@ func (x *UnsubscribeRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UnsubscribeRequest.ProtoReflect.Descriptor instead. func (*UnsubscribeRequest) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{60} + return file_enclave_proto_rawDescGZIP(), []int{58} } func (x *UnsubscribeRequest) GetId() []byte { @@ -3074,7 +2972,7 @@ type UnsubscribeResponse struct { func (x *UnsubscribeResponse) Reset() { *x = UnsubscribeResponse{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[61] + mi := &file_enclave_proto_msgTypes[59] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3087,7 +2985,7 @@ func (x *UnsubscribeResponse) String() string { func (*UnsubscribeResponse) ProtoMessage() {} func (x *UnsubscribeResponse) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[61] + mi := &file_enclave_proto_msgTypes[59] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3100,7 +2998,7 @@ func (x *UnsubscribeResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UnsubscribeResponse.ProtoReflect.Descriptor instead. func (*UnsubscribeResponse) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{61} + return file_enclave_proto_rawDescGZIP(), []int{59} } func (x *UnsubscribeResponse) GetSystemError() *SystemError { @@ -3121,7 +3019,7 @@ type EstimateGasRequest struct { func (x *EstimateGasRequest) Reset() { *x = EstimateGasRequest{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[62] + mi := &file_enclave_proto_msgTypes[60] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3134,7 +3032,7 @@ func (x *EstimateGasRequest) String() string { func (*EstimateGasRequest) ProtoMessage() {} func (x *EstimateGasRequest) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[62] + mi := &file_enclave_proto_msgTypes[60] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3147,7 +3045,7 @@ func (x *EstimateGasRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use EstimateGasRequest.ProtoReflect.Descriptor instead. func (*EstimateGasRequest) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{62} + return file_enclave_proto_rawDescGZIP(), []int{60} } func (x *EstimateGasRequest) GetEncryptedParams() []byte { @@ -3169,7 +3067,7 @@ type EstimateGasResponse struct { func (x *EstimateGasResponse) Reset() { *x = EstimateGasResponse{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[63] + mi := &file_enclave_proto_msgTypes[61] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3182,7 +3080,7 @@ func (x *EstimateGasResponse) String() string { func (*EstimateGasResponse) ProtoMessage() {} func (x *EstimateGasResponse) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[63] + mi := &file_enclave_proto_msgTypes[61] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3195,7 +3093,7 @@ func (x *EstimateGasResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use EstimateGasResponse.ProtoReflect.Descriptor instead. func (*EstimateGasResponse) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{63} + return file_enclave_proto_rawDescGZIP(), []int{61} } func (x *EstimateGasResponse) GetEncodedEnclaveResponse() []byte { @@ -3223,7 +3121,7 @@ type GetLogsRequest struct { func (x *GetLogsRequest) Reset() { *x = GetLogsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[64] + mi := &file_enclave_proto_msgTypes[62] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3236,7 +3134,7 @@ func (x *GetLogsRequest) String() string { func (*GetLogsRequest) ProtoMessage() {} func (x *GetLogsRequest) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[64] + mi := &file_enclave_proto_msgTypes[62] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3249,7 +3147,7 @@ func (x *GetLogsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetLogsRequest.ProtoReflect.Descriptor instead. func (*GetLogsRequest) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{64} + return file_enclave_proto_rawDescGZIP(), []int{62} } func (x *GetLogsRequest) GetEncryptedParams() []byte { @@ -3271,7 +3169,7 @@ type GetLogsResponse struct { func (x *GetLogsResponse) Reset() { *x = GetLogsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[65] + mi := &file_enclave_proto_msgTypes[63] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3284,7 +3182,7 @@ func (x *GetLogsResponse) String() string { func (*GetLogsResponse) ProtoMessage() {} func (x *GetLogsResponse) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[65] + mi := &file_enclave_proto_msgTypes[63] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3297,7 +3195,7 @@ func (x *GetLogsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetLogsResponse.ProtoReflect.Descriptor instead. func (*GetLogsResponse) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{65} + return file_enclave_proto_rawDescGZIP(), []int{63} } func (x *GetLogsResponse) GetEncodedEnclaveResponse() []byte { @@ -3326,7 +3224,7 @@ type HealthCheckResponse struct { func (x *HealthCheckResponse) Reset() { *x = HealthCheckResponse{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[66] + mi := &file_enclave_proto_msgTypes[64] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3339,7 +3237,7 @@ func (x *HealthCheckResponse) String() string { func (*HealthCheckResponse) ProtoMessage() {} func (x *HealthCheckResponse) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[66] + mi := &file_enclave_proto_msgTypes[64] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3352,7 +3250,7 @@ func (x *HealthCheckResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use HealthCheckResponse.ProtoReflect.Descriptor instead. func (*HealthCheckResponse) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{66} + return file_enclave_proto_rawDescGZIP(), []int{64} } func (x *HealthCheckResponse) GetStatus() bool { @@ -3378,7 +3276,7 @@ type EmptyArgs struct { func (x *EmptyArgs) Reset() { *x = EmptyArgs{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[67] + mi := &file_enclave_proto_msgTypes[65] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3391,7 +3289,7 @@ func (x *EmptyArgs) String() string { func (*EmptyArgs) ProtoMessage() {} func (x *EmptyArgs) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[67] + mi := &file_enclave_proto_msgTypes[65] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3404,7 +3302,7 @@ func (x *EmptyArgs) ProtoReflect() protoreflect.Message { // Deprecated: Use EmptyArgs.ProtoReflect.Descriptor instead. func (*EmptyArgs) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{67} + return file_enclave_proto_rawDescGZIP(), []int{65} } type AttestationReportMsg struct { @@ -3422,7 +3320,7 @@ type AttestationReportMsg struct { func (x *AttestationReportMsg) Reset() { *x = AttestationReportMsg{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[68] + mi := &file_enclave_proto_msgTypes[66] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3435,7 +3333,7 @@ func (x *AttestationReportMsg) String() string { func (*AttestationReportMsg) ProtoMessage() {} func (x *AttestationReportMsg) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[68] + mi := &file_enclave_proto_msgTypes[66] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3448,7 +3346,7 @@ func (x *AttestationReportMsg) ProtoReflect() protoreflect.Message { // Deprecated: Use AttestationReportMsg.ProtoReflect.Descriptor instead. func (*AttestationReportMsg) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{68} + return file_enclave_proto_rawDescGZIP(), []int{66} } func (x *AttestationReportMsg) GetReport() []byte { @@ -3498,7 +3396,7 @@ type BlockSubmissionResponseMsg struct { func (x *BlockSubmissionResponseMsg) Reset() { *x = BlockSubmissionResponseMsg{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[69] + mi := &file_enclave_proto_msgTypes[67] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3511,7 +3409,7 @@ func (x *BlockSubmissionResponseMsg) String() string { func (*BlockSubmissionResponseMsg) ProtoMessage() {} func (x *BlockSubmissionResponseMsg) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[69] + mi := &file_enclave_proto_msgTypes[67] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3524,7 +3422,7 @@ func (x *BlockSubmissionResponseMsg) ProtoReflect() protoreflect.Message { // Deprecated: Use BlockSubmissionResponseMsg.ProtoReflect.Descriptor instead. func (*BlockSubmissionResponseMsg) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{69} + return file_enclave_proto_rawDescGZIP(), []int{67} } func (x *BlockSubmissionResponseMsg) GetProducedSecretResponses() []*SecretResponseMsg { @@ -3553,7 +3451,7 @@ type BlockSubmissionErrorMsg struct { func (x *BlockSubmissionErrorMsg) Reset() { *x = BlockSubmissionErrorMsg{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[70] + mi := &file_enclave_proto_msgTypes[68] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3566,7 +3464,7 @@ func (x *BlockSubmissionErrorMsg) String() string { func (*BlockSubmissionErrorMsg) ProtoMessage() {} func (x *BlockSubmissionErrorMsg) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[70] + mi := &file_enclave_proto_msgTypes[68] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3579,7 +3477,7 @@ func (x *BlockSubmissionErrorMsg) ProtoReflect() protoreflect.Message { // Deprecated: Use BlockSubmissionErrorMsg.ProtoReflect.Descriptor instead. func (*BlockSubmissionErrorMsg) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{70} + return file_enclave_proto_rawDescGZIP(), []int{68} } func (x *BlockSubmissionErrorMsg) GetCause() string { @@ -3611,7 +3509,7 @@ type CrossChainMsg struct { func (x *CrossChainMsg) Reset() { *x = CrossChainMsg{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[71] + mi := &file_enclave_proto_msgTypes[69] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3624,7 +3522,7 @@ func (x *CrossChainMsg) String() string { func (*CrossChainMsg) ProtoMessage() {} func (x *CrossChainMsg) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[71] + mi := &file_enclave_proto_msgTypes[69] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3637,7 +3535,7 @@ func (x *CrossChainMsg) ProtoReflect() protoreflect.Message { // Deprecated: Use CrossChainMsg.ProtoReflect.Descriptor instead. func (*CrossChainMsg) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{71} + return file_enclave_proto_rawDescGZIP(), []int{69} } func (x *CrossChainMsg) GetSender() []byte { @@ -3688,7 +3586,7 @@ type ExtBatchMsg struct { func (x *ExtBatchMsg) Reset() { *x = ExtBatchMsg{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[72] + mi := &file_enclave_proto_msgTypes[70] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3701,7 +3599,7 @@ func (x *ExtBatchMsg) String() string { func (*ExtBatchMsg) ProtoMessage() {} func (x *ExtBatchMsg) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[72] + mi := &file_enclave_proto_msgTypes[70] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3714,7 +3612,7 @@ func (x *ExtBatchMsg) ProtoReflect() protoreflect.Message { // Deprecated: Use ExtBatchMsg.ProtoReflect.Descriptor instead. func (*ExtBatchMsg) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{72} + return file_enclave_proto_rawDescGZIP(), []int{70} } func (x *ExtBatchMsg) GetHeader() *BatchHeaderMsg { @@ -3766,7 +3664,7 @@ type BatchHeaderMsg struct { func (x *BatchHeaderMsg) Reset() { *x = BatchHeaderMsg{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[73] + mi := &file_enclave_proto_msgTypes[71] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3779,7 +3677,7 @@ func (x *BatchHeaderMsg) String() string { func (*BatchHeaderMsg) ProtoMessage() {} func (x *BatchHeaderMsg) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[73] + mi := &file_enclave_proto_msgTypes[71] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3792,7 +3690,7 @@ func (x *BatchHeaderMsg) ProtoReflect() protoreflect.Message { // Deprecated: Use BatchHeaderMsg.ProtoReflect.Descriptor instead. func (*BatchHeaderMsg) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{73} + return file_enclave_proto_rawDescGZIP(), []int{71} } func (x *BatchHeaderMsg) GetParentHash() []byte { @@ -3934,7 +3832,7 @@ type ExtRollupMsg struct { func (x *ExtRollupMsg) Reset() { *x = ExtRollupMsg{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[74] + mi := &file_enclave_proto_msgTypes[72] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3947,7 +3845,7 @@ func (x *ExtRollupMsg) String() string { func (*ExtRollupMsg) ProtoMessage() {} func (x *ExtRollupMsg) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[74] + mi := &file_enclave_proto_msgTypes[72] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3960,7 +3858,7 @@ func (x *ExtRollupMsg) ProtoReflect() protoreflect.Message { // Deprecated: Use ExtRollupMsg.ProtoReflect.Descriptor instead. func (*ExtRollupMsg) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{74} + return file_enclave_proto_rawDescGZIP(), []int{72} } func (x *ExtRollupMsg) GetHeader() *RollupHeaderMsg { @@ -4003,7 +3901,7 @@ type RollupHeaderMsg struct { func (x *RollupHeaderMsg) Reset() { *x = RollupHeaderMsg{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[75] + mi := &file_enclave_proto_msgTypes[73] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4016,7 +3914,7 @@ func (x *RollupHeaderMsg) String() string { func (*RollupHeaderMsg) ProtoMessage() {} func (x *RollupHeaderMsg) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[75] + mi := &file_enclave_proto_msgTypes[73] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4029,7 +3927,7 @@ func (x *RollupHeaderMsg) ProtoReflect() protoreflect.Message { // Deprecated: Use RollupHeaderMsg.ProtoReflect.Descriptor instead. func (*RollupHeaderMsg) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{75} + return file_enclave_proto_rawDescGZIP(), []int{73} } func (x *RollupHeaderMsg) GetParentHash() []byte { @@ -4110,7 +4008,7 @@ type SecretResponseMsg struct { func (x *SecretResponseMsg) Reset() { *x = SecretResponseMsg{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[76] + mi := &file_enclave_proto_msgTypes[74] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4123,7 +4021,7 @@ func (x *SecretResponseMsg) String() string { func (*SecretResponseMsg) ProtoMessage() {} func (x *SecretResponseMsg) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[76] + mi := &file_enclave_proto_msgTypes[74] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4136,7 +4034,7 @@ func (x *SecretResponseMsg) ProtoReflect() protoreflect.Message { // Deprecated: Use SecretResponseMsg.ProtoReflect.Descriptor instead. func (*SecretResponseMsg) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{76} + return file_enclave_proto_rawDescGZIP(), []int{74} } func (x *SecretResponseMsg) GetSecret() []byte { @@ -4187,7 +4085,7 @@ type WithdrawalMsg struct { func (x *WithdrawalMsg) Reset() { *x = WithdrawalMsg{} if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[77] + mi := &file_enclave_proto_msgTypes[75] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4200,7 +4098,7 @@ func (x *WithdrawalMsg) String() string { func (*WithdrawalMsg) ProtoMessage() {} func (x *WithdrawalMsg) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[77] + mi := &file_enclave_proto_msgTypes[75] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4213,7 +4111,7 @@ func (x *WithdrawalMsg) ProtoReflect() protoreflect.Message { // Deprecated: Use WithdrawalMsg.ProtoReflect.Descriptor instead. func (*WithdrawalMsg) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{77} + return file_enclave_proto_rawDescGZIP(), []int{75} } func (x *WithdrawalMsg) GetAmount() []byte { @@ -4241,291 +4139,230 @@ var File_enclave_proto protoreflect.FileDescriptor var file_enclave_proto_rawDesc = []byte{ 0x0a, 0x0d, 0x65, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, - 0x09, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x22, 0x58, 0x0a, 0x1f, 0x47, 0x65, - 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x35, 0x0a, - 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x15, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x50, 0x61, - 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x92, 0x01, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x50, 0x75, 0x62, 0x6c, - 0x69, 0x63, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, - 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x15, 0x70, 0x75, 0x62, - 0x6c, 0x69, 0x63, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, - 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x15, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, - 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, - 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, - 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x1c, 0x0a, 0x1a, 0x45, 0x6e, 0x63, + 0x09, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x22, 0x1c, 0x0a, 0x1a, 0x45, 0x6e, + 0x63, 0x6c, 0x61, 0x76, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x89, 0x01, 0x0a, 0x1b, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x89, 0x01, 0x0a, 0x1b, 0x45, 0x6e, 0x63, 0x6c, - 0x61, 0x76, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x13, 0x6c, 0x32, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x42, 0x75, 0x73, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x13, 0x6c, 0x32, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, - 0x75, 0x73, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, - 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, - 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, - 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x22, 0x47, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, - 0x74, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, - 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x65, 0x6e, 0x63, - 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x90, 0x01, 0x0a, - 0x1c, 0x47, 0x65, 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x73, 0x42, 0x79, 0x41, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, - 0x16, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x16, 0x65, - 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x13, 0x6c, 0x32, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x75, 0x73, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x13, 0x6c, 0x32, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x42, 0x75, 0x73, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, + 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, + 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, + 0x72, 0x72, 0x6f, 0x72, 0x22, 0x47, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, + 0x70, 0x74, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x65, 0x6e, + 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x90, 0x01, + 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x73, 0x42, 0x79, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, + 0x0a, 0x16, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x16, + 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, + 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, + 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, + 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, + 0x22, 0x2f, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x48, 0x65, 0x61, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x48, 0x65, 0x61, + 0x64, 0x22, 0x2e, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x42, 0x79, 0x53, + 0x65, 0x71, 0x4e, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x73, + 0x65, 0x71, 0x4e, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x73, 0x65, 0x71, 0x4e, + 0x6f, 0x22, 0x62, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x62, 0x61, 0x74, 0x63, 0x68, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x62, 0x61, 0x74, 0x63, 0x68, 0x12, 0x38, 0x0a, 0x0b, 0x73, + 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, + 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, + 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x2a, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x6c, + 0x75, 0x70, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, + 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x68, 0x61, 0x73, + 0x68, 0x22, 0x83, 0x01, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x44, + 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x03, 0x6d, + 0x73, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, + 0x61, 0x74, 0x65, 0x64, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x52, 0x6f, 0x6c, 0x6c, 0x75, + 0x70, 0x44, 0x61, 0x74, 0x61, 0x4d, 0x73, 0x67, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x38, 0x0a, + 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, + 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, + 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x4f, 0x0a, 0x13, 0x50, 0x75, 0x62, 0x6c, 0x69, + 0x63, 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x44, 0x61, 0x74, 0x61, 0x4d, 0x73, 0x67, 0x12, 0x1a, + 0x0a, 0x08, 0x73, 0x74, 0x61, 0x72, 0x74, 0x53, 0x65, 0x71, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x08, 0x73, 0x74, 0x61, 0x72, 0x74, 0x53, 0x65, 0x71, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x74, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x18, 0x0a, 0x16, 0x53, 0x74, 0x72, 0x65, + 0x61, 0x6d, 0x4c, 0x32, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x22, 0x2d, 0x0a, 0x15, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x62, + 0x61, 0x74, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x62, 0x61, 0x74, 0x63, + 0x68, 0x22, 0x38, 0x0a, 0x0a, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x22, 0x4d, 0x0a, 0x0b, 0x53, + 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x65, 0x72, + 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x65, + 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x65, 0x72, 0x72, 0x6f, + 0x72, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, + 0x72, 0x72, 0x6f, 0x72, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x22, 0x1e, 0x0a, 0x1c, 0x47, 0x65, + 0x74, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x43, 0x6f, + 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x6f, 0x0a, 0x1d, 0x47, 0x65, + 0x74, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x43, 0x6f, + 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, + 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, + 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x37, 0x0a, 0x1d, 0x44, + 0x65, 0x62, 0x75, 0x67, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x67, 0x52, 0x65, 0x6c, 0x65, + 0x76, 0x61, 0x6e, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, + 0x74, 0x78, 0x48, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x74, 0x78, + 0x48, 0x61, 0x73, 0x68, 0x22, 0x6c, 0x0a, 0x1e, 0x44, 0x65, 0x62, 0x75, 0x67, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x4c, 0x6f, 0x67, 0x52, 0x65, 0x6c, 0x65, 0x76, 0x61, 0x6e, 0x63, 0x79, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, + 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, + 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, + 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, + 0x6f, 0x72, 0x22, 0x4e, 0x0a, 0x1c, 0x44, 0x65, 0x62, 0x75, 0x67, 0x54, 0x72, 0x61, 0x63, 0x65, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x78, 0x48, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x06, 0x74, 0x78, 0x48, 0x61, 0x73, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x22, 0x6b, 0x0a, 0x1d, 0x44, 0x65, 0x62, 0x75, 0x67, 0x54, 0x72, 0x61, 0x63, 0x65, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, - 0x2f, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x48, 0x65, 0x61, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x48, 0x65, 0x61, 0x64, - 0x22, 0x2e, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x42, 0x79, 0x53, 0x65, - 0x71, 0x4e, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x65, - 0x71, 0x4e, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x73, 0x65, 0x71, 0x4e, 0x6f, - 0x22, 0x62, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x62, 0x61, 0x74, 0x63, 0x68, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x05, 0x62, 0x61, 0x74, 0x63, 0x68, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, + 0x36, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x6b, 0x69, 0x70, 0x49, 0x66, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x73, 0x6b, 0x69, 0x70, + 0x49, 0x66, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2b, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, + 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, + 0x72, 0x72, 0x6f, 0x72, 0x22, 0x61, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, + 0x6c, 0x6c, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x33, 0x0a, 0x12, 0x66, + 0x72, 0x6f, 0x6d, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x48, 0x00, 0x52, 0x12, 0x66, 0x72, 0x6f, 0x6d, 0x53, + 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x88, 0x01, 0x01, + 0x42, 0x15, 0x0a, 0x13, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, + 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x22, 0x7b, 0x0a, 0x14, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x29, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, + 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x45, 0x78, 0x74, 0x52, 0x6f, 0x6c, 0x6c, + 0x75, 0x70, 0x4d, 0x73, 0x67, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, - 0x72, 0x72, 0x6f, 0x72, 0x22, 0x2a, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x6c, 0x75, - 0x70, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, - 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, - 0x22, 0x83, 0x01, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x44, 0x61, - 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x03, 0x6d, 0x73, - 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, - 0x74, 0x65, 0x64, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, - 0x44, 0x61, 0x74, 0x61, 0x4d, 0x73, 0x67, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x38, 0x0a, 0x0b, - 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, - 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, - 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x4f, 0x0a, 0x13, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, - 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x44, 0x61, 0x74, 0x61, 0x4d, 0x73, 0x67, 0x12, 0x1a, 0x0a, - 0x08, 0x73, 0x74, 0x61, 0x72, 0x74, 0x53, 0x65, 0x71, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x08, 0x73, 0x74, 0x61, 0x72, 0x74, 0x53, 0x65, 0x71, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x74, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x18, 0x0a, 0x16, 0x53, 0x74, 0x72, 0x65, 0x61, - 0x6d, 0x4c, 0x32, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x22, 0x2d, 0x0a, 0x15, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x62, 0x61, - 0x74, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x62, 0x61, 0x74, 0x63, 0x68, - 0x22, 0x38, 0x0a, 0x0a, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, - 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, - 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x22, 0x4d, 0x0a, 0x0b, 0x53, 0x79, - 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x65, 0x72, 0x72, - 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x65, 0x72, 0x72, 0x6f, 0x72, - 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x22, 0x1e, 0x0a, 0x1c, 0x47, 0x65, 0x74, - 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x43, 0x6f, 0x75, - 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x6f, 0x0a, 0x1d, 0x47, 0x65, 0x74, - 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x43, 0x6f, 0x75, - 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, - 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, - 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x37, 0x0a, 0x1d, 0x44, 0x65, - 0x62, 0x75, 0x67, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x67, 0x52, 0x65, 0x6c, 0x65, 0x76, - 0x61, 0x6e, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x74, - 0x78, 0x48, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x74, 0x78, 0x48, - 0x61, 0x73, 0x68, 0x22, 0x6c, 0x0a, 0x1e, 0x44, 0x65, 0x62, 0x75, 0x67, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x4c, 0x6f, 0x67, 0x52, 0x65, 0x6c, 0x65, 0x76, 0x61, 0x6e, 0x63, 0x79, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, + 0x72, 0x72, 0x6f, 0x72, 0x22, 0x0f, 0x0a, 0x0d, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x9a, 0x01, 0x0a, 0x0e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x31, 0x48, 0x65, + 0x61, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x6c, 0x31, 0x48, 0x65, 0x61, 0x64, + 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x32, 0x48, 0x65, 0x61, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x06, 0x6c, 0x32, 0x48, 0x65, 0x61, 0x64, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, + 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, + 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, + 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, + 0x6f, 0x72, 0x22, 0x14, 0x0a, 0x12, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xa4, 0x01, 0x0a, 0x13, 0x41, 0x74, 0x74, + 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x53, 0x0a, 0x14, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x70, 0x6f, 0x72, 0x74, 0x4d, 0x73, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, + 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x4d, 0x73, 0x67, 0x52, + 0x14, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x6f, + 0x72, 0x74, 0x4d, 0x73, 0x67, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, + 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, + 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, + 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, + 0x17, 0x0a, 0x15, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x96, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x6e, + 0x65, 0x72, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x42, 0x0a, 0x1c, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, + 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x53, 0x65, 0x63, + 0x72, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x1c, 0x65, 0x6e, 0x63, 0x72, 0x79, + 0x70, 0x74, 0x65, 0x64, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, + 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, - 0x72, 0x22, 0x4e, 0x0a, 0x1c, 0x44, 0x65, 0x62, 0x75, 0x67, 0x54, 0x72, 0x61, 0x63, 0x65, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x78, 0x48, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x06, 0x74, 0x78, 0x48, 0x61, 0x73, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x22, 0x6b, 0x0a, 0x1d, 0x44, 0x65, 0x62, 0x75, 0x67, 0x54, 0x72, 0x61, 0x63, 0x65, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6d, 0x73, 0x67, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, - 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, - 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x36, - 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x6b, 0x69, 0x70, 0x49, 0x66, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x73, 0x6b, 0x69, 0x70, 0x49, - 0x66, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2b, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, - 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x22, 0x61, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, - 0x6c, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x33, 0x0a, 0x12, 0x66, 0x72, - 0x6f, 0x6d, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x48, 0x00, 0x52, 0x12, 0x66, 0x72, 0x6f, 0x6d, 0x53, 0x65, - 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x88, 0x01, 0x01, 0x42, - 0x15, 0x0a, 0x13, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, - 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x22, 0x7b, 0x0a, 0x14, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x29, - 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x65, - 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x45, 0x78, 0x74, 0x52, 0x6f, 0x6c, 0x6c, 0x75, - 0x70, 0x4d, 0x73, 0x67, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, - 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, - 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, - 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x22, 0x0f, 0x0a, 0x0d, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x22, 0x9a, 0x01, 0x0a, 0x0e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x31, 0x48, 0x65, 0x61, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x6c, 0x31, 0x48, 0x65, 0x61, 0x64, 0x12, - 0x16, 0x0a, 0x06, 0x6c, 0x32, 0x48, 0x65, 0x61, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x06, 0x6c, 0x32, 0x48, 0x65, 0x61, 0x64, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, - 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, - 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, - 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, - 0x72, 0x22, 0x14, 0x0a, 0x12, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xa4, 0x01, 0x0a, 0x13, 0x41, 0x74, 0x74, 0x65, - 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x53, 0x0a, 0x14, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x70, 0x6f, 0x72, 0x74, 0x4d, 0x73, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, - 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x4d, 0x73, 0x67, 0x52, 0x14, - 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, - 0x74, 0x4d, 0x73, 0x67, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, - 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, - 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x17, - 0x0a, 0x15, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x96, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x6e, 0x65, - 0x72, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x42, 0x0a, 0x1c, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x53, - 0x68, 0x61, 0x72, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x53, 0x65, 0x63, 0x72, - 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x1c, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, - 0x74, 0x65, 0x64, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, - 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, - 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, - 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, - 0x22, 0x58, 0x0a, 0x12, 0x49, 0x6e, 0x69, 0x74, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x42, 0x0a, 0x1c, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, - 0x74, 0x65, 0x64, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, - 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x1c, 0x65, 0x6e, - 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x45, 0x6e, 0x63, - 0x6c, 0x61, 0x76, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x22, 0x4f, 0x0a, 0x13, 0x49, 0x6e, - 0x69, 0x74, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, - 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, - 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x12, 0x0a, 0x10, 0x45, - 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, - 0x6b, 0x0a, 0x11, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x65, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x49, - 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x65, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, - 0x49, 0x44, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, - 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, + 0x72, 0x22, 0x58, 0x0a, 0x12, 0x49, 0x6e, 0x69, 0x74, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x42, 0x0a, 0x1c, 0x65, 0x6e, 0x63, 0x72, 0x79, + 0x70, 0x74, 0x65, 0x64, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, + 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x1c, 0x65, + 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x45, 0x6e, + 0x63, 0x6c, 0x61, 0x76, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x22, 0x4f, 0x0a, 0x13, 0x49, + 0x6e, 0x69, 0x74, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, + 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, - 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x32, 0x0a, 0x0c, - 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x22, 0x0a, 0x0c, - 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x0c, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x22, 0x49, 0x0a, 0x0d, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, - 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, - 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x7e, 0x0a, 0x12, 0x53, - 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x28, 0x0a, 0x0f, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, - 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, - 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x73, 0x12, - 0x1a, 0x0a, 0x08, 0x69, 0x73, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x08, 0x69, 0x73, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x22, 0xb0, 0x01, 0x0a, 0x13, - 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x5f, 0x0a, 0x17, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x75, 0x62, 0x6d, - 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, - 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x73, 0x67, 0x52, 0x17, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, - 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, - 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x33, - 0x0a, 0x0f, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x54, 0x78, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, - 0x64, 0x54, 0x78, 0x22, 0x84, 0x01, 0x0a, 0x10, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x54, 0x78, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x16, 0x65, 0x6e, 0x63, 0x6f, - 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x16, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, - 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, - 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, - 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x42, 0x0a, 0x12, 0x53, 0x75, - 0x62, 0x6d, 0x69, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x2c, 0x0a, 0x05, 0x62, 0x61, 0x74, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x45, 0x78, 0x74, 0x42, - 0x61, 0x74, 0x63, 0x68, 0x4d, 0x73, 0x67, 0x52, 0x05, 0x62, 0x61, 0x74, 0x63, 0x68, 0x22, 0x4f, - 0x0a, 0x13, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, + 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x12, 0x0a, 0x10, + 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x22, 0x6b, 0x0a, 0x11, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x49, 0x44, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x65, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, + 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x65, 0x6e, 0x63, 0x6c, 0x61, 0x76, + 0x65, 0x49, 0x44, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, + 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, + 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, + 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x32, 0x0a, + 0x0c, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x22, 0x0a, + 0x0c, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x63, + 0x6b, 0x22, 0x49, 0x0a, 0x0d, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, + 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, + 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, + 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x7e, 0x0a, 0x12, + 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x42, 0x6c, 0x6f, + 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, + 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x28, 0x0a, 0x0f, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, + 0x64, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x0f, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x73, + 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x73, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x22, 0xb0, 0x01, 0x0a, + 0x13, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5f, 0x0a, 0x17, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x75, 0x62, + 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, + 0x64, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x73, 0x67, 0x52, 0x17, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, - 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, + 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, - 0x3a, 0x0a, 0x0e, 0x4f, 0x62, 0x73, 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x65, 0x6e, 0x63, 0x72, - 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x83, 0x01, 0x0a, 0x0f, - 0x4f, 0x62, 0x73, 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x36, 0x0a, 0x16, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x16, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, - 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, - 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, - 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, - 0x72, 0x22, 0x46, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x28, 0x0a, 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, - 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x8f, 0x01, 0x0a, 0x1b, 0x47, 0x65, - 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x16, 0x65, 0x6e, 0x63, + 0x33, 0x0a, 0x0f, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x54, + 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, + 0x65, 0x64, 0x54, 0x78, 0x22, 0x84, 0x01, 0x0a, 0x10, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x54, + 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x16, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x16, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, - 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x0d, 0x0a, 0x0b, 0x53, - 0x74, 0x6f, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x48, 0x0a, 0x0c, 0x53, 0x74, - 0x6f, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, - 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, - 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, - 0x72, 0x72, 0x6f, 0x72, 0x22, 0x41, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, - 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, - 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x8a, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x36, 0x0a, 0x16, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, - 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x16, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, - 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, - 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, - 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, - 0x72, 0x72, 0x6f, 0x72, 0x22, 0x48, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, - 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x65, - 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x91, - 0x01, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x42, 0x0a, 0x12, 0x53, + 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x2c, 0x0a, 0x05, 0x62, 0x61, 0x74, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x45, 0x78, 0x74, + 0x42, 0x61, 0x74, 0x63, 0x68, 0x4d, 0x73, 0x67, 0x52, 0x05, 0x62, 0x61, 0x74, 0x63, 0x68, 0x22, + 0x4f, 0x0a, 0x13, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, + 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, + 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, + 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, + 0x22, 0x3a, 0x0a, 0x0e, 0x4f, 0x62, 0x73, 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x65, 0x6e, 0x63, + 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x83, 0x01, 0x0a, + 0x0f, 0x4f, 0x62, 0x73, 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x16, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x16, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, @@ -4533,65 +4370,45 @@ var file_enclave_proto_rawDesc = []byte{ 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, - 0x6f, 0x72, 0x22, 0x3d, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, - 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, - 0x52, 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x73, 0x22, 0x86, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x16, 0x65, 0x6e, 0x63, 0x6f, + 0x6f, 0x72, 0x22, 0x46, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x28, 0x0a, 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, + 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x8f, 0x01, 0x0a, 0x1b, 0x47, + 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, + 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x16, 0x65, 0x6e, + 0x63, 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x16, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x16, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, - 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, - 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, - 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x4a, 0x0a, 0x0e, 0x47, 0x65, - 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, - 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x61, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x72, 0x6f, 0x6c, 0x6c, 0x75, 0x70, - 0x48, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x72, 0x6f, 0x6c, 0x6c, - 0x75, 0x70, 0x48, 0x61, 0x73, 0x68, 0x22, 0x5f, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x64, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x38, 0x0a, - 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, - 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, - 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x58, 0x0a, 0x10, 0x53, 0x75, 0x62, 0x73, 0x63, - 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x02, 0x69, 0x64, 0x12, 0x34, 0x0a, 0x15, 0x65, - 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x15, 0x65, 0x6e, 0x63, 0x72, - 0x79, 0x70, 0x74, 0x65, 0x64, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x22, 0x4d, 0x0a, 0x11, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, - 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, - 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, - 0x22, 0x24, 0x0a, 0x12, 0x55, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x02, 0x69, 0x64, 0x22, 0x4f, 0x0a, 0x13, 0x55, 0x6e, 0x73, 0x75, 0x62, 0x73, - 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, - 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, - 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, - 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x3e, 0x0a, 0x12, 0x45, 0x73, 0x74, 0x69, 0x6d, - 0x61, 0x74, 0x65, 0x47, 0x61, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, - 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, - 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x87, 0x01, 0x0a, 0x13, 0x45, 0x73, 0x74, 0x69, - 0x6d, 0x61, 0x74, 0x65, 0x47, 0x61, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x36, 0x0a, 0x16, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x16, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, - 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, - 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, - 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, - 0x72, 0x22, 0x3a, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x65, 0x6e, - 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x83, 0x01, - 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x73, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, + 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, + 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, + 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x0d, 0x0a, 0x0b, + 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x48, 0x0a, 0x0c, 0x53, + 0x74, 0x6f, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x73, + 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, + 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, + 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x41, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, + 0x0a, 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, + 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x8a, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x16, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, + 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x16, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, + 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x73, + 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, + 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, + 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x48, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, + 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, + 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, + 0x91, 0x01, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x16, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x16, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, @@ -4599,322 +4416,381 @@ var file_enclave_proto_rawDesc = []byte{ 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x22, 0x67, 0x0a, 0x13, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, - 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, - 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, - 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, - 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x0b, 0x0a, 0x09, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x41, 0x72, 0x67, 0x73, 0x22, 0xc0, 0x01, 0x0a, 0x14, 0x41, 0x74, - 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x4d, - 0x73, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x06, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x50, 0x75, - 0x62, 0x4b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x50, 0x75, 0x62, 0x4b, - 0x65, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x49, 0x44, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x49, 0x44, - 0x12, 0x20, 0x0a, 0x0b, 0x48, 0x6f, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x48, 0x6f, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, - 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, - 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, - 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0xae, 0x01, 0x0a, - 0x1a, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x73, 0x67, 0x12, 0x56, 0x0a, 0x17, 0x70, - 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x64, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, - 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x73, 0x67, 0x52, 0x17, 0x70, 0x72, 0x6f, 0x64, - 0x75, 0x63, 0x65, 0x64, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x73, 0x12, 0x38, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x4d, 0x73, 0x67, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x47, 0x0a, - 0x17, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x73, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x61, 0x75, 0x73, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x63, 0x61, 0x75, 0x73, 0x65, 0x12, 0x16, - 0x0a, 0x06, 0x6c, 0x31, 0x48, 0x65, 0x61, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, - 0x6c, 0x31, 0x48, 0x65, 0x61, 0x64, 0x22, 0x89, 0x01, 0x0a, 0x0d, 0x43, 0x72, 0x6f, 0x73, 0x73, - 0x43, 0x68, 0x61, 0x69, 0x6e, 0x4d, 0x73, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x65, 0x6e, 0x64, - 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, - 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x08, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, - 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x4e, 0x6f, 0x6e, - 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x05, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x12, 0x18, 0x0a, 0x07, 0x50, 0x61, 0x79, 0x6c, - 0x6f, 0x61, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x50, 0x61, 0x79, 0x6c, 0x6f, - 0x61, 0x64, 0x22, 0x6e, 0x0a, 0x0b, 0x45, 0x78, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x4d, 0x73, - 0x67, 0x12, 0x31, 0x0a, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x42, 0x61, - 0x74, 0x63, 0x68, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4d, 0x73, 0x67, 0x52, 0x06, 0x68, 0x65, - 0x61, 0x64, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x74, 0x78, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x08, 0x74, 0x78, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, - 0x12, 0x10, 0x0a, 0x03, 0x74, 0x78, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x74, - 0x78, 0x73, 0x22, 0x82, 0x05, 0x0a, 0x0e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x48, 0x65, 0x61, 0x64, - 0x65, 0x72, 0x4d, 0x73, 0x67, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x48, - 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x50, 0x61, 0x72, 0x65, 0x6e, - 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x12, 0x12, 0x0a, 0x04, 0x52, - 0x6f, 0x6f, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x52, 0x6f, 0x6f, 0x74, 0x12, - 0x16, 0x0a, 0x06, 0x54, 0x78, 0x48, 0x61, 0x73, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x06, 0x54, 0x78, 0x48, 0x61, 0x73, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x4e, 0x75, 0x6d, 0x62, 0x65, - 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, - 0x2a, 0x0a, 0x10, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x72, 0x4f, 0x72, 0x64, 0x65, - 0x72, 0x4e, 0x6f, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x53, 0x65, 0x71, 0x75, 0x65, - 0x6e, 0x63, 0x65, 0x72, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x4e, 0x6f, 0x12, 0x20, 0x0a, 0x0b, 0x52, - 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x48, 0x61, 0x73, 0x68, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, - 0x52, 0x0b, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x14, 0x0a, - 0x05, 0x45, 0x78, 0x74, 0x72, 0x61, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x45, 0x78, - 0x74, 0x72, 0x61, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x47, 0x61, 0x73, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x0a, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x08, 0x47, 0x61, 0x73, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x18, 0x0a, - 0x07, 0x47, 0x61, 0x73, 0x55, 0x73, 0x65, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, - 0x47, 0x61, 0x73, 0x55, 0x73, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x69, 0x6d, 0x65, 0x18, - 0x0c, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x42, - 0x61, 0x73, 0x65, 0x46, 0x65, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x42, 0x61, - 0x73, 0x65, 0x46, 0x65, 0x65, 0x12, 0x44, 0x0a, 0x1d, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x49, - 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, - 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x1d, 0x4c, 0x61, - 0x74, 0x65, 0x73, 0x74, 0x49, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x72, 0x6f, 0x73, 0x73, - 0x43, 0x68, 0x61, 0x69, 0x6e, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x40, 0x0a, 0x1b, 0x4c, + 0x72, 0x6f, 0x72, 0x22, 0x3d, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x65, 0x6e, 0x63, 0x72, + 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, + 0x6d, 0x73, 0x22, 0x86, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x16, 0x65, 0x6e, 0x63, + 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x16, 0x65, 0x6e, 0x63, 0x6f, 0x64, + 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, + 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, + 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x4a, 0x0a, 0x0e, 0x47, + 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, + 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, + 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x72, 0x6f, 0x6c, 0x6c, 0x75, + 0x70, 0x48, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x72, 0x6f, 0x6c, + 0x6c, 0x75, 0x70, 0x48, 0x61, 0x73, 0x68, 0x22, 0x5f, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x43, 0x6f, + 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, + 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x38, + 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, + 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, + 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x58, 0x0a, 0x10, 0x53, 0x75, 0x62, 0x73, + 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x02, 0x69, 0x64, 0x12, 0x34, 0x0a, 0x15, + 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x15, 0x65, 0x6e, 0x63, + 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x22, 0x4d, 0x0a, 0x11, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, + 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, + 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, + 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, + 0x72, 0x22, 0x24, 0x0a, 0x12, 0x55, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x02, 0x69, 0x64, 0x22, 0x4f, 0x0a, 0x13, 0x55, 0x6e, 0x73, 0x75, 0x62, + 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, + 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, + 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, + 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x3e, 0x0a, 0x12, 0x45, 0x73, 0x74, 0x69, + 0x6d, 0x61, 0x74, 0x65, 0x47, 0x61, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, + 0x0a, 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, + 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x87, 0x01, 0x0a, 0x13, 0x45, 0x73, 0x74, + 0x69, 0x6d, 0x61, 0x74, 0x65, 0x47, 0x61, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x36, 0x0a, 0x16, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, + 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x16, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, + 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, + 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, + 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, + 0x6f, 0x72, 0x22, 0x3a, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, + 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x65, + 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x83, + 0x01, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x36, 0x0a, 0x16, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, + 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x16, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, + 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, + 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, + 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, + 0x72, 0x72, 0x6f, 0x72, 0x22, 0x67, 0x0a, 0x13, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, + 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x73, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, + 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, + 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, + 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x0b, 0x0a, + 0x09, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x41, 0x72, 0x67, 0x73, 0x22, 0xc0, 0x01, 0x0a, 0x14, 0x41, + 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, + 0x4d, 0x73, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x06, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x50, + 0x75, 0x62, 0x4b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x50, 0x75, 0x62, + 0x4b, 0x65, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x49, 0x44, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x49, + 0x44, 0x12, 0x20, 0x0a, 0x0b, 0x48, 0x6f, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x48, 0x6f, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, + 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, + 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, + 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0xae, 0x01, + 0x0a, 0x1a, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x73, 0x67, 0x12, 0x56, 0x0a, 0x17, + 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x64, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, + 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x73, 0x67, 0x52, 0x17, 0x70, 0x72, 0x6f, + 0x64, 0x75, 0x63, 0x65, 0x64, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x73, 0x12, 0x38, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x45, + 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x73, 0x67, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x47, + 0x0a, 0x17, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x73, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x61, 0x75, + 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x63, 0x61, 0x75, 0x73, 0x65, 0x12, + 0x16, 0x0a, 0x06, 0x6c, 0x31, 0x48, 0x65, 0x61, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x06, 0x6c, 0x31, 0x48, 0x65, 0x61, 0x64, 0x22, 0x89, 0x01, 0x0a, 0x0d, 0x43, 0x72, 0x6f, 0x73, + 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x4d, 0x73, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x65, 0x6e, + 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x53, 0x65, 0x6e, 0x64, 0x65, + 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x08, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x14, 0x0a, + 0x05, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x4e, 0x6f, + 0x6e, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x05, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x12, 0x18, 0x0a, 0x07, 0x50, 0x61, 0x79, + 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x50, 0x61, 0x79, 0x6c, + 0x6f, 0x61, 0x64, 0x22, 0x6e, 0x0a, 0x0b, 0x45, 0x78, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x4d, + 0x73, 0x67, 0x12, 0x31, 0x0a, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x42, + 0x61, 0x74, 0x63, 0x68, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4d, 0x73, 0x67, 0x52, 0x06, 0x68, + 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x74, 0x78, 0x48, 0x61, 0x73, 0x68, 0x65, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x08, 0x74, 0x78, 0x48, 0x61, 0x73, 0x68, 0x65, + 0x73, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x78, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, + 0x74, 0x78, 0x73, 0x22, 0x82, 0x05, 0x0a, 0x0e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x48, 0x65, 0x61, + 0x64, 0x65, 0x72, 0x4d, 0x73, 0x67, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, + 0x48, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x50, 0x61, 0x72, 0x65, + 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x12, 0x12, 0x0a, 0x04, + 0x52, 0x6f, 0x6f, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x52, 0x6f, 0x6f, 0x74, + 0x12, 0x16, 0x0a, 0x06, 0x54, 0x78, 0x48, 0x61, 0x73, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x06, 0x54, 0x78, 0x48, 0x61, 0x73, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x4e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x12, 0x2a, 0x0a, 0x10, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x72, 0x4f, 0x72, 0x64, + 0x65, 0x72, 0x4e, 0x6f, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x53, 0x65, 0x71, 0x75, + 0x65, 0x6e, 0x63, 0x65, 0x72, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x4e, 0x6f, 0x12, 0x20, 0x0a, 0x0b, + 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x48, 0x61, 0x73, 0x68, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x0b, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x14, + 0x0a, 0x05, 0x45, 0x78, 0x74, 0x72, 0x61, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x45, + 0x78, 0x74, 0x72, 0x61, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x47, 0x61, 0x73, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x0a, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x47, 0x61, 0x73, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x18, + 0x0a, 0x07, 0x47, 0x61, 0x73, 0x55, 0x73, 0x65, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x07, 0x47, 0x61, 0x73, 0x55, 0x73, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x69, 0x6d, 0x65, + 0x18, 0x0c, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, + 0x42, 0x61, 0x73, 0x65, 0x46, 0x65, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x42, + 0x61, 0x73, 0x65, 0x46, 0x65, 0x65, 0x12, 0x44, 0x0a, 0x1d, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, + 0x49, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x61, 0x69, + 0x6e, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x1d, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x49, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x72, 0x6f, 0x73, - 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x48, 0x61, 0x73, 0x68, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0c, - 0x52, 0x1b, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x49, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x43, - 0x72, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x48, 0x61, 0x73, 0x68, 0x12, 0x48, 0x0a, - 0x12, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x73, 0x18, 0x10, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x65, 0x6e, 0x65, - 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, - 0x4d, 0x73, 0x67, 0x52, 0x12, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x66, 0x65, 0x72, 0x54, 0x72, 0x65, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x54, 0x72, 0x65, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x43, - 0x6f, 0x69, 0x6e, 0x62, 0x61, 0x73, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x43, - 0x6f, 0x69, 0x6e, 0x62, 0x61, 0x73, 0x65, 0x22, 0x9c, 0x01, 0x0a, 0x0c, 0x45, 0x78, 0x74, 0x52, - 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x4d, 0x73, 0x67, 0x12, 0x32, 0x0a, 0x06, 0x68, 0x65, 0x61, 0x64, - 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, - 0x61, 0x74, 0x65, 0x64, 0x2e, 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x48, 0x65, 0x61, 0x64, 0x65, - 0x72, 0x4d, 0x73, 0x67, 0x52, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x24, 0x0a, 0x0d, - 0x62, 0x61, 0x74, 0x63, 0x68, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x62, 0x61, 0x74, 0x63, 0x68, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, - 0x64, 0x73, 0x12, 0x32, 0x0a, 0x14, 0x63, 0x61, 0x6c, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x52, 0x6f, - 0x6c, 0x6c, 0x75, 0x70, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, - 0x52, 0x14, 0x63, 0x61, 0x6c, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, - 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0xdb, 0x02, 0x0a, 0x0f, 0x52, 0x6f, 0x6c, 0x6c, 0x75, - 0x70, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4d, 0x73, 0x67, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x61, - 0x72, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, - 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x2c, 0x0a, 0x11, 0x43, 0x6f, - 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x31, 0x48, 0x65, 0x61, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x11, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x4c, 0x31, 0x48, 0x65, 0x61, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x50, 0x72, 0x6f, 0x6f, - 0x66, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x50, - 0x72, 0x6f, 0x6f, 0x66, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x4e, 0x75, - 0x6d, 0x62, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x4e, 0x75, 0x6d, 0x62, - 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x04, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, - 0x65, 0x49, 0x44, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x45, 0x6e, 0x63, 0x6c, 0x61, - 0x76, 0x65, 0x49, 0x44, 0x12, 0x48, 0x0a, 0x12, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x61, - 0x69, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x18, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x43, 0x72, 0x6f, - 0x73, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x4d, 0x73, 0x67, 0x52, 0x12, 0x43, 0x72, 0x6f, 0x73, - 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x12, 0x1c, - 0x0a, 0x09, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x09, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x26, 0x0a, 0x0e, - 0x4c, 0x61, 0x73, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x53, 0x65, 0x71, 0x4e, 0x6f, 0x18, 0x09, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x4c, 0x61, 0x73, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x53, - 0x65, 0x71, 0x4e, 0x6f, 0x22, 0xc9, 0x01, 0x0a, 0x11, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x73, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x65, - 0x63, 0x72, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x53, 0x65, 0x63, 0x72, - 0x65, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x72, 0x49, - 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x65, 0x72, 0x49, 0x44, 0x12, 0x1e, 0x0a, 0x0a, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x65, 0x72, - 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, - 0x65, 0x72, 0x49, 0x44, 0x12, 0x20, 0x0a, 0x0b, 0x48, 0x6f, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x48, 0x6f, 0x73, 0x74, 0x41, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, - 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, - 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, - 0x22, 0x61, 0x0a, 0x0d, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x4d, 0x73, - 0x67, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x63, - 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x72, 0x65, - 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6e, 0x74, 0x72, - 0x61, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x63, 0x6f, 0x6e, 0x74, 0x72, - 0x61, 0x63, 0x74, 0x32, 0xb7, 0x15, 0x0a, 0x0c, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x3f, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, - 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, - 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4e, 0x0a, 0x0b, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, - 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, - 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x57, 0x0a, 0x0e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, - 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x20, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, - 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, - 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x67, 0x65, 0x6e, 0x65, - 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x53, 0x65, - 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4e, - 0x0a, 0x0b, 0x49, 0x6e, 0x69, 0x74, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x12, 0x1d, 0x2e, + 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x40, 0x0a, 0x1b, + 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x49, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x72, 0x6f, + 0x73, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x48, 0x61, 0x73, 0x68, 0x18, 0x0f, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x1b, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x49, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, + 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x48, 0x61, 0x73, 0x68, 0x12, 0x48, + 0x0a, 0x12, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x73, 0x18, 0x10, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x65, 0x6e, + 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x61, 0x69, + 0x6e, 0x4d, 0x73, 0x67, 0x52, 0x12, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x54, 0x72, 0x61, 0x6e, + 0x73, 0x66, 0x65, 0x72, 0x54, 0x72, 0x65, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x54, 0x72, 0x65, 0x65, 0x12, 0x1a, 0x0a, 0x08, + 0x43, 0x6f, 0x69, 0x6e, 0x62, 0x61, 0x73, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, + 0x43, 0x6f, 0x69, 0x6e, 0x62, 0x61, 0x73, 0x65, 0x22, 0x9c, 0x01, 0x0a, 0x0c, 0x45, 0x78, 0x74, + 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x4d, 0x73, 0x67, 0x12, 0x32, 0x0a, 0x06, 0x68, 0x65, 0x61, + 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x65, 0x6e, 0x65, + 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x48, 0x65, 0x61, 0x64, + 0x65, 0x72, 0x4d, 0x73, 0x67, 0x52, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x24, 0x0a, + 0x0d, 0x62, 0x61, 0x74, 0x63, 0x68, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x62, 0x61, 0x74, 0x63, 0x68, 0x50, 0x61, 0x79, 0x6c, 0x6f, + 0x61, 0x64, 0x73, 0x12, 0x32, 0x0a, 0x14, 0x63, 0x61, 0x6c, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x52, + 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x14, 0x63, 0x61, 0x6c, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x52, 0x6f, 0x6c, 0x6c, 0x75, + 0x70, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0xdb, 0x02, 0x0a, 0x0f, 0x52, 0x6f, 0x6c, 0x6c, + 0x75, 0x70, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4d, 0x73, 0x67, 0x12, 0x1e, 0x0a, 0x0a, 0x50, + 0x61, 0x72, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x0a, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x2c, 0x0a, 0x11, 0x43, + 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x31, 0x48, 0x65, 0x61, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x11, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x4c, 0x31, 0x48, 0x65, 0x61, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x50, 0x72, 0x6f, + 0x6f, 0x66, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, + 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x4e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x4e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x04, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x45, 0x6e, 0x63, 0x6c, 0x61, + 0x76, 0x65, 0x49, 0x44, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x45, 0x6e, 0x63, 0x6c, + 0x61, 0x76, 0x65, 0x49, 0x44, 0x12, 0x48, 0x0a, 0x12, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43, 0x68, + 0x61, 0x69, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x43, 0x72, + 0x6f, 0x73, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x4d, 0x73, 0x67, 0x52, 0x12, 0x43, 0x72, 0x6f, + 0x73, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x12, + 0x1c, 0x0a, 0x09, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x09, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x26, 0x0a, + 0x0e, 0x4c, 0x61, 0x73, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x53, 0x65, 0x71, 0x4e, 0x6f, 0x18, + 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x4c, 0x61, 0x73, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, + 0x53, 0x65, 0x71, 0x4e, 0x6f, 0x22, 0xc9, 0x01, 0x0a, 0x11, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x73, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x53, + 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x53, 0x65, 0x63, + 0x72, 0x65, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x72, + 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x65, 0x72, 0x49, 0x44, 0x12, 0x1e, 0x0a, 0x0a, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x65, + 0x72, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x41, 0x74, 0x74, 0x65, 0x73, + 0x74, 0x65, 0x72, 0x49, 0x44, 0x12, 0x20, 0x0a, 0x0b, 0x48, 0x6f, 0x73, 0x74, 0x41, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x48, 0x6f, 0x73, 0x74, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, + 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, + 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, + 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, + 0x72, 0x22, 0x61, 0x0a, 0x0d, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x4d, + 0x73, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, + 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x72, + 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6e, 0x74, + 0x72, 0x61, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x63, 0x6f, 0x6e, 0x74, + 0x72, 0x61, 0x63, 0x74, 0x32, 0xc0, 0x14, 0x0a, 0x0c, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, + 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x3f, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, + 0x18, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x67, 0x65, 0x6e, 0x65, + 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4e, 0x0a, 0x0b, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, + 0x64, 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, + 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x57, 0x0a, 0x0e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, + 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x20, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, + 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, + 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x67, 0x65, 0x6e, + 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x53, + 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, + 0x4e, 0x0a, 0x0b, 0x49, 0x6e, 0x69, 0x74, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x12, 0x1d, + 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x45, + 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x45, 0x6e, - 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x67, - 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x45, 0x6e, 0x63, - 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x48, - 0x0a, 0x09, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x49, 0x44, 0x12, 0x1b, 0x2e, 0x67, 0x65, - 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x49, - 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, - 0x61, 0x74, 0x65, 0x64, 0x2e, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x49, 0x44, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x50, 0x0a, 0x0d, 0x53, 0x75, 0x62, 0x6d, - 0x69, 0x74, 0x4c, 0x31, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x1d, 0x2e, 0x67, 0x65, 0x6e, 0x65, + 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, + 0x48, 0x0a, 0x09, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x49, 0x44, 0x12, 0x1b, 0x2e, 0x67, + 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, + 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x67, 0x65, 0x6e, 0x65, + 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x49, 0x44, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x50, 0x0a, 0x0d, 0x53, 0x75, 0x62, + 0x6d, 0x69, 0x74, 0x4c, 0x31, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x1d, 0x2e, 0x67, 0x65, 0x6e, + 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, 0x6c, 0x6f, + 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, - 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x45, 0x0a, 0x08, 0x53, 0x75, - 0x62, 0x6d, 0x69, 0x74, 0x54, 0x78, 0x12, 0x1a, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, - 0x65, 0x64, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, - 0x75, 0x62, 0x6d, 0x69, 0x74, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x12, 0x4e, 0x0a, 0x0b, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, - 0x12, 0x1d, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x75, 0x62, - 0x6d, 0x69, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x1e, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x75, 0x62, 0x6d, - 0x69, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x12, 0x42, 0x0a, 0x07, 0x4f, 0x62, 0x73, 0x43, 0x61, 0x6c, 0x6c, 0x12, 0x19, 0x2e, 0x67, - 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x4f, 0x62, 0x73, 0x43, 0x61, 0x6c, 0x6c, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, - 0x74, 0x65, 0x64, 0x2e, 0x4f, 0x62, 0x73, 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x66, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x25, 0x2e, 0x67, - 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, - 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, - 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x39, 0x0a, - 0x04, 0x53, 0x74, 0x6f, 0x70, 0x12, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, - 0x64, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, - 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x57, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x2e, 0x67, 0x65, 0x6e, - 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x67, - 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x12, 0x6c, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x12, 0x27, 0x2e, 0x67, 0x65, 0x6e, - 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, - 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x63, 0x65, 0x69, 0x70, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, - 0x4b, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x1c, 0x2e, - 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, - 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x67, 0x65, - 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, - 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x42, 0x0a, 0x07, - 0x47, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x19, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, - 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, - 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0x48, 0x0a, 0x09, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x12, 0x1b, 0x2e, - 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, - 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x67, 0x65, 0x6e, - 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4e, 0x0a, 0x0b, 0x55, 0x6e, - 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x12, 0x1d, 0x2e, 0x67, 0x65, 0x6e, 0x65, + 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x45, 0x0a, 0x08, 0x53, + 0x75, 0x62, 0x6d, 0x69, 0x74, 0x54, 0x78, 0x12, 0x1a, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, + 0x74, 0x65, 0x64, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, + 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x00, 0x12, 0x4e, 0x0a, 0x0b, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, 0x61, 0x74, 0x63, + 0x68, 0x12, 0x1d, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x75, + 0x62, 0x6d, 0x69, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x1e, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x75, 0x62, + 0x6d, 0x69, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x00, 0x12, 0x42, 0x0a, 0x07, 0x4f, 0x62, 0x73, 0x43, 0x61, 0x6c, 0x6c, 0x12, 0x19, 0x2e, + 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x4f, 0x62, 0x73, 0x43, 0x61, 0x6c, + 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, + 0x61, 0x74, 0x65, 0x64, 0x2e, 0x4f, 0x62, 0x73, 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x66, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x25, 0x2e, + 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, + 0x2e, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, + 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x39, + 0x0a, 0x04, 0x53, 0x74, 0x6f, 0x70, 0x12, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, + 0x65, 0x64, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, + 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x57, 0x0a, 0x0e, 0x47, 0x65, 0x74, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x2e, 0x67, 0x65, + 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, + 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x00, 0x12, 0x6c, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x12, 0x27, 0x2e, 0x67, 0x65, + 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, + 0x2e, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, + 0x12, 0x4b, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x1c, + 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x61, + 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x67, + 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, + 0x6e, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x42, 0x0a, + 0x07, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x19, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, + 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, + 0x47, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x00, 0x12, 0x48, 0x0a, 0x09, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x12, 0x1b, + 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, + 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x67, 0x65, + 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4e, 0x0a, 0x0b, 0x55, + 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x12, 0x1d, 0x2e, 0x67, 0x65, 0x6e, + 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x55, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, + 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x55, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, - 0x61, 0x74, 0x65, 0x64, 0x2e, 0x55, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4e, 0x0a, 0x0b, 0x45, 0x73, - 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x47, 0x61, 0x73, 0x12, 0x1d, 0x2e, 0x67, 0x65, 0x6e, 0x65, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4e, 0x0a, 0x0b, 0x45, + 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x47, 0x61, 0x73, 0x12, 0x1d, 0x2e, 0x67, 0x65, 0x6e, + 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x47, + 0x61, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x47, 0x61, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, - 0x61, 0x74, 0x65, 0x64, 0x2e, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x47, 0x61, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x42, 0x0a, 0x07, 0x47, 0x65, - 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x19, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, - 0x64, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1a, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, - 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x45, - 0x0a, 0x0b, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x14, 0x2e, - 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x41, - 0x72, 0x67, 0x73, 0x1a, 0x1e, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, - 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x45, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x42, 0x61, 0x74, 0x63, - 0x68, 0x12, 0x1a, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, - 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, - 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x61, 0x74, - 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x53, 0x0a, 0x0f, - 0x47, 0x65, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x42, 0x79, 0x53, 0x65, 0x71, 0x4e, 0x6f, 0x12, - 0x21, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x42, - 0x61, 0x74, 0x63, 0x68, 0x42, 0x79, 0x53, 0x65, 0x71, 0x4e, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, - 0x65, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x12, 0x54, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x44, 0x61, - 0x74, 0x61, 0x12, 0x1f, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, - 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, - 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4e, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, 0x1d, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x42, 0x0a, 0x07, 0x47, + 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x19, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, + 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x1a, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, + 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, + 0x45, 0x0a, 0x0b, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x14, + 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x41, 0x72, 0x67, 0x73, 0x1a, 0x1e, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, + 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x45, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x42, 0x61, 0x74, + 0x63, 0x68, 0x12, 0x1a, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, + 0x65, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, + 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x61, + 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x53, 0x0a, + 0x0f, 0x47, 0x65, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x42, 0x79, 0x53, 0x65, 0x71, 0x4e, 0x6f, + 0x12, 0x21, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, + 0x42, 0x61, 0x74, 0x63, 0x68, 0x42, 0x79, 0x53, 0x65, 0x71, 0x4e, 0x6f, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, + 0x47, 0x65, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x00, 0x12, 0x54, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x44, + 0x61, 0x74, 0x61, 0x12, 0x1f, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, + 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, + 0x2e, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4e, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, 0x1d, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, + 0x74, 0x65, 0x64, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, - 0x64, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x51, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x12, 0x1e, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, - 0x74, 0x65, 0x64, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, - 0x74, 0x65, 0x64, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6c, 0x0a, 0x15, 0x44, 0x65, - 0x62, 0x75, 0x67, 0x54, 0x72, 0x61, 0x63, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, - 0x44, 0x65, 0x62, 0x75, 0x67, 0x54, 0x72, 0x61, 0x63, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x67, - 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x44, 0x65, 0x62, 0x75, 0x67, 0x54, 0x72, - 0x61, 0x63, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x0f, 0x53, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x4c, 0x32, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x12, 0x21, 0x2e, 0x67, 0x65, - 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4c, 0x32, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, - 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x45, 0x6e, 0x63, 0x6f, 0x64, - 0x65, 0x64, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x30, 0x01, 0x12, 0x6f, 0x0a, 0x16, 0x44, 0x65, 0x62, 0x75, 0x67, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x4c, 0x6f, 0x67, 0x52, 0x65, 0x6c, 0x65, 0x76, 0x61, 0x6e, 0x63, 0x79, 0x12, 0x28, - 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x44, 0x65, 0x62, 0x75, 0x67, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x67, 0x52, 0x65, 0x6c, 0x65, 0x76, 0x61, 0x6e, 0x63, - 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, - 0x61, 0x74, 0x65, 0x64, 0x2e, 0x44, 0x65, 0x62, 0x75, 0x67, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, - 0x6f, 0x67, 0x52, 0x65, 0x6c, 0x65, 0x76, 0x61, 0x6e, 0x63, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6c, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x74, 0x61, - 0x6c, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x27, - 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x6f, - 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, - 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x74, - 0x72, 0x61, 0x63, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x12, 0x69, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, - 0x74, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x26, 0x2e, 0x67, 0x65, - 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, - 0x70, 0x74, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, - 0x47, 0x65, 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x75, - 0x0a, 0x18, 0x47, 0x65, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2a, 0x2e, 0x67, 0x65, 0x6e, - 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, - 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x66, 0x0a, 0x13, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, - 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x25, 0x2e, 0x67, - 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, - 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, - 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x17, 0x5a, - 0x15, 0x65, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x67, 0x65, 0x6e, - 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x51, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x12, 0x1e, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, + 0x61, 0x74, 0x65, 0x64, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x6c, 0x75, + 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, + 0x61, 0x74, 0x65, 0x64, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x6c, 0x75, + 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6c, 0x0a, 0x15, 0x44, + 0x65, 0x62, 0x75, 0x67, 0x54, 0x72, 0x61, 0x63, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, + 0x2e, 0x44, 0x65, 0x62, 0x75, 0x67, 0x54, 0x72, 0x61, 0x63, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, + 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x44, 0x65, 0x62, 0x75, 0x67, 0x54, + 0x72, 0x61, 0x63, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x0f, 0x53, 0x74, 0x72, + 0x65, 0x61, 0x6d, 0x4c, 0x32, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x12, 0x21, 0x2e, 0x67, + 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4c, + 0x32, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x20, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x45, 0x6e, 0x63, 0x6f, + 0x64, 0x65, 0x64, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x6f, 0x0a, 0x16, 0x44, 0x65, 0x62, 0x75, 0x67, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x67, 0x52, 0x65, 0x6c, 0x65, 0x76, 0x61, 0x6e, 0x63, 0x79, 0x12, + 0x28, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x44, 0x65, 0x62, 0x75, + 0x67, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x67, 0x52, 0x65, 0x6c, 0x65, 0x76, 0x61, 0x6e, + 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x67, 0x65, 0x6e, 0x65, + 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x44, 0x65, 0x62, 0x75, 0x67, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x4c, 0x6f, 0x67, 0x52, 0x65, 0x6c, 0x65, 0x76, 0x61, 0x6e, 0x63, 0x79, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6c, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x74, + 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, + 0x27, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x54, + 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x43, 0x6f, 0x75, 0x6e, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, + 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x6e, + 0x74, 0x72, 0x61, 0x63, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x69, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, + 0x70, 0x74, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x26, 0x2e, 0x67, + 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x63, 0x65, + 0x69, 0x70, 0x74, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, + 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x73, 0x42, 0x79, 0x41, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, + 0x66, 0x0a, 0x13, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x25, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, + 0x65, 0x64, 0x2e, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, + 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, + 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x17, 0x5a, 0x15, 0x65, 0x6e, 0x63, 0x6c, 0x61, + 0x76, 0x65, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -4929,201 +4805,195 @@ func file_enclave_proto_rawDescGZIP() []byte { return file_enclave_proto_rawDescData } -var file_enclave_proto_msgTypes = make([]protoimpl.MessageInfo, 78) +var file_enclave_proto_msgTypes = make([]protoimpl.MessageInfo, 76) var file_enclave_proto_goTypes = []interface{}{ - (*GetPublicTransactionDataRequest)(nil), // 0: generated.GetPublicTransactionDataRequest - (*GetPublicTransactionDataResponse)(nil), // 1: generated.GetPublicTransactionDataResponse - (*EnclavePublicConfigRequest)(nil), // 2: generated.EnclavePublicConfigRequest - (*EnclavePublicConfigResponse)(nil), // 3: generated.EnclavePublicConfigResponse - (*GetReceiptsByAddressRequest)(nil), // 4: generated.GetReceiptsByAddressRequest - (*GetReceiptsByAddressResponse)(nil), // 5: generated.GetReceiptsByAddressResponse - (*GetBatchRequest)(nil), // 6: generated.GetBatchRequest - (*GetBatchBySeqNoRequest)(nil), // 7: generated.GetBatchBySeqNoRequest - (*GetBatchResponse)(nil), // 8: generated.GetBatchResponse - (*GetRollupDataRequest)(nil), // 9: generated.GetRollupDataRequest - (*GetRollupDataResponse)(nil), // 10: generated.GetRollupDataResponse - (*PublicRollupDataMsg)(nil), // 11: generated.PublicRollupDataMsg - (*StreamL2UpdatesRequest)(nil), // 12: generated.StreamL2UpdatesRequest - (*EncodedUpdateResponse)(nil), // 13: generated.EncodedUpdateResponse - (*Pagination)(nil), // 14: generated.Pagination - (*SystemError)(nil), // 15: generated.SystemError - (*GetTotalContractCountRequest)(nil), // 16: generated.GetTotalContractCountRequest - (*GetTotalContractCountResponse)(nil), // 17: generated.GetTotalContractCountResponse - (*DebugEventLogRelevancyRequest)(nil), // 18: generated.DebugEventLogRelevancyRequest - (*DebugEventLogRelevancyResponse)(nil), // 19: generated.DebugEventLogRelevancyResponse - (*DebugTraceTransactionRequest)(nil), // 20: generated.DebugTraceTransactionRequest - (*DebugTraceTransactionResponse)(nil), // 21: generated.DebugTraceTransactionResponse - (*CreateBatchRequest)(nil), // 22: generated.CreateBatchRequest - (*CreateBatchResponse)(nil), // 23: generated.CreateBatchResponse - (*CreateRollupRequest)(nil), // 24: generated.CreateRollupRequest - (*CreateRollupResponse)(nil), // 25: generated.CreateRollupResponse - (*StatusRequest)(nil), // 26: generated.StatusRequest - (*StatusResponse)(nil), // 27: generated.StatusResponse - (*AttestationRequest)(nil), // 28: generated.AttestationRequest - (*AttestationResponse)(nil), // 29: generated.AttestationResponse - (*GenerateSecretRequest)(nil), // 30: generated.GenerateSecretRequest - (*GenerateSecretResponse)(nil), // 31: generated.GenerateSecretResponse - (*InitEnclaveRequest)(nil), // 32: generated.InitEnclaveRequest - (*InitEnclaveResponse)(nil), // 33: generated.InitEnclaveResponse - (*EnclaveIDRequest)(nil), // 34: generated.EnclaveIDRequest - (*EnclaveIDResponse)(nil), // 35: generated.EnclaveIDResponse - (*StartRequest)(nil), // 36: generated.StartRequest - (*StartResponse)(nil), // 37: generated.StartResponse - (*SubmitBlockRequest)(nil), // 38: generated.SubmitBlockRequest - (*SubmitBlockResponse)(nil), // 39: generated.SubmitBlockResponse - (*SubmitTxRequest)(nil), // 40: generated.SubmitTxRequest - (*SubmitTxResponse)(nil), // 41: generated.SubmitTxResponse - (*SubmitBatchRequest)(nil), // 42: generated.SubmitBatchRequest - (*SubmitBatchResponse)(nil), // 43: generated.SubmitBatchResponse - (*ObsCallRequest)(nil), // 44: generated.ObsCallRequest - (*ObsCallResponse)(nil), // 45: generated.ObsCallResponse - (*GetTransactionCountRequest)(nil), // 46: generated.GetTransactionCountRequest - (*GetTransactionCountResponse)(nil), // 47: generated.GetTransactionCountResponse - (*StopRequest)(nil), // 48: generated.StopRequest - (*StopResponse)(nil), // 49: generated.StopResponse - (*GetTransactionRequest)(nil), // 50: generated.GetTransactionRequest - (*GetTransactionResponse)(nil), // 51: generated.GetTransactionResponse - (*GetTransactionReceiptRequest)(nil), // 52: generated.GetTransactionReceiptRequest - (*GetTransactionReceiptResponse)(nil), // 53: generated.GetTransactionReceiptResponse - (*GetBalanceRequest)(nil), // 54: generated.GetBalanceRequest - (*GetBalanceResponse)(nil), // 55: generated.GetBalanceResponse - (*GetCodeRequest)(nil), // 56: generated.GetCodeRequest - (*GetCodeResponse)(nil), // 57: generated.GetCodeResponse - (*SubscribeRequest)(nil), // 58: generated.SubscribeRequest - (*SubscribeResponse)(nil), // 59: generated.SubscribeResponse - (*UnsubscribeRequest)(nil), // 60: generated.UnsubscribeRequest - (*UnsubscribeResponse)(nil), // 61: generated.UnsubscribeResponse - (*EstimateGasRequest)(nil), // 62: generated.EstimateGasRequest - (*EstimateGasResponse)(nil), // 63: generated.EstimateGasResponse - (*GetLogsRequest)(nil), // 64: generated.GetLogsRequest - (*GetLogsResponse)(nil), // 65: generated.GetLogsResponse - (*HealthCheckResponse)(nil), // 66: generated.HealthCheckResponse - (*EmptyArgs)(nil), // 67: generated.EmptyArgs - (*AttestationReportMsg)(nil), // 68: generated.AttestationReportMsg - (*BlockSubmissionResponseMsg)(nil), // 69: generated.BlockSubmissionResponseMsg - (*BlockSubmissionErrorMsg)(nil), // 70: generated.BlockSubmissionErrorMsg - (*CrossChainMsg)(nil), // 71: generated.CrossChainMsg - (*ExtBatchMsg)(nil), // 72: generated.ExtBatchMsg - (*BatchHeaderMsg)(nil), // 73: generated.BatchHeaderMsg - (*ExtRollupMsg)(nil), // 74: generated.ExtRollupMsg - (*RollupHeaderMsg)(nil), // 75: generated.RollupHeaderMsg - (*SecretResponseMsg)(nil), // 76: generated.SecretResponseMsg - (*WithdrawalMsg)(nil), // 77: generated.WithdrawalMsg + (*EnclavePublicConfigRequest)(nil), // 0: generated.EnclavePublicConfigRequest + (*EnclavePublicConfigResponse)(nil), // 1: generated.EnclavePublicConfigResponse + (*GetReceiptsByAddressRequest)(nil), // 2: generated.GetReceiptsByAddressRequest + (*GetReceiptsByAddressResponse)(nil), // 3: generated.GetReceiptsByAddressResponse + (*GetBatchRequest)(nil), // 4: generated.GetBatchRequest + (*GetBatchBySeqNoRequest)(nil), // 5: generated.GetBatchBySeqNoRequest + (*GetBatchResponse)(nil), // 6: generated.GetBatchResponse + (*GetRollupDataRequest)(nil), // 7: generated.GetRollupDataRequest + (*GetRollupDataResponse)(nil), // 8: generated.GetRollupDataResponse + (*PublicRollupDataMsg)(nil), // 9: generated.PublicRollupDataMsg + (*StreamL2UpdatesRequest)(nil), // 10: generated.StreamL2UpdatesRequest + (*EncodedUpdateResponse)(nil), // 11: generated.EncodedUpdateResponse + (*Pagination)(nil), // 12: generated.Pagination + (*SystemError)(nil), // 13: generated.SystemError + (*GetTotalContractCountRequest)(nil), // 14: generated.GetTotalContractCountRequest + (*GetTotalContractCountResponse)(nil), // 15: generated.GetTotalContractCountResponse + (*DebugEventLogRelevancyRequest)(nil), // 16: generated.DebugEventLogRelevancyRequest + (*DebugEventLogRelevancyResponse)(nil), // 17: generated.DebugEventLogRelevancyResponse + (*DebugTraceTransactionRequest)(nil), // 18: generated.DebugTraceTransactionRequest + (*DebugTraceTransactionResponse)(nil), // 19: generated.DebugTraceTransactionResponse + (*CreateBatchRequest)(nil), // 20: generated.CreateBatchRequest + (*CreateBatchResponse)(nil), // 21: generated.CreateBatchResponse + (*CreateRollupRequest)(nil), // 22: generated.CreateRollupRequest + (*CreateRollupResponse)(nil), // 23: generated.CreateRollupResponse + (*StatusRequest)(nil), // 24: generated.StatusRequest + (*StatusResponse)(nil), // 25: generated.StatusResponse + (*AttestationRequest)(nil), // 26: generated.AttestationRequest + (*AttestationResponse)(nil), // 27: generated.AttestationResponse + (*GenerateSecretRequest)(nil), // 28: generated.GenerateSecretRequest + (*GenerateSecretResponse)(nil), // 29: generated.GenerateSecretResponse + (*InitEnclaveRequest)(nil), // 30: generated.InitEnclaveRequest + (*InitEnclaveResponse)(nil), // 31: generated.InitEnclaveResponse + (*EnclaveIDRequest)(nil), // 32: generated.EnclaveIDRequest + (*EnclaveIDResponse)(nil), // 33: generated.EnclaveIDResponse + (*StartRequest)(nil), // 34: generated.StartRequest + (*StartResponse)(nil), // 35: generated.StartResponse + (*SubmitBlockRequest)(nil), // 36: generated.SubmitBlockRequest + (*SubmitBlockResponse)(nil), // 37: generated.SubmitBlockResponse + (*SubmitTxRequest)(nil), // 38: generated.SubmitTxRequest + (*SubmitTxResponse)(nil), // 39: generated.SubmitTxResponse + (*SubmitBatchRequest)(nil), // 40: generated.SubmitBatchRequest + (*SubmitBatchResponse)(nil), // 41: generated.SubmitBatchResponse + (*ObsCallRequest)(nil), // 42: generated.ObsCallRequest + (*ObsCallResponse)(nil), // 43: generated.ObsCallResponse + (*GetTransactionCountRequest)(nil), // 44: generated.GetTransactionCountRequest + (*GetTransactionCountResponse)(nil), // 45: generated.GetTransactionCountResponse + (*StopRequest)(nil), // 46: generated.StopRequest + (*StopResponse)(nil), // 47: generated.StopResponse + (*GetTransactionRequest)(nil), // 48: generated.GetTransactionRequest + (*GetTransactionResponse)(nil), // 49: generated.GetTransactionResponse + (*GetTransactionReceiptRequest)(nil), // 50: generated.GetTransactionReceiptRequest + (*GetTransactionReceiptResponse)(nil), // 51: generated.GetTransactionReceiptResponse + (*GetBalanceRequest)(nil), // 52: generated.GetBalanceRequest + (*GetBalanceResponse)(nil), // 53: generated.GetBalanceResponse + (*GetCodeRequest)(nil), // 54: generated.GetCodeRequest + (*GetCodeResponse)(nil), // 55: generated.GetCodeResponse + (*SubscribeRequest)(nil), // 56: generated.SubscribeRequest + (*SubscribeResponse)(nil), // 57: generated.SubscribeResponse + (*UnsubscribeRequest)(nil), // 58: generated.UnsubscribeRequest + (*UnsubscribeResponse)(nil), // 59: generated.UnsubscribeResponse + (*EstimateGasRequest)(nil), // 60: generated.EstimateGasRequest + (*EstimateGasResponse)(nil), // 61: generated.EstimateGasResponse + (*GetLogsRequest)(nil), // 62: generated.GetLogsRequest + (*GetLogsResponse)(nil), // 63: generated.GetLogsResponse + (*HealthCheckResponse)(nil), // 64: generated.HealthCheckResponse + (*EmptyArgs)(nil), // 65: generated.EmptyArgs + (*AttestationReportMsg)(nil), // 66: generated.AttestationReportMsg + (*BlockSubmissionResponseMsg)(nil), // 67: generated.BlockSubmissionResponseMsg + (*BlockSubmissionErrorMsg)(nil), // 68: generated.BlockSubmissionErrorMsg + (*CrossChainMsg)(nil), // 69: generated.CrossChainMsg + (*ExtBatchMsg)(nil), // 70: generated.ExtBatchMsg + (*BatchHeaderMsg)(nil), // 71: generated.BatchHeaderMsg + (*ExtRollupMsg)(nil), // 72: generated.ExtRollupMsg + (*RollupHeaderMsg)(nil), // 73: generated.RollupHeaderMsg + (*SecretResponseMsg)(nil), // 74: generated.SecretResponseMsg + (*WithdrawalMsg)(nil), // 75: generated.WithdrawalMsg } var file_enclave_proto_depIdxs = []int32{ - 14, // 0: generated.GetPublicTransactionDataRequest.pagination:type_name -> generated.Pagination - 15, // 1: generated.GetPublicTransactionDataResponse.systemError:type_name -> generated.SystemError - 15, // 2: generated.EnclavePublicConfigResponse.systemError:type_name -> generated.SystemError - 15, // 3: generated.GetReceiptsByAddressResponse.systemError:type_name -> generated.SystemError - 15, // 4: generated.GetBatchResponse.systemError:type_name -> generated.SystemError - 11, // 5: generated.GetRollupDataResponse.msg:type_name -> generated.PublicRollupDataMsg - 15, // 6: generated.GetRollupDataResponse.systemError:type_name -> generated.SystemError - 15, // 7: generated.GetTotalContractCountResponse.systemError:type_name -> generated.SystemError - 15, // 8: generated.DebugEventLogRelevancyResponse.systemError:type_name -> generated.SystemError - 15, // 9: generated.DebugTraceTransactionResponse.systemError:type_name -> generated.SystemError - 74, // 10: generated.CreateRollupResponse.msg:type_name -> generated.ExtRollupMsg - 15, // 11: generated.CreateRollupResponse.systemError:type_name -> generated.SystemError - 15, // 12: generated.StatusResponse.systemError:type_name -> generated.SystemError - 68, // 13: generated.AttestationResponse.attestationReportMsg:type_name -> generated.AttestationReportMsg - 15, // 14: generated.AttestationResponse.systemError:type_name -> generated.SystemError - 15, // 15: generated.GenerateSecretResponse.systemError:type_name -> generated.SystemError - 15, // 16: generated.InitEnclaveResponse.systemError:type_name -> generated.SystemError - 15, // 17: generated.EnclaveIDResponse.systemError:type_name -> generated.SystemError - 15, // 18: generated.StartResponse.systemError:type_name -> generated.SystemError - 69, // 19: generated.SubmitBlockResponse.blockSubmissionResponse:type_name -> generated.BlockSubmissionResponseMsg - 15, // 20: generated.SubmitBlockResponse.systemError:type_name -> generated.SystemError - 15, // 21: generated.SubmitTxResponse.systemError:type_name -> generated.SystemError - 72, // 22: generated.SubmitBatchRequest.batch:type_name -> generated.ExtBatchMsg - 15, // 23: generated.SubmitBatchResponse.systemError:type_name -> generated.SystemError - 15, // 24: generated.ObsCallResponse.systemError:type_name -> generated.SystemError - 15, // 25: generated.GetTransactionCountResponse.systemError:type_name -> generated.SystemError - 15, // 26: generated.StopResponse.systemError:type_name -> generated.SystemError - 15, // 27: generated.GetTransactionResponse.systemError:type_name -> generated.SystemError - 15, // 28: generated.GetTransactionReceiptResponse.systemError:type_name -> generated.SystemError - 15, // 29: generated.GetBalanceResponse.systemError:type_name -> generated.SystemError - 15, // 30: generated.GetCodeResponse.systemError:type_name -> generated.SystemError - 15, // 31: generated.SubscribeResponse.systemError:type_name -> generated.SystemError - 15, // 32: generated.UnsubscribeResponse.systemError:type_name -> generated.SystemError - 15, // 33: generated.EstimateGasResponse.systemError:type_name -> generated.SystemError - 15, // 34: generated.GetLogsResponse.systemError:type_name -> generated.SystemError - 15, // 35: generated.HealthCheckResponse.systemError:type_name -> generated.SystemError - 15, // 36: generated.AttestationReportMsg.systemError:type_name -> generated.SystemError - 76, // 37: generated.BlockSubmissionResponseMsg.producedSecretResponses:type_name -> generated.SecretResponseMsg - 70, // 38: generated.BlockSubmissionResponseMsg.error:type_name -> generated.BlockSubmissionErrorMsg - 73, // 39: generated.ExtBatchMsg.header:type_name -> generated.BatchHeaderMsg - 71, // 40: generated.BatchHeaderMsg.CrossChainMessages:type_name -> generated.CrossChainMsg - 75, // 41: generated.ExtRollupMsg.header:type_name -> generated.RollupHeaderMsg - 71, // 42: generated.RollupHeaderMsg.CrossChainMessages:type_name -> generated.CrossChainMsg - 15, // 43: generated.SecretResponseMsg.systemError:type_name -> generated.SystemError - 26, // 44: generated.EnclaveProto.Status:input_type -> generated.StatusRequest - 28, // 45: generated.EnclaveProto.Attestation:input_type -> generated.AttestationRequest - 30, // 46: generated.EnclaveProto.GenerateSecret:input_type -> generated.GenerateSecretRequest - 32, // 47: generated.EnclaveProto.InitEnclave:input_type -> generated.InitEnclaveRequest - 34, // 48: generated.EnclaveProto.EnclaveID:input_type -> generated.EnclaveIDRequest - 38, // 49: generated.EnclaveProto.SubmitL1Block:input_type -> generated.SubmitBlockRequest - 40, // 50: generated.EnclaveProto.SubmitTx:input_type -> generated.SubmitTxRequest - 42, // 51: generated.EnclaveProto.SubmitBatch:input_type -> generated.SubmitBatchRequest - 44, // 52: generated.EnclaveProto.ObsCall:input_type -> generated.ObsCallRequest - 46, // 53: generated.EnclaveProto.GetTransactionCount:input_type -> generated.GetTransactionCountRequest - 48, // 54: generated.EnclaveProto.Stop:input_type -> generated.StopRequest - 50, // 55: generated.EnclaveProto.GetTransaction:input_type -> generated.GetTransactionRequest - 52, // 56: generated.EnclaveProto.GetTransactionReceipt:input_type -> generated.GetTransactionReceiptRequest - 54, // 57: generated.EnclaveProto.GetBalance:input_type -> generated.GetBalanceRequest - 56, // 58: generated.EnclaveProto.GetCode:input_type -> generated.GetCodeRequest - 58, // 59: generated.EnclaveProto.Subscribe:input_type -> generated.SubscribeRequest - 60, // 60: generated.EnclaveProto.Unsubscribe:input_type -> generated.UnsubscribeRequest - 62, // 61: generated.EnclaveProto.EstimateGas:input_type -> generated.EstimateGasRequest - 64, // 62: generated.EnclaveProto.GetLogs:input_type -> generated.GetLogsRequest - 67, // 63: generated.EnclaveProto.HealthCheck:input_type -> generated.EmptyArgs - 6, // 64: generated.EnclaveProto.GetBatch:input_type -> generated.GetBatchRequest - 7, // 65: generated.EnclaveProto.GetBatchBySeqNo:input_type -> generated.GetBatchBySeqNoRequest - 9, // 66: generated.EnclaveProto.GetRollupData:input_type -> generated.GetRollupDataRequest - 22, // 67: generated.EnclaveProto.CreateBatch:input_type -> generated.CreateBatchRequest - 24, // 68: generated.EnclaveProto.CreateRollup:input_type -> generated.CreateRollupRequest - 20, // 69: generated.EnclaveProto.DebugTraceTransaction:input_type -> generated.DebugTraceTransactionRequest - 12, // 70: generated.EnclaveProto.StreamL2Updates:input_type -> generated.StreamL2UpdatesRequest - 18, // 71: generated.EnclaveProto.DebugEventLogRelevancy:input_type -> generated.DebugEventLogRelevancyRequest - 16, // 72: generated.EnclaveProto.GetTotalContractCount:input_type -> generated.GetTotalContractCountRequest - 4, // 73: generated.EnclaveProto.GetReceiptsByAddress:input_type -> generated.GetReceiptsByAddressRequest - 0, // 74: generated.EnclaveProto.GetPublicTransactionData:input_type -> generated.GetPublicTransactionDataRequest - 2, // 75: generated.EnclaveProto.EnclavePublicConfig:input_type -> generated.EnclavePublicConfigRequest - 27, // 76: generated.EnclaveProto.Status:output_type -> generated.StatusResponse - 29, // 77: generated.EnclaveProto.Attestation:output_type -> generated.AttestationResponse - 31, // 78: generated.EnclaveProto.GenerateSecret:output_type -> generated.GenerateSecretResponse - 33, // 79: generated.EnclaveProto.InitEnclave:output_type -> generated.InitEnclaveResponse - 35, // 80: generated.EnclaveProto.EnclaveID:output_type -> generated.EnclaveIDResponse - 39, // 81: generated.EnclaveProto.SubmitL1Block:output_type -> generated.SubmitBlockResponse - 41, // 82: generated.EnclaveProto.SubmitTx:output_type -> generated.SubmitTxResponse - 43, // 83: generated.EnclaveProto.SubmitBatch:output_type -> generated.SubmitBatchResponse - 45, // 84: generated.EnclaveProto.ObsCall:output_type -> generated.ObsCallResponse - 47, // 85: generated.EnclaveProto.GetTransactionCount:output_type -> generated.GetTransactionCountResponse - 49, // 86: generated.EnclaveProto.Stop:output_type -> generated.StopResponse - 51, // 87: generated.EnclaveProto.GetTransaction:output_type -> generated.GetTransactionResponse - 53, // 88: generated.EnclaveProto.GetTransactionReceipt:output_type -> generated.GetTransactionReceiptResponse - 55, // 89: generated.EnclaveProto.GetBalance:output_type -> generated.GetBalanceResponse - 57, // 90: generated.EnclaveProto.GetCode:output_type -> generated.GetCodeResponse - 59, // 91: generated.EnclaveProto.Subscribe:output_type -> generated.SubscribeResponse - 61, // 92: generated.EnclaveProto.Unsubscribe:output_type -> generated.UnsubscribeResponse - 63, // 93: generated.EnclaveProto.EstimateGas:output_type -> generated.EstimateGasResponse - 65, // 94: generated.EnclaveProto.GetLogs:output_type -> generated.GetLogsResponse - 66, // 95: generated.EnclaveProto.HealthCheck:output_type -> generated.HealthCheckResponse - 8, // 96: generated.EnclaveProto.GetBatch:output_type -> generated.GetBatchResponse - 8, // 97: generated.EnclaveProto.GetBatchBySeqNo:output_type -> generated.GetBatchResponse - 10, // 98: generated.EnclaveProto.GetRollupData:output_type -> generated.GetRollupDataResponse - 23, // 99: generated.EnclaveProto.CreateBatch:output_type -> generated.CreateBatchResponse - 25, // 100: generated.EnclaveProto.CreateRollup:output_type -> generated.CreateRollupResponse - 21, // 101: generated.EnclaveProto.DebugTraceTransaction:output_type -> generated.DebugTraceTransactionResponse - 13, // 102: generated.EnclaveProto.StreamL2Updates:output_type -> generated.EncodedUpdateResponse - 19, // 103: generated.EnclaveProto.DebugEventLogRelevancy:output_type -> generated.DebugEventLogRelevancyResponse - 17, // 104: generated.EnclaveProto.GetTotalContractCount:output_type -> generated.GetTotalContractCountResponse - 5, // 105: generated.EnclaveProto.GetReceiptsByAddress:output_type -> generated.GetReceiptsByAddressResponse - 1, // 106: generated.EnclaveProto.GetPublicTransactionData:output_type -> generated.GetPublicTransactionDataResponse - 3, // 107: generated.EnclaveProto.EnclavePublicConfig:output_type -> generated.EnclavePublicConfigResponse - 76, // [76:108] is the sub-list for method output_type - 44, // [44:76] is the sub-list for method input_type - 44, // [44:44] is the sub-list for extension type_name - 44, // [44:44] is the sub-list for extension extendee - 0, // [0:44] is the sub-list for field type_name + 13, // 0: generated.EnclavePublicConfigResponse.systemError:type_name -> generated.SystemError + 13, // 1: generated.GetReceiptsByAddressResponse.systemError:type_name -> generated.SystemError + 13, // 2: generated.GetBatchResponse.systemError:type_name -> generated.SystemError + 9, // 3: generated.GetRollupDataResponse.msg:type_name -> generated.PublicRollupDataMsg + 13, // 4: generated.GetRollupDataResponse.systemError:type_name -> generated.SystemError + 13, // 5: generated.GetTotalContractCountResponse.systemError:type_name -> generated.SystemError + 13, // 6: generated.DebugEventLogRelevancyResponse.systemError:type_name -> generated.SystemError + 13, // 7: generated.DebugTraceTransactionResponse.systemError:type_name -> generated.SystemError + 72, // 8: generated.CreateRollupResponse.msg:type_name -> generated.ExtRollupMsg + 13, // 9: generated.CreateRollupResponse.systemError:type_name -> generated.SystemError + 13, // 10: generated.StatusResponse.systemError:type_name -> generated.SystemError + 66, // 11: generated.AttestationResponse.attestationReportMsg:type_name -> generated.AttestationReportMsg + 13, // 12: generated.AttestationResponse.systemError:type_name -> generated.SystemError + 13, // 13: generated.GenerateSecretResponse.systemError:type_name -> generated.SystemError + 13, // 14: generated.InitEnclaveResponse.systemError:type_name -> generated.SystemError + 13, // 15: generated.EnclaveIDResponse.systemError:type_name -> generated.SystemError + 13, // 16: generated.StartResponse.systemError:type_name -> generated.SystemError + 67, // 17: generated.SubmitBlockResponse.blockSubmissionResponse:type_name -> generated.BlockSubmissionResponseMsg + 13, // 18: generated.SubmitBlockResponse.systemError:type_name -> generated.SystemError + 13, // 19: generated.SubmitTxResponse.systemError:type_name -> generated.SystemError + 70, // 20: generated.SubmitBatchRequest.batch:type_name -> generated.ExtBatchMsg + 13, // 21: generated.SubmitBatchResponse.systemError:type_name -> generated.SystemError + 13, // 22: generated.ObsCallResponse.systemError:type_name -> generated.SystemError + 13, // 23: generated.GetTransactionCountResponse.systemError:type_name -> generated.SystemError + 13, // 24: generated.StopResponse.systemError:type_name -> generated.SystemError + 13, // 25: generated.GetTransactionResponse.systemError:type_name -> generated.SystemError + 13, // 26: generated.GetTransactionReceiptResponse.systemError:type_name -> generated.SystemError + 13, // 27: generated.GetBalanceResponse.systemError:type_name -> generated.SystemError + 13, // 28: generated.GetCodeResponse.systemError:type_name -> generated.SystemError + 13, // 29: generated.SubscribeResponse.systemError:type_name -> generated.SystemError + 13, // 30: generated.UnsubscribeResponse.systemError:type_name -> generated.SystemError + 13, // 31: generated.EstimateGasResponse.systemError:type_name -> generated.SystemError + 13, // 32: generated.GetLogsResponse.systemError:type_name -> generated.SystemError + 13, // 33: generated.HealthCheckResponse.systemError:type_name -> generated.SystemError + 13, // 34: generated.AttestationReportMsg.systemError:type_name -> generated.SystemError + 74, // 35: generated.BlockSubmissionResponseMsg.producedSecretResponses:type_name -> generated.SecretResponseMsg + 68, // 36: generated.BlockSubmissionResponseMsg.error:type_name -> generated.BlockSubmissionErrorMsg + 71, // 37: generated.ExtBatchMsg.header:type_name -> generated.BatchHeaderMsg + 69, // 38: generated.BatchHeaderMsg.CrossChainMessages:type_name -> generated.CrossChainMsg + 73, // 39: generated.ExtRollupMsg.header:type_name -> generated.RollupHeaderMsg + 69, // 40: generated.RollupHeaderMsg.CrossChainMessages:type_name -> generated.CrossChainMsg + 13, // 41: generated.SecretResponseMsg.systemError:type_name -> generated.SystemError + 24, // 42: generated.EnclaveProto.Status:input_type -> generated.StatusRequest + 26, // 43: generated.EnclaveProto.Attestation:input_type -> generated.AttestationRequest + 28, // 44: generated.EnclaveProto.GenerateSecret:input_type -> generated.GenerateSecretRequest + 30, // 45: generated.EnclaveProto.InitEnclave:input_type -> generated.InitEnclaveRequest + 32, // 46: generated.EnclaveProto.EnclaveID:input_type -> generated.EnclaveIDRequest + 36, // 47: generated.EnclaveProto.SubmitL1Block:input_type -> generated.SubmitBlockRequest + 38, // 48: generated.EnclaveProto.SubmitTx:input_type -> generated.SubmitTxRequest + 40, // 49: generated.EnclaveProto.SubmitBatch:input_type -> generated.SubmitBatchRequest + 42, // 50: generated.EnclaveProto.ObsCall:input_type -> generated.ObsCallRequest + 44, // 51: generated.EnclaveProto.GetTransactionCount:input_type -> generated.GetTransactionCountRequest + 46, // 52: generated.EnclaveProto.Stop:input_type -> generated.StopRequest + 48, // 53: generated.EnclaveProto.GetTransaction:input_type -> generated.GetTransactionRequest + 50, // 54: generated.EnclaveProto.GetTransactionReceipt:input_type -> generated.GetTransactionReceiptRequest + 52, // 55: generated.EnclaveProto.GetBalance:input_type -> generated.GetBalanceRequest + 54, // 56: generated.EnclaveProto.GetCode:input_type -> generated.GetCodeRequest + 56, // 57: generated.EnclaveProto.Subscribe:input_type -> generated.SubscribeRequest + 58, // 58: generated.EnclaveProto.Unsubscribe:input_type -> generated.UnsubscribeRequest + 60, // 59: generated.EnclaveProto.EstimateGas:input_type -> generated.EstimateGasRequest + 62, // 60: generated.EnclaveProto.GetLogs:input_type -> generated.GetLogsRequest + 65, // 61: generated.EnclaveProto.HealthCheck:input_type -> generated.EmptyArgs + 4, // 62: generated.EnclaveProto.GetBatch:input_type -> generated.GetBatchRequest + 5, // 63: generated.EnclaveProto.GetBatchBySeqNo:input_type -> generated.GetBatchBySeqNoRequest + 7, // 64: generated.EnclaveProto.GetRollupData:input_type -> generated.GetRollupDataRequest + 20, // 65: generated.EnclaveProto.CreateBatch:input_type -> generated.CreateBatchRequest + 22, // 66: generated.EnclaveProto.CreateRollup:input_type -> generated.CreateRollupRequest + 18, // 67: generated.EnclaveProto.DebugTraceTransaction:input_type -> generated.DebugTraceTransactionRequest + 10, // 68: generated.EnclaveProto.StreamL2Updates:input_type -> generated.StreamL2UpdatesRequest + 16, // 69: generated.EnclaveProto.DebugEventLogRelevancy:input_type -> generated.DebugEventLogRelevancyRequest + 14, // 70: generated.EnclaveProto.GetTotalContractCount:input_type -> generated.GetTotalContractCountRequest + 2, // 71: generated.EnclaveProto.GetReceiptsByAddress:input_type -> generated.GetReceiptsByAddressRequest + 0, // 72: generated.EnclaveProto.EnclavePublicConfig:input_type -> generated.EnclavePublicConfigRequest + 25, // 73: generated.EnclaveProto.Status:output_type -> generated.StatusResponse + 27, // 74: generated.EnclaveProto.Attestation:output_type -> generated.AttestationResponse + 29, // 75: generated.EnclaveProto.GenerateSecret:output_type -> generated.GenerateSecretResponse + 31, // 76: generated.EnclaveProto.InitEnclave:output_type -> generated.InitEnclaveResponse + 33, // 77: generated.EnclaveProto.EnclaveID:output_type -> generated.EnclaveIDResponse + 37, // 78: generated.EnclaveProto.SubmitL1Block:output_type -> generated.SubmitBlockResponse + 39, // 79: generated.EnclaveProto.SubmitTx:output_type -> generated.SubmitTxResponse + 41, // 80: generated.EnclaveProto.SubmitBatch:output_type -> generated.SubmitBatchResponse + 43, // 81: generated.EnclaveProto.ObsCall:output_type -> generated.ObsCallResponse + 45, // 82: generated.EnclaveProto.GetTransactionCount:output_type -> generated.GetTransactionCountResponse + 47, // 83: generated.EnclaveProto.Stop:output_type -> generated.StopResponse + 49, // 84: generated.EnclaveProto.GetTransaction:output_type -> generated.GetTransactionResponse + 51, // 85: generated.EnclaveProto.GetTransactionReceipt:output_type -> generated.GetTransactionReceiptResponse + 53, // 86: generated.EnclaveProto.GetBalance:output_type -> generated.GetBalanceResponse + 55, // 87: generated.EnclaveProto.GetCode:output_type -> generated.GetCodeResponse + 57, // 88: generated.EnclaveProto.Subscribe:output_type -> generated.SubscribeResponse + 59, // 89: generated.EnclaveProto.Unsubscribe:output_type -> generated.UnsubscribeResponse + 61, // 90: generated.EnclaveProto.EstimateGas:output_type -> generated.EstimateGasResponse + 63, // 91: generated.EnclaveProto.GetLogs:output_type -> generated.GetLogsResponse + 64, // 92: generated.EnclaveProto.HealthCheck:output_type -> generated.HealthCheckResponse + 6, // 93: generated.EnclaveProto.GetBatch:output_type -> generated.GetBatchResponse + 6, // 94: generated.EnclaveProto.GetBatchBySeqNo:output_type -> generated.GetBatchResponse + 8, // 95: generated.EnclaveProto.GetRollupData:output_type -> generated.GetRollupDataResponse + 21, // 96: generated.EnclaveProto.CreateBatch:output_type -> generated.CreateBatchResponse + 23, // 97: generated.EnclaveProto.CreateRollup:output_type -> generated.CreateRollupResponse + 19, // 98: generated.EnclaveProto.DebugTraceTransaction:output_type -> generated.DebugTraceTransactionResponse + 11, // 99: generated.EnclaveProto.StreamL2Updates:output_type -> generated.EncodedUpdateResponse + 17, // 100: generated.EnclaveProto.DebugEventLogRelevancy:output_type -> generated.DebugEventLogRelevancyResponse + 15, // 101: generated.EnclaveProto.GetTotalContractCount:output_type -> generated.GetTotalContractCountResponse + 3, // 102: generated.EnclaveProto.GetReceiptsByAddress:output_type -> generated.GetReceiptsByAddressResponse + 1, // 103: generated.EnclaveProto.EnclavePublicConfig:output_type -> generated.EnclavePublicConfigResponse + 73, // [73:104] is the sub-list for method output_type + 42, // [42:73] is the sub-list for method input_type + 42, // [42:42] is the sub-list for extension type_name + 42, // [42:42] is the sub-list for extension extendee + 0, // [0:42] is the sub-list for field type_name } func init() { file_enclave_proto_init() } @@ -5133,30 +5003,6 @@ func file_enclave_proto_init() { } if !protoimpl.UnsafeEnabled { file_enclave_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetPublicTransactionDataRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_enclave_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetPublicTransactionDataResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_enclave_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*EnclavePublicConfigRequest); i { case 0: return &v.state @@ -5168,7 +5014,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*EnclavePublicConfigResponse); i { case 0: return &v.state @@ -5180,7 +5026,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetReceiptsByAddressRequest); i { case 0: return &v.state @@ -5192,7 +5038,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetReceiptsByAddressResponse); i { case 0: return &v.state @@ -5204,7 +5050,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetBatchRequest); i { case 0: return &v.state @@ -5216,7 +5062,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetBatchBySeqNoRequest); i { case 0: return &v.state @@ -5228,7 +5074,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetBatchResponse); i { case 0: return &v.state @@ -5240,7 +5086,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetRollupDataRequest); i { case 0: return &v.state @@ -5252,7 +5098,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetRollupDataResponse); i { case 0: return &v.state @@ -5264,7 +5110,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PublicRollupDataMsg); i { case 0: return &v.state @@ -5276,7 +5122,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StreamL2UpdatesRequest); i { case 0: return &v.state @@ -5288,7 +5134,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*EncodedUpdateResponse); i { case 0: return &v.state @@ -5300,7 +5146,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Pagination); i { case 0: return &v.state @@ -5312,7 +5158,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SystemError); i { case 0: return &v.state @@ -5324,7 +5170,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetTotalContractCountRequest); i { case 0: return &v.state @@ -5336,7 +5182,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetTotalContractCountResponse); i { case 0: return &v.state @@ -5348,7 +5194,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DebugEventLogRelevancyRequest); i { case 0: return &v.state @@ -5360,7 +5206,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DebugEventLogRelevancyResponse); i { case 0: return &v.state @@ -5372,7 +5218,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DebugTraceTransactionRequest); i { case 0: return &v.state @@ -5384,7 +5230,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DebugTraceTransactionResponse); i { case 0: return &v.state @@ -5396,7 +5242,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CreateBatchRequest); i { case 0: return &v.state @@ -5408,7 +5254,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CreateBatchResponse); i { case 0: return &v.state @@ -5420,7 +5266,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CreateRollupRequest); i { case 0: return &v.state @@ -5432,7 +5278,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CreateRollupResponse); i { case 0: return &v.state @@ -5444,7 +5290,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StatusRequest); i { case 0: return &v.state @@ -5456,7 +5302,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StatusResponse); i { case 0: return &v.state @@ -5468,7 +5314,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AttestationRequest); i { case 0: return &v.state @@ -5480,7 +5326,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AttestationResponse); i { case 0: return &v.state @@ -5492,7 +5338,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GenerateSecretRequest); i { case 0: return &v.state @@ -5504,7 +5350,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GenerateSecretResponse); i { case 0: return &v.state @@ -5516,7 +5362,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*InitEnclaveRequest); i { case 0: return &v.state @@ -5528,7 +5374,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*InitEnclaveResponse); i { case 0: return &v.state @@ -5540,7 +5386,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*EnclaveIDRequest); i { case 0: return &v.state @@ -5552,7 +5398,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*EnclaveIDResponse); i { case 0: return &v.state @@ -5564,7 +5410,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StartRequest); i { case 0: return &v.state @@ -5576,7 +5422,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StartResponse); i { case 0: return &v.state @@ -5588,7 +5434,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SubmitBlockRequest); i { case 0: return &v.state @@ -5600,7 +5446,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SubmitBlockResponse); i { case 0: return &v.state @@ -5612,7 +5458,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SubmitTxRequest); i { case 0: return &v.state @@ -5624,7 +5470,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SubmitTxResponse); i { case 0: return &v.state @@ -5636,7 +5482,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SubmitBatchRequest); i { case 0: return &v.state @@ -5648,7 +5494,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SubmitBatchResponse); i { case 0: return &v.state @@ -5660,7 +5506,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ObsCallRequest); i { case 0: return &v.state @@ -5672,7 +5518,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ObsCallResponse); i { case 0: return &v.state @@ -5684,7 +5530,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetTransactionCountRequest); i { case 0: return &v.state @@ -5696,7 +5542,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetTransactionCountResponse); i { case 0: return &v.state @@ -5708,7 +5554,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StopRequest); i { case 0: return &v.state @@ -5720,7 +5566,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StopResponse); i { case 0: return &v.state @@ -5732,7 +5578,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetTransactionRequest); i { case 0: return &v.state @@ -5744,7 +5590,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetTransactionResponse); i { case 0: return &v.state @@ -5756,7 +5602,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetTransactionReceiptRequest); i { case 0: return &v.state @@ -5768,7 +5614,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetTransactionReceiptResponse); i { case 0: return &v.state @@ -5780,7 +5626,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetBalanceRequest); i { case 0: return &v.state @@ -5792,7 +5638,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetBalanceResponse); i { case 0: return &v.state @@ -5804,7 +5650,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetCodeRequest); i { case 0: return &v.state @@ -5816,7 +5662,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetCodeResponse); i { case 0: return &v.state @@ -5828,7 +5674,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SubscribeRequest); i { case 0: return &v.state @@ -5840,7 +5686,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SubscribeResponse); i { case 0: return &v.state @@ -5852,7 +5698,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UnsubscribeRequest); i { case 0: return &v.state @@ -5864,7 +5710,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[61].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UnsubscribeResponse); i { case 0: return &v.state @@ -5876,7 +5722,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[62].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*EstimateGasRequest); i { case 0: return &v.state @@ -5888,7 +5734,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[63].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[61].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*EstimateGasResponse); i { case 0: return &v.state @@ -5900,7 +5746,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[64].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[62].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetLogsRequest); i { case 0: return &v.state @@ -5912,7 +5758,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[65].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[63].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetLogsResponse); i { case 0: return &v.state @@ -5924,7 +5770,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[66].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[64].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*HealthCheckResponse); i { case 0: return &v.state @@ -5936,7 +5782,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[67].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[65].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*EmptyArgs); i { case 0: return &v.state @@ -5948,7 +5794,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[68].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[66].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AttestationReportMsg); i { case 0: return &v.state @@ -5960,7 +5806,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[69].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[67].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*BlockSubmissionResponseMsg); i { case 0: return &v.state @@ -5972,7 +5818,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[70].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[68].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*BlockSubmissionErrorMsg); i { case 0: return &v.state @@ -5984,7 +5830,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[71].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[69].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CrossChainMsg); i { case 0: return &v.state @@ -5996,7 +5842,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[72].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[70].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ExtBatchMsg); i { case 0: return &v.state @@ -6008,7 +5854,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[73].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[71].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*BatchHeaderMsg); i { case 0: return &v.state @@ -6020,7 +5866,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[74].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[72].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ExtRollupMsg); i { case 0: return &v.state @@ -6032,7 +5878,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[75].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[73].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RollupHeaderMsg); i { case 0: return &v.state @@ -6044,7 +5890,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[76].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[74].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SecretResponseMsg); i { case 0: return &v.state @@ -6056,7 +5902,7 @@ func file_enclave_proto_init() { return nil } } - file_enclave_proto_msgTypes[77].Exporter = func(v interface{}, i int) interface{} { + file_enclave_proto_msgTypes[75].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*WithdrawalMsg); i { case 0: return &v.state @@ -6069,14 +5915,14 @@ func file_enclave_proto_init() { } } } - file_enclave_proto_msgTypes[24].OneofWrappers = []interface{}{} + file_enclave_proto_msgTypes[22].OneofWrappers = []interface{}{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_enclave_proto_rawDesc, NumEnums: 0, - NumMessages: 78, + NumMessages: 76, NumExtensions: 0, NumServices: 1, }, diff --git a/go/common/rpc/generated/enclave.proto b/go/common/rpc/generated/enclave.proto index 972530b167..bd5e4acb99 100644 --- a/go/common/rpc/generated/enclave.proto +++ b/go/common/rpc/generated/enclave.proto @@ -95,21 +95,10 @@ service EnclaveProto { rpc GetReceiptsByAddress(GetReceiptsByAddressRequest) returns (GetReceiptsByAddressResponse) {} - rpc GetPublicTransactionData(GetPublicTransactionDataRequest) returns (GetPublicTransactionDataResponse) {} - // EnclavePublicConfig returns public network data that is known to the enclave but may not be known to the host rpc EnclavePublicConfig(EnclavePublicConfigRequest) returns (EnclavePublicConfigResponse) {} } -message GetPublicTransactionDataRequest { - Pagination pagination = 1; -} - -message GetPublicTransactionDataResponse{ - bytes publicTransactionData = 1; - SystemError systemError = 2; -} - message EnclavePublicConfigRequest {} message EnclavePublicConfigResponse{ diff --git a/go/common/rpc/generated/enclave_grpc.pb.go b/go/common/rpc/generated/enclave_grpc.pb.go index a17eb8038f..ceb3485c87 100644 --- a/go/common/rpc/generated/enclave_grpc.pb.go +++ b/go/common/rpc/generated/enclave_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.2.0 -// - protoc v4.24.3 +// - protoc-gen-go-grpc v1.3.0 +// - protoc v4.25.3 // source: enclave.proto package generated @@ -18,6 +18,40 @@ import ( // Requires gRPC-Go v1.32.0 or later. const _ = grpc.SupportPackageIsVersion7 +const ( + EnclaveProto_Status_FullMethodName = "/generated.EnclaveProto/Status" + EnclaveProto_Attestation_FullMethodName = "/generated.EnclaveProto/Attestation" + EnclaveProto_GenerateSecret_FullMethodName = "/generated.EnclaveProto/GenerateSecret" + EnclaveProto_InitEnclave_FullMethodName = "/generated.EnclaveProto/InitEnclave" + EnclaveProto_EnclaveID_FullMethodName = "/generated.EnclaveProto/EnclaveID" + EnclaveProto_SubmitL1Block_FullMethodName = "/generated.EnclaveProto/SubmitL1Block" + EnclaveProto_SubmitTx_FullMethodName = "/generated.EnclaveProto/SubmitTx" + EnclaveProto_SubmitBatch_FullMethodName = "/generated.EnclaveProto/SubmitBatch" + EnclaveProto_ObsCall_FullMethodName = "/generated.EnclaveProto/ObsCall" + EnclaveProto_GetTransactionCount_FullMethodName = "/generated.EnclaveProto/GetTransactionCount" + EnclaveProto_Stop_FullMethodName = "/generated.EnclaveProto/Stop" + EnclaveProto_GetTransaction_FullMethodName = "/generated.EnclaveProto/GetTransaction" + EnclaveProto_GetTransactionReceipt_FullMethodName = "/generated.EnclaveProto/GetTransactionReceipt" + EnclaveProto_GetBalance_FullMethodName = "/generated.EnclaveProto/GetBalance" + EnclaveProto_GetCode_FullMethodName = "/generated.EnclaveProto/GetCode" + EnclaveProto_Subscribe_FullMethodName = "/generated.EnclaveProto/Subscribe" + EnclaveProto_Unsubscribe_FullMethodName = "/generated.EnclaveProto/Unsubscribe" + EnclaveProto_EstimateGas_FullMethodName = "/generated.EnclaveProto/EstimateGas" + EnclaveProto_GetLogs_FullMethodName = "/generated.EnclaveProto/GetLogs" + EnclaveProto_HealthCheck_FullMethodName = "/generated.EnclaveProto/HealthCheck" + EnclaveProto_GetBatch_FullMethodName = "/generated.EnclaveProto/GetBatch" + EnclaveProto_GetBatchBySeqNo_FullMethodName = "/generated.EnclaveProto/GetBatchBySeqNo" + EnclaveProto_GetRollupData_FullMethodName = "/generated.EnclaveProto/GetRollupData" + EnclaveProto_CreateBatch_FullMethodName = "/generated.EnclaveProto/CreateBatch" + EnclaveProto_CreateRollup_FullMethodName = "/generated.EnclaveProto/CreateRollup" + EnclaveProto_DebugTraceTransaction_FullMethodName = "/generated.EnclaveProto/DebugTraceTransaction" + EnclaveProto_StreamL2Updates_FullMethodName = "/generated.EnclaveProto/StreamL2Updates" + EnclaveProto_DebugEventLogRelevancy_FullMethodName = "/generated.EnclaveProto/DebugEventLogRelevancy" + EnclaveProto_GetTotalContractCount_FullMethodName = "/generated.EnclaveProto/GetTotalContractCount" + EnclaveProto_GetReceiptsByAddress_FullMethodName = "/generated.EnclaveProto/GetReceiptsByAddress" + EnclaveProto_EnclavePublicConfig_FullMethodName = "/generated.EnclaveProto/EnclavePublicConfig" +) + // EnclaveProtoClient is the client API for EnclaveProto service. // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. @@ -33,8 +67,10 @@ type EnclaveProtoClient interface { // EnclaveID - request the EnclaveID from the enclave EnclaveID(ctx context.Context, in *EnclaveIDRequest, opts ...grpc.CallOption) (*EnclaveIDResponse, error) // SubmitL1Block - Used for the host to submit blocks to the enclave, these may be: - // a. historic block - if the enclave is behind and in the process of catching up with the L1 state - // b. the latest block published by the L1, to which the enclave should respond with a rollup + // + // a. historic block - if the enclave is behind and in the process of catching up with the L1 state + // b. the latest block published by the L1, to which the enclave should respond with a rollup + // // It is the responsibility of the host to gossip the returned rollup // For good functioning the caller should always submit blocks ordered by height // submitting a block before receiving ancestors of it, will result in it being ignored @@ -80,7 +116,6 @@ type EnclaveProtoClient interface { DebugEventLogRelevancy(ctx context.Context, in *DebugEventLogRelevancyRequest, opts ...grpc.CallOption) (*DebugEventLogRelevancyResponse, error) GetTotalContractCount(ctx context.Context, in *GetTotalContractCountRequest, opts ...grpc.CallOption) (*GetTotalContractCountResponse, error) GetReceiptsByAddress(ctx context.Context, in *GetReceiptsByAddressRequest, opts ...grpc.CallOption) (*GetReceiptsByAddressResponse, error) - GetPublicTransactionData(ctx context.Context, in *GetPublicTransactionDataRequest, opts ...grpc.CallOption) (*GetPublicTransactionDataResponse, error) // EnclavePublicConfig returns public network data that is known to the enclave but may not be known to the host EnclavePublicConfig(ctx context.Context, in *EnclavePublicConfigRequest, opts ...grpc.CallOption) (*EnclavePublicConfigResponse, error) } @@ -95,7 +130,7 @@ func NewEnclaveProtoClient(cc grpc.ClientConnInterface) EnclaveProtoClient { func (c *enclaveProtoClient) Status(ctx context.Context, in *StatusRequest, opts ...grpc.CallOption) (*StatusResponse, error) { out := new(StatusResponse) - err := c.cc.Invoke(ctx, "/generated.EnclaveProto/Status", in, out, opts...) + err := c.cc.Invoke(ctx, EnclaveProto_Status_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -104,7 +139,7 @@ func (c *enclaveProtoClient) Status(ctx context.Context, in *StatusRequest, opts func (c *enclaveProtoClient) Attestation(ctx context.Context, in *AttestationRequest, opts ...grpc.CallOption) (*AttestationResponse, error) { out := new(AttestationResponse) - err := c.cc.Invoke(ctx, "/generated.EnclaveProto/Attestation", in, out, opts...) + err := c.cc.Invoke(ctx, EnclaveProto_Attestation_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -113,7 +148,7 @@ func (c *enclaveProtoClient) Attestation(ctx context.Context, in *AttestationReq func (c *enclaveProtoClient) GenerateSecret(ctx context.Context, in *GenerateSecretRequest, opts ...grpc.CallOption) (*GenerateSecretResponse, error) { out := new(GenerateSecretResponse) - err := c.cc.Invoke(ctx, "/generated.EnclaveProto/GenerateSecret", in, out, opts...) + err := c.cc.Invoke(ctx, EnclaveProto_GenerateSecret_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -122,7 +157,7 @@ func (c *enclaveProtoClient) GenerateSecret(ctx context.Context, in *GenerateSec func (c *enclaveProtoClient) InitEnclave(ctx context.Context, in *InitEnclaveRequest, opts ...grpc.CallOption) (*InitEnclaveResponse, error) { out := new(InitEnclaveResponse) - err := c.cc.Invoke(ctx, "/generated.EnclaveProto/InitEnclave", in, out, opts...) + err := c.cc.Invoke(ctx, EnclaveProto_InitEnclave_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -131,7 +166,7 @@ func (c *enclaveProtoClient) InitEnclave(ctx context.Context, in *InitEnclaveReq func (c *enclaveProtoClient) EnclaveID(ctx context.Context, in *EnclaveIDRequest, opts ...grpc.CallOption) (*EnclaveIDResponse, error) { out := new(EnclaveIDResponse) - err := c.cc.Invoke(ctx, "/generated.EnclaveProto/EnclaveID", in, out, opts...) + err := c.cc.Invoke(ctx, EnclaveProto_EnclaveID_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -140,7 +175,7 @@ func (c *enclaveProtoClient) EnclaveID(ctx context.Context, in *EnclaveIDRequest func (c *enclaveProtoClient) SubmitL1Block(ctx context.Context, in *SubmitBlockRequest, opts ...grpc.CallOption) (*SubmitBlockResponse, error) { out := new(SubmitBlockResponse) - err := c.cc.Invoke(ctx, "/generated.EnclaveProto/SubmitL1Block", in, out, opts...) + err := c.cc.Invoke(ctx, EnclaveProto_SubmitL1Block_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -149,7 +184,7 @@ func (c *enclaveProtoClient) SubmitL1Block(ctx context.Context, in *SubmitBlockR func (c *enclaveProtoClient) SubmitTx(ctx context.Context, in *SubmitTxRequest, opts ...grpc.CallOption) (*SubmitTxResponse, error) { out := new(SubmitTxResponse) - err := c.cc.Invoke(ctx, "/generated.EnclaveProto/SubmitTx", in, out, opts...) + err := c.cc.Invoke(ctx, EnclaveProto_SubmitTx_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -158,7 +193,7 @@ func (c *enclaveProtoClient) SubmitTx(ctx context.Context, in *SubmitTxRequest, func (c *enclaveProtoClient) SubmitBatch(ctx context.Context, in *SubmitBatchRequest, opts ...grpc.CallOption) (*SubmitBatchResponse, error) { out := new(SubmitBatchResponse) - err := c.cc.Invoke(ctx, "/generated.EnclaveProto/SubmitBatch", in, out, opts...) + err := c.cc.Invoke(ctx, EnclaveProto_SubmitBatch_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -167,7 +202,7 @@ func (c *enclaveProtoClient) SubmitBatch(ctx context.Context, in *SubmitBatchReq func (c *enclaveProtoClient) ObsCall(ctx context.Context, in *ObsCallRequest, opts ...grpc.CallOption) (*ObsCallResponse, error) { out := new(ObsCallResponse) - err := c.cc.Invoke(ctx, "/generated.EnclaveProto/ObsCall", in, out, opts...) + err := c.cc.Invoke(ctx, EnclaveProto_ObsCall_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -176,7 +211,7 @@ func (c *enclaveProtoClient) ObsCall(ctx context.Context, in *ObsCallRequest, op func (c *enclaveProtoClient) GetTransactionCount(ctx context.Context, in *GetTransactionCountRequest, opts ...grpc.CallOption) (*GetTransactionCountResponse, error) { out := new(GetTransactionCountResponse) - err := c.cc.Invoke(ctx, "/generated.EnclaveProto/GetTransactionCount", in, out, opts...) + err := c.cc.Invoke(ctx, EnclaveProto_GetTransactionCount_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -185,7 +220,7 @@ func (c *enclaveProtoClient) GetTransactionCount(ctx context.Context, in *GetTra func (c *enclaveProtoClient) Stop(ctx context.Context, in *StopRequest, opts ...grpc.CallOption) (*StopResponse, error) { out := new(StopResponse) - err := c.cc.Invoke(ctx, "/generated.EnclaveProto/Stop", in, out, opts...) + err := c.cc.Invoke(ctx, EnclaveProto_Stop_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -194,7 +229,7 @@ func (c *enclaveProtoClient) Stop(ctx context.Context, in *StopRequest, opts ... func (c *enclaveProtoClient) GetTransaction(ctx context.Context, in *GetTransactionRequest, opts ...grpc.CallOption) (*GetTransactionResponse, error) { out := new(GetTransactionResponse) - err := c.cc.Invoke(ctx, "/generated.EnclaveProto/GetTransaction", in, out, opts...) + err := c.cc.Invoke(ctx, EnclaveProto_GetTransaction_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -203,7 +238,7 @@ func (c *enclaveProtoClient) GetTransaction(ctx context.Context, in *GetTransact func (c *enclaveProtoClient) GetTransactionReceipt(ctx context.Context, in *GetTransactionReceiptRequest, opts ...grpc.CallOption) (*GetTransactionReceiptResponse, error) { out := new(GetTransactionReceiptResponse) - err := c.cc.Invoke(ctx, "/generated.EnclaveProto/GetTransactionReceipt", in, out, opts...) + err := c.cc.Invoke(ctx, EnclaveProto_GetTransactionReceipt_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -212,7 +247,7 @@ func (c *enclaveProtoClient) GetTransactionReceipt(ctx context.Context, in *GetT func (c *enclaveProtoClient) GetBalance(ctx context.Context, in *GetBalanceRequest, opts ...grpc.CallOption) (*GetBalanceResponse, error) { out := new(GetBalanceResponse) - err := c.cc.Invoke(ctx, "/generated.EnclaveProto/GetBalance", in, out, opts...) + err := c.cc.Invoke(ctx, EnclaveProto_GetBalance_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -221,7 +256,7 @@ func (c *enclaveProtoClient) GetBalance(ctx context.Context, in *GetBalanceReque func (c *enclaveProtoClient) GetCode(ctx context.Context, in *GetCodeRequest, opts ...grpc.CallOption) (*GetCodeResponse, error) { out := new(GetCodeResponse) - err := c.cc.Invoke(ctx, "/generated.EnclaveProto/GetCode", in, out, opts...) + err := c.cc.Invoke(ctx, EnclaveProto_GetCode_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -230,7 +265,7 @@ func (c *enclaveProtoClient) GetCode(ctx context.Context, in *GetCodeRequest, op func (c *enclaveProtoClient) Subscribe(ctx context.Context, in *SubscribeRequest, opts ...grpc.CallOption) (*SubscribeResponse, error) { out := new(SubscribeResponse) - err := c.cc.Invoke(ctx, "/generated.EnclaveProto/Subscribe", in, out, opts...) + err := c.cc.Invoke(ctx, EnclaveProto_Subscribe_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -239,7 +274,7 @@ func (c *enclaveProtoClient) Subscribe(ctx context.Context, in *SubscribeRequest func (c *enclaveProtoClient) Unsubscribe(ctx context.Context, in *UnsubscribeRequest, opts ...grpc.CallOption) (*UnsubscribeResponse, error) { out := new(UnsubscribeResponse) - err := c.cc.Invoke(ctx, "/generated.EnclaveProto/Unsubscribe", in, out, opts...) + err := c.cc.Invoke(ctx, EnclaveProto_Unsubscribe_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -248,7 +283,7 @@ func (c *enclaveProtoClient) Unsubscribe(ctx context.Context, in *UnsubscribeReq func (c *enclaveProtoClient) EstimateGas(ctx context.Context, in *EstimateGasRequest, opts ...grpc.CallOption) (*EstimateGasResponse, error) { out := new(EstimateGasResponse) - err := c.cc.Invoke(ctx, "/generated.EnclaveProto/EstimateGas", in, out, opts...) + err := c.cc.Invoke(ctx, EnclaveProto_EstimateGas_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -257,7 +292,7 @@ func (c *enclaveProtoClient) EstimateGas(ctx context.Context, in *EstimateGasReq func (c *enclaveProtoClient) GetLogs(ctx context.Context, in *GetLogsRequest, opts ...grpc.CallOption) (*GetLogsResponse, error) { out := new(GetLogsResponse) - err := c.cc.Invoke(ctx, "/generated.EnclaveProto/GetLogs", in, out, opts...) + err := c.cc.Invoke(ctx, EnclaveProto_GetLogs_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -266,7 +301,7 @@ func (c *enclaveProtoClient) GetLogs(ctx context.Context, in *GetLogsRequest, op func (c *enclaveProtoClient) HealthCheck(ctx context.Context, in *EmptyArgs, opts ...grpc.CallOption) (*HealthCheckResponse, error) { out := new(HealthCheckResponse) - err := c.cc.Invoke(ctx, "/generated.EnclaveProto/HealthCheck", in, out, opts...) + err := c.cc.Invoke(ctx, EnclaveProto_HealthCheck_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -275,7 +310,7 @@ func (c *enclaveProtoClient) HealthCheck(ctx context.Context, in *EmptyArgs, opt func (c *enclaveProtoClient) GetBatch(ctx context.Context, in *GetBatchRequest, opts ...grpc.CallOption) (*GetBatchResponse, error) { out := new(GetBatchResponse) - err := c.cc.Invoke(ctx, "/generated.EnclaveProto/GetBatch", in, out, opts...) + err := c.cc.Invoke(ctx, EnclaveProto_GetBatch_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -284,7 +319,7 @@ func (c *enclaveProtoClient) GetBatch(ctx context.Context, in *GetBatchRequest, func (c *enclaveProtoClient) GetBatchBySeqNo(ctx context.Context, in *GetBatchBySeqNoRequest, opts ...grpc.CallOption) (*GetBatchResponse, error) { out := new(GetBatchResponse) - err := c.cc.Invoke(ctx, "/generated.EnclaveProto/GetBatchBySeqNo", in, out, opts...) + err := c.cc.Invoke(ctx, EnclaveProto_GetBatchBySeqNo_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -293,7 +328,7 @@ func (c *enclaveProtoClient) GetBatchBySeqNo(ctx context.Context, in *GetBatchBy func (c *enclaveProtoClient) GetRollupData(ctx context.Context, in *GetRollupDataRequest, opts ...grpc.CallOption) (*GetRollupDataResponse, error) { out := new(GetRollupDataResponse) - err := c.cc.Invoke(ctx, "/generated.EnclaveProto/GetRollupData", in, out, opts...) + err := c.cc.Invoke(ctx, EnclaveProto_GetRollupData_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -302,7 +337,7 @@ func (c *enclaveProtoClient) GetRollupData(ctx context.Context, in *GetRollupDat func (c *enclaveProtoClient) CreateBatch(ctx context.Context, in *CreateBatchRequest, opts ...grpc.CallOption) (*CreateBatchResponse, error) { out := new(CreateBatchResponse) - err := c.cc.Invoke(ctx, "/generated.EnclaveProto/CreateBatch", in, out, opts...) + err := c.cc.Invoke(ctx, EnclaveProto_CreateBatch_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -311,7 +346,7 @@ func (c *enclaveProtoClient) CreateBatch(ctx context.Context, in *CreateBatchReq func (c *enclaveProtoClient) CreateRollup(ctx context.Context, in *CreateRollupRequest, opts ...grpc.CallOption) (*CreateRollupResponse, error) { out := new(CreateRollupResponse) - err := c.cc.Invoke(ctx, "/generated.EnclaveProto/CreateRollup", in, out, opts...) + err := c.cc.Invoke(ctx, EnclaveProto_CreateRollup_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -320,7 +355,7 @@ func (c *enclaveProtoClient) CreateRollup(ctx context.Context, in *CreateRollupR func (c *enclaveProtoClient) DebugTraceTransaction(ctx context.Context, in *DebugTraceTransactionRequest, opts ...grpc.CallOption) (*DebugTraceTransactionResponse, error) { out := new(DebugTraceTransactionResponse) - err := c.cc.Invoke(ctx, "/generated.EnclaveProto/DebugTraceTransaction", in, out, opts...) + err := c.cc.Invoke(ctx, EnclaveProto_DebugTraceTransaction_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -328,7 +363,7 @@ func (c *enclaveProtoClient) DebugTraceTransaction(ctx context.Context, in *Debu } func (c *enclaveProtoClient) StreamL2Updates(ctx context.Context, in *StreamL2UpdatesRequest, opts ...grpc.CallOption) (EnclaveProto_StreamL2UpdatesClient, error) { - stream, err := c.cc.NewStream(ctx, &EnclaveProto_ServiceDesc.Streams[0], "/generated.EnclaveProto/StreamL2Updates", opts...) + stream, err := c.cc.NewStream(ctx, &EnclaveProto_ServiceDesc.Streams[0], EnclaveProto_StreamL2Updates_FullMethodName, opts...) if err != nil { return nil, err } @@ -361,7 +396,7 @@ func (x *enclaveProtoStreamL2UpdatesClient) Recv() (*EncodedUpdateResponse, erro func (c *enclaveProtoClient) DebugEventLogRelevancy(ctx context.Context, in *DebugEventLogRelevancyRequest, opts ...grpc.CallOption) (*DebugEventLogRelevancyResponse, error) { out := new(DebugEventLogRelevancyResponse) - err := c.cc.Invoke(ctx, "/generated.EnclaveProto/DebugEventLogRelevancy", in, out, opts...) + err := c.cc.Invoke(ctx, EnclaveProto_DebugEventLogRelevancy_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -370,7 +405,7 @@ func (c *enclaveProtoClient) DebugEventLogRelevancy(ctx context.Context, in *Deb func (c *enclaveProtoClient) GetTotalContractCount(ctx context.Context, in *GetTotalContractCountRequest, opts ...grpc.CallOption) (*GetTotalContractCountResponse, error) { out := new(GetTotalContractCountResponse) - err := c.cc.Invoke(ctx, "/generated.EnclaveProto/GetTotalContractCount", in, out, opts...) + err := c.cc.Invoke(ctx, EnclaveProto_GetTotalContractCount_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -379,16 +414,7 @@ func (c *enclaveProtoClient) GetTotalContractCount(ctx context.Context, in *GetT func (c *enclaveProtoClient) GetReceiptsByAddress(ctx context.Context, in *GetReceiptsByAddressRequest, opts ...grpc.CallOption) (*GetReceiptsByAddressResponse, error) { out := new(GetReceiptsByAddressResponse) - err := c.cc.Invoke(ctx, "/generated.EnclaveProto/GetReceiptsByAddress", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *enclaveProtoClient) GetPublicTransactionData(ctx context.Context, in *GetPublicTransactionDataRequest, opts ...grpc.CallOption) (*GetPublicTransactionDataResponse, error) { - out := new(GetPublicTransactionDataResponse) - err := c.cc.Invoke(ctx, "/generated.EnclaveProto/GetPublicTransactionData", in, out, opts...) + err := c.cc.Invoke(ctx, EnclaveProto_GetReceiptsByAddress_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -397,7 +423,7 @@ func (c *enclaveProtoClient) GetPublicTransactionData(ctx context.Context, in *G func (c *enclaveProtoClient) EnclavePublicConfig(ctx context.Context, in *EnclavePublicConfigRequest, opts ...grpc.CallOption) (*EnclavePublicConfigResponse, error) { out := new(EnclavePublicConfigResponse) - err := c.cc.Invoke(ctx, "/generated.EnclaveProto/EnclavePublicConfig", in, out, opts...) + err := c.cc.Invoke(ctx, EnclaveProto_EnclavePublicConfig_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -419,8 +445,10 @@ type EnclaveProtoServer interface { // EnclaveID - request the EnclaveID from the enclave EnclaveID(context.Context, *EnclaveIDRequest) (*EnclaveIDResponse, error) // SubmitL1Block - Used for the host to submit blocks to the enclave, these may be: - // a. historic block - if the enclave is behind and in the process of catching up with the L1 state - // b. the latest block published by the L1, to which the enclave should respond with a rollup + // + // a. historic block - if the enclave is behind and in the process of catching up with the L1 state + // b. the latest block published by the L1, to which the enclave should respond with a rollup + // // It is the responsibility of the host to gossip the returned rollup // For good functioning the caller should always submit blocks ordered by height // submitting a block before receiving ancestors of it, will result in it being ignored @@ -466,7 +494,6 @@ type EnclaveProtoServer interface { DebugEventLogRelevancy(context.Context, *DebugEventLogRelevancyRequest) (*DebugEventLogRelevancyResponse, error) GetTotalContractCount(context.Context, *GetTotalContractCountRequest) (*GetTotalContractCountResponse, error) GetReceiptsByAddress(context.Context, *GetReceiptsByAddressRequest) (*GetReceiptsByAddressResponse, error) - GetPublicTransactionData(context.Context, *GetPublicTransactionDataRequest) (*GetPublicTransactionDataResponse, error) // EnclavePublicConfig returns public network data that is known to the enclave but may not be known to the host EnclavePublicConfig(context.Context, *EnclavePublicConfigRequest) (*EnclavePublicConfigResponse, error) mustEmbedUnimplementedEnclaveProtoServer() @@ -566,9 +593,6 @@ func (UnimplementedEnclaveProtoServer) GetTotalContractCount(context.Context, *G func (UnimplementedEnclaveProtoServer) GetReceiptsByAddress(context.Context, *GetReceiptsByAddressRequest) (*GetReceiptsByAddressResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GetReceiptsByAddress not implemented") } -func (UnimplementedEnclaveProtoServer) GetPublicTransactionData(context.Context, *GetPublicTransactionDataRequest) (*GetPublicTransactionDataResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetPublicTransactionData not implemented") -} func (UnimplementedEnclaveProtoServer) EnclavePublicConfig(context.Context, *EnclavePublicConfigRequest) (*EnclavePublicConfigResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method EnclavePublicConfig not implemented") } @@ -595,7 +619,7 @@ func _EnclaveProto_Status_Handler(srv interface{}, ctx context.Context, dec func } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/generated.EnclaveProto/Status", + FullMethod: EnclaveProto_Status_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(EnclaveProtoServer).Status(ctx, req.(*StatusRequest)) @@ -613,7 +637,7 @@ func _EnclaveProto_Attestation_Handler(srv interface{}, ctx context.Context, dec } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/generated.EnclaveProto/Attestation", + FullMethod: EnclaveProto_Attestation_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(EnclaveProtoServer).Attestation(ctx, req.(*AttestationRequest)) @@ -631,7 +655,7 @@ func _EnclaveProto_GenerateSecret_Handler(srv interface{}, ctx context.Context, } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/generated.EnclaveProto/GenerateSecret", + FullMethod: EnclaveProto_GenerateSecret_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(EnclaveProtoServer).GenerateSecret(ctx, req.(*GenerateSecretRequest)) @@ -649,7 +673,7 @@ func _EnclaveProto_InitEnclave_Handler(srv interface{}, ctx context.Context, dec } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/generated.EnclaveProto/InitEnclave", + FullMethod: EnclaveProto_InitEnclave_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(EnclaveProtoServer).InitEnclave(ctx, req.(*InitEnclaveRequest)) @@ -667,7 +691,7 @@ func _EnclaveProto_EnclaveID_Handler(srv interface{}, ctx context.Context, dec f } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/generated.EnclaveProto/EnclaveID", + FullMethod: EnclaveProto_EnclaveID_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(EnclaveProtoServer).EnclaveID(ctx, req.(*EnclaveIDRequest)) @@ -685,7 +709,7 @@ func _EnclaveProto_SubmitL1Block_Handler(srv interface{}, ctx context.Context, d } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/generated.EnclaveProto/SubmitL1Block", + FullMethod: EnclaveProto_SubmitL1Block_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(EnclaveProtoServer).SubmitL1Block(ctx, req.(*SubmitBlockRequest)) @@ -703,7 +727,7 @@ func _EnclaveProto_SubmitTx_Handler(srv interface{}, ctx context.Context, dec fu } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/generated.EnclaveProto/SubmitTx", + FullMethod: EnclaveProto_SubmitTx_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(EnclaveProtoServer).SubmitTx(ctx, req.(*SubmitTxRequest)) @@ -721,7 +745,7 @@ func _EnclaveProto_SubmitBatch_Handler(srv interface{}, ctx context.Context, dec } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/generated.EnclaveProto/SubmitBatch", + FullMethod: EnclaveProto_SubmitBatch_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(EnclaveProtoServer).SubmitBatch(ctx, req.(*SubmitBatchRequest)) @@ -739,7 +763,7 @@ func _EnclaveProto_ObsCall_Handler(srv interface{}, ctx context.Context, dec fun } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/generated.EnclaveProto/ObsCall", + FullMethod: EnclaveProto_ObsCall_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(EnclaveProtoServer).ObsCall(ctx, req.(*ObsCallRequest)) @@ -757,7 +781,7 @@ func _EnclaveProto_GetTransactionCount_Handler(srv interface{}, ctx context.Cont } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/generated.EnclaveProto/GetTransactionCount", + FullMethod: EnclaveProto_GetTransactionCount_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(EnclaveProtoServer).GetTransactionCount(ctx, req.(*GetTransactionCountRequest)) @@ -775,7 +799,7 @@ func _EnclaveProto_Stop_Handler(srv interface{}, ctx context.Context, dec func(i } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/generated.EnclaveProto/Stop", + FullMethod: EnclaveProto_Stop_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(EnclaveProtoServer).Stop(ctx, req.(*StopRequest)) @@ -793,7 +817,7 @@ func _EnclaveProto_GetTransaction_Handler(srv interface{}, ctx context.Context, } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/generated.EnclaveProto/GetTransaction", + FullMethod: EnclaveProto_GetTransaction_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(EnclaveProtoServer).GetTransaction(ctx, req.(*GetTransactionRequest)) @@ -811,7 +835,7 @@ func _EnclaveProto_GetTransactionReceipt_Handler(srv interface{}, ctx context.Co } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/generated.EnclaveProto/GetTransactionReceipt", + FullMethod: EnclaveProto_GetTransactionReceipt_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(EnclaveProtoServer).GetTransactionReceipt(ctx, req.(*GetTransactionReceiptRequest)) @@ -829,7 +853,7 @@ func _EnclaveProto_GetBalance_Handler(srv interface{}, ctx context.Context, dec } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/generated.EnclaveProto/GetBalance", + FullMethod: EnclaveProto_GetBalance_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(EnclaveProtoServer).GetBalance(ctx, req.(*GetBalanceRequest)) @@ -847,7 +871,7 @@ func _EnclaveProto_GetCode_Handler(srv interface{}, ctx context.Context, dec fun } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/generated.EnclaveProto/GetCode", + FullMethod: EnclaveProto_GetCode_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(EnclaveProtoServer).GetCode(ctx, req.(*GetCodeRequest)) @@ -865,7 +889,7 @@ func _EnclaveProto_Subscribe_Handler(srv interface{}, ctx context.Context, dec f } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/generated.EnclaveProto/Subscribe", + FullMethod: EnclaveProto_Subscribe_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(EnclaveProtoServer).Subscribe(ctx, req.(*SubscribeRequest)) @@ -883,7 +907,7 @@ func _EnclaveProto_Unsubscribe_Handler(srv interface{}, ctx context.Context, dec } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/generated.EnclaveProto/Unsubscribe", + FullMethod: EnclaveProto_Unsubscribe_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(EnclaveProtoServer).Unsubscribe(ctx, req.(*UnsubscribeRequest)) @@ -901,7 +925,7 @@ func _EnclaveProto_EstimateGas_Handler(srv interface{}, ctx context.Context, dec } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/generated.EnclaveProto/EstimateGas", + FullMethod: EnclaveProto_EstimateGas_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(EnclaveProtoServer).EstimateGas(ctx, req.(*EstimateGasRequest)) @@ -919,7 +943,7 @@ func _EnclaveProto_GetLogs_Handler(srv interface{}, ctx context.Context, dec fun } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/generated.EnclaveProto/GetLogs", + FullMethod: EnclaveProto_GetLogs_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(EnclaveProtoServer).GetLogs(ctx, req.(*GetLogsRequest)) @@ -937,7 +961,7 @@ func _EnclaveProto_HealthCheck_Handler(srv interface{}, ctx context.Context, dec } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/generated.EnclaveProto/HealthCheck", + FullMethod: EnclaveProto_HealthCheck_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(EnclaveProtoServer).HealthCheck(ctx, req.(*EmptyArgs)) @@ -955,7 +979,7 @@ func _EnclaveProto_GetBatch_Handler(srv interface{}, ctx context.Context, dec fu } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/generated.EnclaveProto/GetBatch", + FullMethod: EnclaveProto_GetBatch_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(EnclaveProtoServer).GetBatch(ctx, req.(*GetBatchRequest)) @@ -973,7 +997,7 @@ func _EnclaveProto_GetBatchBySeqNo_Handler(srv interface{}, ctx context.Context, } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/generated.EnclaveProto/GetBatchBySeqNo", + FullMethod: EnclaveProto_GetBatchBySeqNo_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(EnclaveProtoServer).GetBatchBySeqNo(ctx, req.(*GetBatchBySeqNoRequest)) @@ -991,7 +1015,7 @@ func _EnclaveProto_GetRollupData_Handler(srv interface{}, ctx context.Context, d } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/generated.EnclaveProto/GetRollupData", + FullMethod: EnclaveProto_GetRollupData_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(EnclaveProtoServer).GetRollupData(ctx, req.(*GetRollupDataRequest)) @@ -1009,7 +1033,7 @@ func _EnclaveProto_CreateBatch_Handler(srv interface{}, ctx context.Context, dec } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/generated.EnclaveProto/CreateBatch", + FullMethod: EnclaveProto_CreateBatch_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(EnclaveProtoServer).CreateBatch(ctx, req.(*CreateBatchRequest)) @@ -1027,7 +1051,7 @@ func _EnclaveProto_CreateRollup_Handler(srv interface{}, ctx context.Context, de } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/generated.EnclaveProto/CreateRollup", + FullMethod: EnclaveProto_CreateRollup_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(EnclaveProtoServer).CreateRollup(ctx, req.(*CreateRollupRequest)) @@ -1045,7 +1069,7 @@ func _EnclaveProto_DebugTraceTransaction_Handler(srv interface{}, ctx context.Co } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/generated.EnclaveProto/DebugTraceTransaction", + FullMethod: EnclaveProto_DebugTraceTransaction_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(EnclaveProtoServer).DebugTraceTransaction(ctx, req.(*DebugTraceTransactionRequest)) @@ -1084,7 +1108,7 @@ func _EnclaveProto_DebugEventLogRelevancy_Handler(srv interface{}, ctx context.C } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/generated.EnclaveProto/DebugEventLogRelevancy", + FullMethod: EnclaveProto_DebugEventLogRelevancy_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(EnclaveProtoServer).DebugEventLogRelevancy(ctx, req.(*DebugEventLogRelevancyRequest)) @@ -1102,7 +1126,7 @@ func _EnclaveProto_GetTotalContractCount_Handler(srv interface{}, ctx context.Co } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/generated.EnclaveProto/GetTotalContractCount", + FullMethod: EnclaveProto_GetTotalContractCount_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(EnclaveProtoServer).GetTotalContractCount(ctx, req.(*GetTotalContractCountRequest)) @@ -1120,7 +1144,7 @@ func _EnclaveProto_GetReceiptsByAddress_Handler(srv interface{}, ctx context.Con } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/generated.EnclaveProto/GetReceiptsByAddress", + FullMethod: EnclaveProto_GetReceiptsByAddress_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(EnclaveProtoServer).GetReceiptsByAddress(ctx, req.(*GetReceiptsByAddressRequest)) @@ -1128,24 +1152,6 @@ func _EnclaveProto_GetReceiptsByAddress_Handler(srv interface{}, ctx context.Con return interceptor(ctx, in, info, handler) } -func _EnclaveProto_GetPublicTransactionData_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetPublicTransactionDataRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(EnclaveProtoServer).GetPublicTransactionData(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/generated.EnclaveProto/GetPublicTransactionData", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(EnclaveProtoServer).GetPublicTransactionData(ctx, req.(*GetPublicTransactionDataRequest)) - } - return interceptor(ctx, in, info, handler) -} - func _EnclaveProto_EnclavePublicConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(EnclavePublicConfigRequest) if err := dec(in); err != nil { @@ -1156,7 +1162,7 @@ func _EnclaveProto_EnclavePublicConfig_Handler(srv interface{}, ctx context.Cont } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/generated.EnclaveProto/EnclavePublicConfig", + FullMethod: EnclaveProto_EnclavePublicConfig_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(EnclaveProtoServer).EnclavePublicConfig(ctx, req.(*EnclavePublicConfigRequest)) @@ -1287,10 +1293,6 @@ var EnclaveProto_ServiceDesc = grpc.ServiceDesc{ MethodName: "GetReceiptsByAddress", Handler: _EnclaveProto_GetReceiptsByAddress_Handler, }, - { - MethodName: "GetPublicTransactionData", - Handler: _EnclaveProto_GetPublicTransactionData_Handler, - }, { MethodName: "EnclavePublicConfig", Handler: _EnclaveProto_EnclavePublicConfig_Handler, diff --git a/go/common/subscription/utils.go b/go/common/subscription/utils.go index b9d92954c7..81b02aaf20 100644 --- a/go/common/subscription/utils.go +++ b/go/common/subscription/utils.go @@ -62,8 +62,5 @@ func ForwardFromChannels[R any](inputChannels []chan R, unsubscribed *atomic.Boo // Must be called as a go routine! func HandleUnsubscribe(connectionSub *rpc.Subscription, unsubscribed *atomic.Bool, onUnsub func()) { <-connectionSub.Err() - if unsubscribed != nil { - unsubscribed.Store(true) - } onUnsub() } diff --git a/go/enclave/enclave.go b/go/enclave/enclave.go index 4216b30247..c8dd3df96d 100644 --- a/go/enclave/enclave.go +++ b/go/enclave/enclave.go @@ -844,29 +844,6 @@ func (e *enclaveImpl) GetCustomQuery(ctx context.Context, encryptedParams common return rpc.WithVKEncryption(ctx, e.rpcEncryptionManager, encryptedParams, rpc.GetCustomQueryValidate, rpc.GetCustomQueryExecute) } -func (e *enclaveImpl) GetPublicTransactionData(ctx context.Context, pagination *common.QueryPagination) (*common.TransactionListingResponse, common.SystemError) { - // ensure the enclave is running - if e.stopControl.IsStopping() { - return nil, responses.ToInternalError(fmt.Errorf("requested GetPublicTransactionData with the enclave stopping")) - } - - paginatedData, err := e.storage.GetPublicTransactionData(ctx, pagination) - if err != nil { - return nil, responses.ToInternalError(fmt.Errorf("unable to fetch data - %w", err)) - } - - // Todo eventually make this a cacheable method - totalData, err := e.storage.GetPublicTransactionCount(ctx) - if err != nil { - return nil, responses.ToInternalError(fmt.Errorf("unable to fetch data - %w", err)) - } - - return &common.TransactionListingResponse{ - TransactionsData: paginatedData, - Total: totalData, - }, nil -} - func (e *enclaveImpl) EnclavePublicConfig(context.Context) (*common.EnclavePublicConfig, common.SystemError) { address, systemError := e.crossChainProcessors.GetL2MessageBusAddress() if systemError != nil { diff --git a/go/enclave/rpc_server.go b/go/enclave/rpc_server.go index 8cd8f8f720..ca6d4d6622 100644 --- a/go/enclave/rpc_server.go +++ b/go/enclave/rpc_server.go @@ -442,26 +442,6 @@ func (s *RPCServer) GetReceiptsByAddress(ctx context.Context, req *generated.Get return &generated.GetReceiptsByAddressResponse{EncodedEnclaveResponse: enclaveResp.Encode()}, nil } -func (s *RPCServer) GetPublicTransactionData(ctx context.Context, req *generated.GetPublicTransactionDataRequest) (*generated.GetPublicTransactionDataResponse, error) { - publicTxData, sysError := s.enclave.GetPublicTransactionData(ctx, &common.QueryPagination{ - Offset: uint64(req.Pagination.GetOffset()), - Size: uint(req.Pagination.GetSize()), - }) - if sysError != nil { - s.logger.Error("Error getting tx data", log.ErrKey, sysError) - // todo do we want to exit here or return the usual response - return &generated.GetPublicTransactionDataResponse{SystemError: toRPCError(sysError)}, nil - } - - marshal, err := json.Marshal(publicTxData) - if err != nil { - s.logger.Error("Error getting tx data", log.ErrKey, err) - return &generated.GetPublicTransactionDataResponse{SystemError: toRPCError(sysError)}, nil - } - - return &generated.GetPublicTransactionDataResponse{PublicTransactionData: marshal}, nil -} - func (s *RPCServer) EnclavePublicConfig(ctx context.Context, _ *generated.EnclavePublicConfigRequest) (*generated.EnclavePublicConfigResponse, error) { enclaveCfg, sysError := s.enclave.EnclavePublicConfig(ctx) if sysError != nil { diff --git a/go/enclave/storage/db_init.go b/go/enclave/storage/db_init.go index 853143272d..5d38478474 100644 --- a/go/enclave/storage/db_init.go +++ b/go/enclave/storage/db_init.go @@ -24,7 +24,7 @@ func CreateDBFromConfig(cfg *config.EnclaveConfig, logger gethlog.Logger) (encla return sqlite.CreateTemporarySQLiteDB(cfg.HostID.String(), "mode=memory&cache=shared&_foreign_keys=on", *cfg, logger) } - if !cfg.WillAttest { + if !cfg.WillAttest && len(cfg.SqliteDBPath) > 0 { // persistent but not secure in an enclave, we'll connect to a throwaway sqlite DB and test out persistence/sql implementations logger.Warn("Attestation is disabled, using a basic sqlite DB for persistence") // when we want to test persistence after node restart the SqliteDBPath should be set @@ -32,6 +32,10 @@ func CreateDBFromConfig(cfg *config.EnclaveConfig, logger gethlog.Logger) (encla return sqlite.CreateTemporarySQLiteDB(cfg.SqliteDBPath, "_foreign_keys=on", *cfg, logger) } + if !cfg.WillAttest && len(cfg.EdgelessDBHost) > 0 { + logger.Warn("Attestation is disabled, using a simulation edglessdb DB for persistence") + return getEdgelessDB(cfg, logger) + } // persistent and with attestation means connecting to edgeless DB in a trusted enclave from a secure enclave logger.Info(fmt.Sprintf("Preparing Edgeless DB connection to %s...", cfg.EdgelessDBHost)) return getEdgelessDB(cfg, logger) @@ -42,11 +46,8 @@ func validateDBConf(cfg *config.EnclaveConfig) error { if cfg.UseInMemoryDB && cfg.EdgelessDBHost != "" { return fmt.Errorf("invalid db config, useInMemoryDB=true so EdgelessDB host not expected, but EdgelessDBHost=%s", cfg.EdgelessDBHost) } - if !cfg.WillAttest && cfg.EdgelessDBHost != "" { - return fmt.Errorf("invalid db config, willAttest=false so EdgelessDB host not supported, but EdgelessDBHost=%s", cfg.EdgelessDBHost) - } - if !cfg.UseInMemoryDB && cfg.WillAttest && cfg.EdgelessDBHost == "" { - return fmt.Errorf("useInMemoryDB=false, willAttest=true so expected an EdgelessDB host but none was provided") + if cfg.UseInMemoryDB && cfg.WillAttest { + return fmt.Errorf("useInMemoryDB=true, willAttest=true : cannot support attestation for inmemory mode") } if cfg.SqliteDBPath != "" && cfg.UseInMemoryDB { return fmt.Errorf("useInMemoryDB=true so sqlite database will not be used and no path is needed, but sqliteDBPath=%s", cfg.SqliteDBPath) diff --git a/go/enclave/storage/init/edgelessdb/edb_attestation.go b/go/enclave/storage/init/edgelessdb/edb_attestation.go index f377bd2d4b..3d7a409a43 100644 --- a/go/enclave/storage/init/edgelessdb/edb_attestation.go +++ b/go/enclave/storage/init/edgelessdb/edb_attestation.go @@ -20,6 +20,8 @@ import ( "net/http" "net/url" + "github.com/ten-protocol/go-ten/go/config" + gethlog "github.com/ethereum/go-ethereum/log" "github.com/edgelesssys/ego/attestation" @@ -60,10 +62,10 @@ var defaultEDBConstraints = &EdgelessAttestationConstraints{ } // performEDBRemoteAttestation perform the SGX enclave attestation to verify edb running in a legit enclave and with expected edb version etc. -func performEDBRemoteAttestation(edbHost string, constraints *EdgelessAttestationConstraints, logger gethlog.Logger) (string, error) { +func performEDBRemoteAttestation(config config.EnclaveConfig, edbHost string, constraints *EdgelessAttestationConstraints, logger gethlog.Logger) (string, error) { logger.Info("Verifying attestation from edgeless DB...") edbHTTPAddr := fmt.Sprintf("%s:%s", edbHost, edbHTTPPort) - certs, tcbStatus, err := performRAAndFetchTLSCert(edbHTTPAddr, constraints) + certs, tcbStatus, err := performRAAndFetchTLSCert(config, edbHTTPAddr, constraints) if err != nil { // todo (#1550) - should we check the error type with: err == attestation.ErrTCBLevelInvalid? // for now it's maximum strictness (we can revisit this and permit some tcbStatuses if desired) @@ -80,14 +82,14 @@ func performEDBRemoteAttestation(edbHost string, constraints *EdgelessAttestatio // performRAAndFetchTLSCert gets the TLS certificate from the Edgeless DB server in PEM format. It performs remote attestation // to verify the certificate. Attestation constraints must be provided to validate against. -func performRAAndFetchTLSCert(host string, constraints *EdgelessAttestationConstraints) ([]*pem.Block, tcbstatus.Status, error) { +func performRAAndFetchTLSCert(enclaveConfig config.EnclaveConfig, host string, constraints *EdgelessAttestationConstraints) ([]*pem.Block, tcbstatus.Status, error) { // we don't need to verify the TLS because we will be verifying the attestation report and that can't be faked cert, quote, err := httpGetCertQuote(&tls.Config{InsecureSkipVerify: true}, host, quoteEndpoint) //nolint:gosec if err != nil { return nil, tcbstatus.Unknown, err } - if len(quote) == 0 { + if len(quote) == 0 && enclaveConfig.WillAttest { return nil, tcbstatus.Unknown, errors.New("no quote found, attestation failed") } @@ -106,6 +108,10 @@ func performRAAndFetchTLSCert(host string, constraints *EdgelessAttestationConst certs = append(certs, block) } + if !enclaveConfig.WillAttest { + return certs, tcbstatus.Unknown, nil + } + report, verifyErr := enclave.VerifyRemoteReport(quote) // depending on how strict you are being, some invalid TCBLevels would be acceptable (e.g. something might need an // upgrade but not have any known vulnerabilities). That's why we proceed when TCBLevelInvalid and let caller decide diff --git a/go/enclave/storage/init/edgelessdb/edgelessdb.go b/go/enclave/storage/init/edgelessdb/edgelessdb.go index 09aaa69ba9..ebe56d4028 100644 --- a/go/enclave/storage/init/edgelessdb/edgelessdb.go +++ b/go/enclave/storage/init/edgelessdb/edgelessdb.go @@ -138,7 +138,7 @@ func Connector(edbCfg *Config, config config.EnclaveConfig, logger gethlog.Logge } // load credentials from encrypted persistence if available, otherwise perform handshake and initialization to prepare them - edbCredentials, err := getHandshakeCredentials(edbCfg, logger) + edbCredentials, err := getHandshakeCredentials(config, edbCfg, logger) if err != nil { return nil, err } @@ -181,7 +181,7 @@ func waitForEdgelessDBToStart(edbHost string, logger gethlog.Logger) error { edgelessDBStartTimeout, edgelessHTTPAddr, err) } -func getHandshakeCredentials(edbCfg *Config, logger gethlog.Logger) (*Credentials, error) { +func getHandshakeCredentials(enclaveConfig config.EnclaveConfig, edbCfg *Config, logger gethlog.Logger) (*Credentials, error) { // if we have previously performed the handshake we can retrieve the creds from disk and proceed edbCreds, found, err := loadCredentialsFromFile() if err != nil { @@ -189,7 +189,7 @@ func getHandshakeCredentials(edbCfg *Config, logger gethlog.Logger) (*Credential } if !found { // they don't exist on disk so we have to perform the handshake and set them up - edbCreds, err = performHandshake(edbCfg, logger) + edbCreds, err = performHandshake(enclaveConfig, edbCfg, logger) if err != nil { return nil, err } @@ -216,7 +216,7 @@ func loadCredentialsFromFile() (*Credentials, bool, error) { return edbCreds, true, nil } -func performHandshake(edbCfg *Config, logger gethlog.Logger) (*Credentials, error) { +func performHandshake(enclaveConfig config.EnclaveConfig, edbCfg *Config, logger gethlog.Logger) (*Credentials, error) { // we need to make sure this dir exists before we start read/writing files in there err := os.MkdirAll(dataDir, 0o644) if err != nil { @@ -229,7 +229,7 @@ func performHandshake(edbCfg *Config, logger gethlog.Logger) (*Credentials, erro // The trust path is as follows: // 1. The Obscuro Enclave performs RA on the database enclave, and the RA object contains a certificate which only the database enclave controls. // 2. Connecting to the database via mutually authenticated TLS using the above certificate, will give the Obscuro enclave confidence that it is only giving data away to some code and hardware it trusts. - edbPEM, err := performEDBRemoteAttestation(edbCfg.Host, defaultEDBConstraints, logger) + edbPEM, err := performEDBRemoteAttestation(enclaveConfig, edbCfg.Host, defaultEDBConstraints, logger) if err != nil { return nil, err } diff --git a/go/host/enclave/guardian.go b/go/host/enclave/guardian.go index 83fa49894e..2a4374a869 100644 --- a/go/host/enclave/guardian.go +++ b/go/host/enclave/guardian.go @@ -128,7 +128,7 @@ func (g *Guardian) Start() error { // note: not keeping the unsubscribe functions because the lifespan of the guardian is the same as the host g.sl.L1Repo().Subscribe(g) - g.sl.L2Repo().Subscribe(g) + g.sl.L2Repo().SubscribeNewBatches(g) // start streaming data from the enclave go g.streamEnclaveData() @@ -659,8 +659,10 @@ func (g *Guardian) streamEnclaveData() { g.logger.Error("Failed to broadcast batch", log.BatchHashKey, resp.Batch.Hash(), log.ErrKey, err) } } else { - g.logger.Debug("Received batch from enclave", log.BatchSeqNoKey, resp.Batch.Header.SequencerOrderNo, log.BatchHashKey, resp.Batch.Hash()) + g.logger.Debug("Received validated batch from enclave", log.BatchSeqNoKey, resp.Batch.Header.SequencerOrderNo, log.BatchHashKey, resp.Batch.Hash()) } + // Notify the L2 repo that an enclave has validated a batch, so it can update its validated head and notify subscribers + g.sl.L2Repo().NotifyNewValidatedHead(resp.Batch) g.state.OnProcessedBatch(resp.Batch.Header.SequencerOrderNo) } diff --git a/go/host/host.go b/go/host/host.go index 14b83e5c37..13ed1fe5ed 100644 --- a/go/host/host.go +++ b/go/host/host.go @@ -97,7 +97,7 @@ func NewHost(config *config.HostConfig, hostServices *ServicesRegistry, p2p host l2Repo := l2.NewBatchRepository(config, hostServices, hostStorage, logger) subsService := events.NewLogEventManager(hostServices, logger) - l2Repo.Subscribe(batchListener{newHeads: host.newHeads}) + l2Repo.SubscribeValidatedBatches(batchListener{newHeads: host.newHeads}) hostServices.RegisterService(hostcommon.P2PName, p2p) hostServices.RegisterService(hostcommon.L1BlockRepositoryName, l1Repo) maxWaitForL1Receipt := 6 * config.L1BlockTime // wait ~10 blocks to see if tx gets published before retrying diff --git a/go/host/l2/batchrepository.go b/go/host/l2/batchrepository.go index 27ed9fff7a..4d89f01fa5 100644 --- a/go/host/l2/batchrepository.go +++ b/go/host/l2/batchrepository.go @@ -36,7 +36,8 @@ type batchRepoServiceLocator interface { // Repository is responsible for storing and retrieving batches from the database // If it can't find a batch it will request it from peers. It also subscribes for batch requests from peers and responds to them. type Repository struct { - batchSubscribers *subscription.Manager[host.L2BatchHandler] + batchSubscribers *subscription.Manager[host.L2BatchHandler] // notified when a new batch is added to the repository + validatedBatchSubscribers *subscription.Manager[host.L2BatchHandler] // notified when a new batch is validated by the enclave sl batchRepoServiceLocator storage storage.Storage @@ -46,6 +47,10 @@ type Repository struct { latestBatchSeqNo *big.Int latestSeqNoMutex sync.Mutex + // high watermark for batch sequence numbers validated by our enclave so far. + latestValidatedSeqNo *big.Int + latestValidatedMutex sync.Mutex + // The repository requests batches from peers asynchronously, we don't want to repeatedly spam out requests if we // haven't received a response yet, but we also don't want to wait forever if there's no response. // So we keep track of the last request time and what was requested, using a mutex to avoid concurrent access errors on them @@ -59,13 +64,15 @@ type Repository struct { func NewBatchRepository(cfg *config.HostConfig, hostService batchRepoServiceLocator, storage storage.Storage, logger gethlog.Logger) *Repository { return &Repository{ - batchSubscribers: subscription.NewManager[host.L2BatchHandler](), - sl: hostService, - storage: storage, - isSequencer: cfg.NodeType == common.Sequencer, - latestBatchSeqNo: big.NewInt(0), - running: atomic.Bool{}, - logger: logger, + batchSubscribers: subscription.NewManager[host.L2BatchHandler](), + validatedBatchSubscribers: subscription.NewManager[host.L2BatchHandler](), + sl: hostService, + storage: storage, + isSequencer: cfg.NodeType == common.Sequencer, + latestBatchSeqNo: big.NewInt(0), + latestValidatedSeqNo: big.NewInt(0), + running: atomic.Bool{}, + logger: logger, } } @@ -144,11 +151,15 @@ func (r *Repository) HandleBatchRequest(requesterID string, fromSeqNo *big.Int) } } -// Subscribe registers a handler to be notified of new head batches as they arrive, returns unsubscribe func -func (r *Repository) Subscribe(handler host.L2BatchHandler) func() { +// SubscribeNewBatches registers a handler to be notified of new head batches as they arrive, returns unsubscribe func +func (r *Repository) SubscribeNewBatches(handler host.L2BatchHandler) func() { return r.batchSubscribers.Subscribe(handler) } +func (r *Repository) SubscribeValidatedBatches(handler host.L2BatchHandler) func() { + return r.validatedBatchSubscribers.Subscribe(handler) +} + func (r *Repository) FetchBatchBySeqNo(ctx context.Context, seqNo *big.Int) (*common.ExtBatch, error) { b, err := r.storage.FetchBatchBySeqNo(seqNo.Uint64()) if err != nil { @@ -190,6 +201,19 @@ func (r *Repository) AddBatch(batch *common.ExtBatch) error { return nil } +// NotifyNewValidatedHead - called after an enclave validates a batch, to update the repo's validated head and notify subscribers +func (r *Repository) NotifyNewValidatedHead(batch *common.ExtBatch) { + r.latestValidatedMutex.Lock() + defer r.latestValidatedMutex.Unlock() + if batch.SeqNo().Cmp(r.latestValidatedSeqNo) > 0 { + r.latestValidatedSeqNo = batch.SeqNo() + } + // notify validated batch subscribers, a new batch has been successfully processed by an enclave + for _, subscriber := range r.validatedBatchSubscribers.Subscribers() { + go subscriber.HandleBatch(batch) + } +} + func (r *Repository) fetchBatchFallbackToEnclave(ctx context.Context, seqNo *big.Int) (*common.ExtBatch, error) { b, err := r.sl.Enclaves().LookupBatchBySeqNo(ctx, seqNo) if err != nil { diff --git a/go/host/rpc/clientapi/client_api_filter.go b/go/host/rpc/clientapi/client_api_filter.go index 7af780cda1..238f5d5abf 100644 --- a/go/host/rpc/clientapi/client_api_filter.go +++ b/go/host/rpc/clientapi/client_api_filter.go @@ -62,6 +62,7 @@ func (api *FilterAPI) Logs(ctx context.Context, encryptedParams common.Encrypted }) go subscriptioncommon.HandleUnsubscribe(subscription, &unsubscribed, func() { api.host.UnsubscribeLogs(subscription.ID) + unsubscribed.Store(true) }) return subscription, nil } diff --git a/go/host/rpc/clientapi/client_api_scan.go b/go/host/rpc/clientapi/client_api_scan.go index 359f7ca1fc..41dd7ff1bc 100644 --- a/go/host/rpc/clientapi/client_api_scan.go +++ b/go/host/rpc/clientapi/client_api_scan.go @@ -34,7 +34,7 @@ func (s *ScanAPI) GetTransaction(hash gethcommon.Hash) (*common.PublicTransactio return s.host.Storage().FetchTransaction(hash) } -// GetTotalTxCount returns the number of recorded transactions on the network. +// GetTotalTransactionCount returns the number of recorded transactions on the network. func (s *ScanAPI) GetTotalTransactionCount() (*big.Int, error) { return s.host.Storage().FetchTotalTxCount() } @@ -90,8 +90,8 @@ func (s *ScanAPI) GetLatestRollupHeader() (*common.RollupHeader, error) { } // GetPublicTransactionData returns a paginated list of transaction data -func (s *ScanAPI) GetPublicTransactionData(ctx context.Context, pagination *common.QueryPagination) (*common.TransactionListingResponse, error) { - return s.host.EnclaveClient().GetPublicTransactionData(ctx, pagination) +func (s *ScanAPI) GetPublicTransactionData(pagination *common.QueryPagination) (*common.TransactionListingResponse, error) { + return s.host.Storage().FetchTransactionListing(pagination) } // GetBlockListing returns a paginated list of blocks that include rollups diff --git a/go/host/rpc/enclaverpc/enclave_client.go b/go/host/rpc/enclaverpc/enclave_client.go index d8ced83449..59cfa864ed 100644 --- a/go/host/rpc/enclaverpc/enclave_client.go +++ b/go/host/rpc/enclaverpc/enclave_client.go @@ -598,32 +598,6 @@ func (c *Client) GetCustomQuery(ctx context.Context, encryptedParams common.Encr return responses.ToEnclaveResponse(response.EncodedEnclaveResponse), nil } -func (c *Client) GetPublicTransactionData(ctx context.Context, pagination *common.QueryPagination) (*common.TransactionListingResponse, common.SystemError) { - timeoutCtx, cancel := context.WithTimeout(ctx, c.enclaveRPCTimeout) - defer cancel() - - response, err := c.protoClient.GetPublicTransactionData(timeoutCtx, &generated.GetPublicTransactionDataRequest{ - Pagination: &generated.Pagination{ - Offset: int32(pagination.Offset), - Size: int32(pagination.Size), - }, - }) - if err != nil { - return nil, syserr.NewRPCError(err) - } - if response != nil && response.SystemError != nil { - return nil, syserr.NewInternalError(fmt.Errorf("%s", response.SystemError.ErrorString)) - } - - var result common.TransactionListingResponse - err = json.Unmarshal(response.PublicTransactionData, &result) - if err != nil { - return nil, syserr.NewInternalError(fmt.Errorf("%s", response.SystemError.ErrorString)) - } - - return &result, nil -} - func (c *Client) EnclavePublicConfig(ctx context.Context) (*common.EnclavePublicConfig, common.SystemError) { timeoutCtx, cancel := context.WithTimeout(ctx, c.enclaveRPCTimeout) defer cancel() diff --git a/go/host/storage/hostdb/batch.go b/go/host/storage/hostdb/batch.go index 2ff58a12cb..ae908facc0 100644 --- a/go/host/storage/hostdb/batch.go +++ b/go/host/storage/hostdb/batch.go @@ -13,15 +13,13 @@ import ( ) const ( - selectTxCount = "SELECT total FROM transaction_count WHERE id = 1" - selectTxSeqNo = "SELECT full_hash, b_sequence FROM transactions_host WHERE hash = " selectBatch = "SELECT sequence, full_hash, hash, height, ext_batch FROM batch_host" selectExtBatch = "SELECT ext_batch FROM batch_host" selectLatestBatch = "SELECT sequence, full_hash, hash, height, ext_batch FROM batch_host ORDER BY sequence DESC LIMIT 1" - selectTxsAndBatch = "SELECT t.hash FROM transactions_host t JOIN batch_host b ON t.b_sequence = b.sequence WHERE b.full_hash = " - selectBatchSeqByTx = "SELECT b_sequence FROM transactions_host WHERE hash = " - selectTxBySeq = "SELECT full_hash FROM transactions_host WHERE b_sequence = " - selectBatchTxs = "SELECT t.full_hash, b.sequence, b.height, b.ext_batch FROM transactions_host t JOIN batch_host b ON t.b_sequence = b.sequence" + selectTxsAndBatch = "SELECT t.hash FROM transaction_host t JOIN batch_host b ON t.b_sequence = b.sequence WHERE b.hash = " + selectBatchSeqByTx = "SELECT b_sequence FROM transaction_host WHERE hash = " + selectTxBySeq = "SELECT full_hash FROM transaction_host WHERE b_sequence = " + selectBatchTxs = "SELECT t.full_hash, b.sequence, b.height, b.ext_batch FROM transaction_host t JOIN batch_host b ON t.b_sequence = b.sequence" ) // AddBatch adds a batch and its header to the DB @@ -71,7 +69,7 @@ func AddBatch(dbtx *dbTransaction, statements *SQLStatements, batch *common.ExtB func GetBatchListing(db HostDB, pagination *common.QueryPagination) (*common.BatchListingResponse, error) { headBatch, err := GetCurrentHeadBatch(db) if err != nil { - return nil, err + return nil, fmt.Errorf("failed to fetch current head batch - %w", err) } batchesFrom := headBatch.SequencerOrderNo.Uint64() - pagination.Offset batchesTo := int(batchesFrom) - int(pagination.Size) + 1 @@ -84,7 +82,7 @@ func GetBatchListing(db HostDB, pagination *common.QueryPagination) (*common.Bat for i := batchesFrom; i >= uint64(batchesTo); i-- { batch, err := GetPublicBatchBySequenceNumber(db, i) if err != nil && !errors.Is(err, errutil.ErrNotFound) { - return nil, err + return nil, fmt.Errorf("failed to fetch batch by sequence number - %w", err) } if batch != nil { batches = append(batches, *batch) @@ -102,7 +100,7 @@ func GetBatchListing(db HostDB, pagination *common.QueryPagination) (*common.Bat func GetBatchListingDeprecated(db HostDB, pagination *common.QueryPagination) (*common.BatchListingResponseDeprecated, error) { headBatch, err := GetCurrentHeadBatch(db) if err != nil { - return nil, err + return nil, fmt.Errorf("failed to fetch head batch - %w", err) } batchesFrom := headBatch.SequencerOrderNo.Uint64() - pagination.Offset batchesTo := int(batchesFrom) - int(pagination.Size) + 1 @@ -176,7 +174,7 @@ func GetBatchHashByNumber(db HostDB, number *big.Int) (*gethcommon.Hash, error) whereQuery := " WHERE height=" + db.GetSQLStatement().Placeholder batch, err := fetchBatchHeader(db.GetSQLDB(), whereQuery, number.Uint64()) if err != nil { - return nil, err + return nil, fmt.Errorf("failed to fetch batch header - %w", err) } l2BatchHash := batch.Hash() return &l2BatchHash, nil @@ -186,7 +184,7 @@ func GetBatchHashByNumber(db HostDB, number *big.Int) (*gethcommon.Hash, error) func GetHeadBatchHeader(db HostDB) (*common.BatchHeader, error) { batch, err := fetchHeadBatch(db.GetSQLDB()) if err != nil { - return nil, err + return nil, fmt.Errorf("failed to fetch head batch header - %w", err) } return batch.Header, nil } @@ -195,7 +193,7 @@ func GetHeadBatchHeader(db HostDB) (*common.BatchHeader, error) { func GetBatchNumber(db HostDB, txHash gethcommon.Hash) (*big.Int, error) { batchHeight, err := fetchBatchNumber(db, truncTo16(txHash)) if err != nil { - return nil, err + return nil, fmt.Errorf("failed to fetch batch height - %w", err) } return batchHeight, nil } @@ -203,7 +201,7 @@ func GetBatchNumber(db HostDB, txHash gethcommon.Hash) (*big.Int, error) { // GetBatchTxHashes returns the transaction hashes of the batch with the given hash. func GetBatchTxHashes(db HostDB, batchHash gethcommon.Hash) ([]gethcommon.Hash, error) { query := selectTxsAndBatch + db.GetSQLStatement().Placeholder - rows, err := db.GetSQLDB().Query(query, batchHash) + rows, err := db.GetSQLDB().Query(query, truncTo16(batchHash)) if err != nil { return nil, fmt.Errorf("query execution failed: %w", err) } @@ -226,42 +224,6 @@ func GetBatchTxHashes(db HostDB, batchHash gethcommon.Hash) ([]gethcommon.Hash, return transactions, nil } -// GetTotalTxCount returns the total number of batched transactions. -func GetTotalTxCount(db HostDB) (*big.Int, error) { - var totalCount int - err := db.GetSQLDB().QueryRow(selectTxCount).Scan(&totalCount) - if err != nil { - return nil, fmt.Errorf("failed to retrieve total transaction count: %w", err) - } - return big.NewInt(int64(totalCount)), nil -} - -// GetTransaction returns a transaction given its hash -func GetTransaction(db HostDB, hash gethcommon.Hash) (*common.PublicTransaction, error) { - query := selectTxSeqNo + db.GetSQLStatement().Placeholder - - var fullHash []byte - var seq int - err := db.GetSQLDB().QueryRow(query, truncTo16(hash)).Scan(&fullHash, &seq) - if err != nil { - return nil, fmt.Errorf("failed to retrieve transaction sequence number: %w", err) - } - - batch, err := GetBatchBySequenceNumber(db, uint64(seq)) - if err != nil { - return nil, fmt.Errorf("failed to retrieve batch by sequence number: %w", err) - } - - tx := &common.PublicTransaction{ - TransactionHash: gethcommon.BytesToHash(fullHash), - BatchHeight: batch.Header.Number, - BatchTimestamp: batch.Header.Time, - Finality: common.BatchFinal, - } - - return tx, nil -} - // GetPublicBatch returns the batch with the given hash. func GetPublicBatch(db HostDB, hash common.L2BatchHash) (*common.PublicBatch, error) { whereQuery := " WHERE b.hash=" + db.GetSQLStatement().Placeholder @@ -277,7 +239,7 @@ func GetBatchByTx(db HostDB, txHash gethcommon.Hash) (*common.ExtBatch, error) { if errors.Is(err, sql.ErrNoRows) { return nil, errutil.ErrNotFound } - return nil, err + return nil, fmt.Errorf("failed to execute query %s - %w", query, err) } return GetBatchBySequenceNumber(db, seqNo) } @@ -311,8 +273,8 @@ func GetBatchByHeight(db HostDB, height *big.Int) (*common.PublicBatch, error) { // GetBatchTransactions returns the TransactionListingResponse for a given batch hash func GetBatchTransactions(db HostDB, batchHash gethcommon.Hash) (*common.TransactionListingResponse, error) { - whereQuery := " WHERE b.full_hash=" + db.GetSQLStatement().Placeholder - return fetchBatchTxs(db.GetSQLDB(), whereQuery, batchHash) + whereQuery := " WHERE b.hash=" + db.GetSQLStatement().Placeholder + return fetchBatchTxs(db.GetSQLDB(), whereQuery, truncTo16(batchHash)) } func fetchBatchHeader(db *sql.DB, whereQuery string, args ...any) (*common.BatchHeader, error) { @@ -328,7 +290,7 @@ func fetchBatchHeader(db *sql.DB, whereQuery string, args ...any) (*common.Batch if errors.Is(err, sql.ErrNoRows) { return nil, errutil.ErrNotFound } - return nil, err + return nil, fmt.Errorf("failed to scan with query %s - %w", query, err) } // Decode batch var b common.ExtBatch @@ -352,7 +314,7 @@ func fetchBatchNumber(db HostDB, args ...any) (*big.Int, error) { if errors.Is(err, sql.ErrNoRows) { return nil, errutil.ErrNotFound } - return nil, err + return nil, fmt.Errorf("failed to scan with query %s - %w", query, err) } batch, err := GetPublicBatchBySequenceNumber(db, seqNo) if err != nil { @@ -380,7 +342,7 @@ func fetchPublicBatch(db *sql.DB, whereQuery string, args ...any) (*common.Publi if errors.Is(err, sql.ErrNoRows) { return nil, errutil.ErrNotFound } - return nil, err + return nil, fmt.Errorf("failed to scan with query %s - %w", query, err) } var b common.ExtBatch err = rlp.DecodeBytes(extBatch, &b) @@ -420,7 +382,7 @@ func fetchFullBatch(db *sql.DB, whereQuery string, args ...any) (*common.ExtBatc if errors.Is(err, sql.ErrNoRows) { return nil, errutil.ErrNotFound } - return nil, err + return nil, fmt.Errorf("failed to scan with query %s - %w", query, err) } var b common.ExtBatch err = rlp.DecodeBytes(extBatch, &b) @@ -490,7 +452,7 @@ func fetchTx(db HostDB, seqNo uint64) ([]common.TxHash, error) { return transactions, nil } -func fetchBatchTxs(db *sql.DB, whereQuery string, batchHash gethcommon.Hash) (*common.TransactionListingResponse, error) { +func fetchBatchTxs(db *sql.DB, whereQuery string, batchHash []byte) (*common.TransactionListingResponse, error) { query := selectBatchTxs + whereQuery rows, err := db.Query(query, batchHash) if err != nil { @@ -508,7 +470,7 @@ func fetchBatchTxs(db *sql.DB, whereQuery string, batchHash gethcommon.Hash) (*c ) err := rows.Scan(&fullHash, &sequence, &height, &extBatch) if err != nil { - return nil, err + return nil, fmt.Errorf("failed to scan with query %s - %w", query, err) } extBatchDecoded := new(common.ExtBatch) if err := rlp.DecodeBytes(extBatch, extBatchDecoded); err != nil { diff --git a/go/host/storage/hostdb/batch_test.go b/go/host/storage/hostdb/batch_test.go index 1ea3b433ce..4a32bc4282 100644 --- a/go/host/storage/hostdb/batch_test.go +++ b/go/host/storage/hostdb/batch_test.go @@ -210,35 +210,6 @@ func TestTransactionsForUnknownBatchReturnsNotFound(t *testing.T) { } } -func TestCanRetrieveTotalNumberOfTransactions(t *testing.T) { - db, _ := createSQLiteDB(t) - txHashesOne := []common.L2TxHash{gethcommon.BytesToHash([]byte("magicStringOne")), gethcommon.BytesToHash([]byte("magicStringTwo"))} - batchOne := createBatch(batchNumber, txHashesOne) - dbtx, _ := db.NewDBTransaction() - err := AddBatch(dbtx, db.GetSQLStatement(), &batchOne) - if err != nil { - t.Errorf("could not store batch. Cause: %s", err) - } - - txHashesTwo := []common.L2TxHash{gethcommon.BytesToHash([]byte("magicStringThree")), gethcommon.BytesToHash([]byte("magicStringFour"))} - batchTwo := createBatch(batchNumber+1, txHashesTwo) - - err = AddBatch(dbtx, db.GetSQLStatement(), &batchTwo) - if err != nil { - t.Errorf("could not store batch. Cause: %s", err) - } - dbtx.Write() - - totalTxs, err := GetTotalTxCount(db) - if err != nil { - t.Errorf("was not able to read total number of transactions. Cause: %s", err) - } - - if int(totalTxs.Int64()) != len(txHashesOne)+len(txHashesTwo) { - t.Errorf("total number of batch transactions was not stored correctly") - } -} - func TestGetLatestBatch(t *testing.T) { db, _ := createSQLiteDB(t) txHashesOne := []common.L2TxHash{gethcommon.BytesToHash([]byte("magicStringOne")), gethcommon.BytesToHash([]byte("magicStringTwo"))} @@ -268,32 +239,6 @@ func TestGetLatestBatch(t *testing.T) { } } -func TestGetTransaction(t *testing.T) { - db, _ := createSQLiteDB(t) - txHash1 := gethcommon.BytesToHash([]byte("magicStringOne")) - txHash2 := gethcommon.BytesToHash([]byte("magicStringOne")) - txHashes := []common.L2TxHash{txHash1, txHash2} - batchOne := createBatch(batchNumber, txHashes) - dbtx, _ := db.NewDBTransaction() - err := AddBatch(dbtx, db.GetSQLStatement(), &batchOne) - if err != nil { - t.Errorf("could not store batch. Cause: %s", err) - } - dbtx.Write() - - tx, err := GetTransaction(db, txHash2) - if err != nil { - t.Errorf("was not able to get transaction. Cause: %s", err) - } - - if tx.BatchHeight.Cmp(big.NewInt(batchNumber)) != 0 { - t.Errorf("tx batch height was not retrieved correctly") - } - if tx.TransactionHash.Cmp(txHash2) != 0 { - t.Errorf("tx hash was not retrieved correctly") - } -} - func TestGetBatchByHeight(t *testing.T) { db, _ := createSQLiteDB(t) batch1 := createBatch(batchNumber, []common.L2TxHash{}) diff --git a/go/host/storage/hostdb/block.go b/go/host/storage/hostdb/block.go index b1b01addda..922551d9c5 100644 --- a/go/host/storage/hostdb/block.go +++ b/go/host/storage/hostdb/block.go @@ -8,6 +8,10 @@ import ( "github.com/ten-protocol/go-ten/go/common" ) +const ( + selectBlocks = "SELECT id, hash, header, rollup_hash FROM block_host ORDER BY id DESC " +) + // AddBlock stores a block header with the given rollupHash it contains in the host DB func AddBlock(dbtx *dbTransaction, statements *SQLStatements, b *types.Header, rollupHash common.L2RollupHash) error { header, err := rlp.EncodeToBytes(b) @@ -34,7 +38,8 @@ func AddBlock(dbtx *dbTransaction, statements *SQLStatements, b *types.Header, r // GetBlockListing returns a paginated list of blocks in descending order against the order they were added func GetBlockListing(db HostDB, pagination *common.QueryPagination) (*common.BlockListingResponse, error) { - rows, err := db.GetSQLDB().Query(db.GetSQLStatement().SelectBlocks, pagination.Size, pagination.Offset) + query := selectBlocks + db.GetSQLStatement().Pagination + rows, err := db.GetSQLDB().Query(query, pagination.Size, pagination.Offset) if err != nil { return nil, err } diff --git a/go/host/storage/hostdb/rollup.go b/go/host/storage/hostdb/rollup.go index 537dc7b832..a07edea92d 100644 --- a/go/host/storage/hostdb/rollup.go +++ b/go/host/storage/hostdb/rollup.go @@ -17,7 +17,7 @@ const ( selectExtRollup = "SELECT ext_rollup from rollup_host r" selectLatestRollup = "SELECT ext_rollup FROM rollup_host ORDER BY time_stamp DESC LIMIT 1" selectRollupBatches = "SELECT b.sequence, b.hash, b.full_hash, b.height, b.ext_batch FROM rollup_host r JOIN batch_host b ON r.start_seq <= b.sequence AND r.end_seq >= b.sequence" - selectPublicRollup = "SELECT id, hash, start_seq, end_seq, time_stamp, ext_rollup, compression_block FROM rollup_host" + selectRollups = "SELECT id, hash, start_seq, end_seq, time_stamp, ext_rollup, compression_block FROM rollup_host" ) // AddRollup adds a rollup to the DB @@ -44,9 +44,12 @@ func AddRollup(dbtx *dbTransaction, statements *SQLStatements, rollup *common.Ex // GetRollupListing returns latest rollups given a pagination. // For example, offset 1, size 10 will return the latest 11-20 rollups. func GetRollupListing(db HostDB, pagination *common.QueryPagination) (*common.RollupListingResponse, error) { - rows, err := db.GetSQLDB().Query(db.GetSQLStatement().SelectRollups, pagination.Size, pagination.Offset) + orderQuery := " ORDER BY id DESC " + query := selectRollups + orderQuery + db.GetSQLStatement().Pagination + + rows, err := db.GetSQLDB().Query(query, pagination.Size, pagination.Offset) if err != nil { - return nil, err + return nil, fmt.Errorf("failed to execute query %s - %w", query, err) } defer rows.Close() var rollups []common.PublicRollup @@ -58,7 +61,7 @@ func GetRollupListing(db HostDB, pagination *common.QueryPagination) (*common.Ro var rollup common.PublicRollup err = rows.Scan(&id, &hash, &startSeq, &endSeq, &timeStamp, &extRollup, &compressionBlock) if err != nil { - return nil, err + return nil, fmt.Errorf("failed to scan query %s - %w", query, err) } extRollupDecoded := new(common.ExtRollup) @@ -180,7 +183,7 @@ func GetRollupBatches(db HostDB, rollupHash gethcommon.Hash) (*common.BatchListi func fetchRollupHeader(db *sql.DB, whereQuery string, args ...any) (*common.RollupHeader, error) { rollup, err := fetchExtRollup(db, whereQuery, args...) if err != nil { - return nil, err + return nil, fmt.Errorf("failed to fetch ext rollup - %w", err) } return rollup.Header, nil } @@ -228,7 +231,7 @@ func fetchHeadRollup(db *sql.DB) (*common.ExtRollup, error) { } func fetchPublicRollup(db *sql.DB, whereQuery string, args ...any) (*common.PublicRollup, error) { - query := selectPublicRollup + whereQuery + query := selectRollups + whereQuery var rollup common.PublicRollup var hash, extRollup, compressionblock []byte var id, firstSeq, lastSeq, timestamp int diff --git a/go/host/storage/hostdb/sql_statements.go b/go/host/storage/hostdb/sql_statements.go index cabb5a2553..9a7021c576 100644 --- a/go/host/storage/hostdb/sql_statements.go +++ b/go/host/storage/hostdb/sql_statements.go @@ -2,26 +2,23 @@ package hostdb // SQLStatements struct holds SQL statements for a specific database type type SQLStatements struct { - InsertBatch string - InsertTransactions string - InsertTxCount string - InsertRollup string - InsertBlock string - SelectRollups string - SelectBlocks string - SelectRollupBatches string - Placeholder string + InsertBatch string + InsertTransactions string + InsertTxCount string + InsertRollup string + InsertBlock string + Pagination string + Placeholder string } func SQLiteSQLStatements() *SQLStatements { return &SQLStatements{ InsertBatch: "INSERT INTO batch_host (sequence, full_hash, hash, height, ext_batch) VALUES (?, ?, ?, ?, ?)", - InsertTransactions: "REPLACE INTO transactions_host (hash, full_hash, b_sequence) VALUES (?, ?, ?)", + InsertTransactions: "REPLACE INTO transaction_host (hash, full_hash, b_sequence) VALUES (?, ?, ?)", InsertTxCount: "INSERT INTO transaction_count (id, total) VALUES (?, ?) ON CONFLICT(id) DO UPDATE SET total = EXCLUDED.total", InsertRollup: "INSERT INTO rollup_host (hash, start_seq, end_seq, time_stamp, ext_rollup, compression_block) values (?,?,?,?,?,?)", InsertBlock: "REPLACE INTO block_host (hash, header, rollup_hash) values (?,?,?)", - SelectRollups: "SELECT id, hash, start_seq, end_seq, time_stamp, ext_rollup, compression_block FROM rollup_host ORDER BY id DESC LIMIT ? OFFSET ?", - SelectBlocks: "SELECT id, hash, header, rollup_hash FROM block_host ORDER BY id DESC LIMIT ? OFFSET ?", + Pagination: "LIMIT ? OFFSET ?", Placeholder: "?", } } @@ -29,12 +26,11 @@ func SQLiteSQLStatements() *SQLStatements { func PostgresSQLStatements() *SQLStatements { return &SQLStatements{ InsertBatch: "INSERT INTO batch_host (sequence, full_hash, hash, height, ext_batch) VALUES ($1, $2, $3, $4, $5)", - InsertTransactions: "INSERT INTO transactions_host (hash, full_hash, b_sequence) VALUES ($1, $2, $3) ON CONFLICT (hash) DO NOTHING", + InsertTransactions: "INSERT INTO transaction_host (hash, full_hash, b_sequence) VALUES ($1, $2, $3) ON CONFLICT (hash) DO NOTHING", InsertTxCount: "INSERT INTO transaction_count (id, total) VALUES ($1, $2) ON CONFLICT (id) DO UPDATE SET total = EXCLUDED.total", InsertRollup: "INSERT INTO rollup_host (hash, start_seq, end_seq, time_stamp, ext_rollup, compression_block) values ($1, $2, $3, $4, $5, $6)", InsertBlock: "INSERT INTO block_host (hash, header, rollup_hash) VALUES ($1, $2, $3) ON CONFLICT (hash) DO NOTHING", - SelectRollups: "SELECT id, hash, start_seq, end_seq, time_stamp, ext_rollup, compression_block FROM rollup_host ORDER BY id DESC LIMIT $1 OFFSET $2", - SelectBlocks: "SELECT id, hash, header, rollup_hash FROM block_host ORDER BY id DESC LIMIT $1 OFFSET $2", + Pagination: "LIMIT $1 OFFSET $2", Placeholder: "$1", } } diff --git a/go/host/storage/hostdb/transaction.go b/go/host/storage/hostdb/transaction.go new file mode 100644 index 0000000000..2091451c23 --- /dev/null +++ b/go/host/storage/hostdb/transaction.go @@ -0,0 +1,93 @@ +package hostdb + +import ( + "fmt" + "math/big" + + gethcommon "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/rlp" + "github.com/ten-protocol/go-ten/go/common" +) + +const ( + selectTxCount = "SELECT total FROM transaction_count WHERE id = 1" + selectTx = "SELECT full_hash, b_sequence FROM transaction_host WHERE hash = " + selectTxs = "SELECT t.full_hash, b.ext_batch FROM transaction_host t JOIN batch_host b ON t.b_sequence = b.sequence ORDER BY b.height DESC " +) + +// GetTransactionListing returns a paginated list of transactions in descending order +func GetTransactionListing(db HostDB, pagination *common.QueryPagination) (*common.TransactionListingResponse, error) { + query := selectTxs + db.GetSQLStatement().Pagination + rows, err := db.GetSQLDB().Query(query, pagination.Size, pagination.Offset) + if err != nil { + return nil, fmt.Errorf("failed to execute query %s - %w", query, err) + } + defer rows.Close() + var txs []common.PublicTransaction + + for rows.Next() { + var fullHash, extBatch []byte + + err = rows.Scan(&fullHash, &extBatch) + if err != nil { + return nil, fmt.Errorf("failed to scan query %s - %w", query, err) + } + + b := new(common.ExtBatch) + if err := rlp.DecodeBytes(extBatch, b); err != nil { + return nil, fmt.Errorf("could not decode rollup hash. Cause: %w", err) + } + tx := common.PublicTransaction{ + TransactionHash: gethcommon.HexToHash(bytesToHexString(fullHash)), + BatchHeight: b.Header.Number, + BatchTimestamp: b.Header.Time, + // TODO @will this will be implemented under #3336 + Finality: common.BatchFinal, + } + txs = append(txs, tx) + } + if err = rows.Err(); err != nil { + return nil, err + } + + return &common.TransactionListingResponse{ + TransactionsData: txs, + Total: uint64(len(txs)), + }, nil +} + +// GetTransaction returns a transaction given its hash +func GetTransaction(db HostDB, hash gethcommon.Hash) (*common.PublicTransaction, error) { + query := selectTx + db.GetSQLStatement().Placeholder + + var fullHash []byte + var seq int + err := db.GetSQLDB().QueryRow(query, truncTo16(hash)).Scan(&fullHash, &seq) + if err != nil { + return nil, fmt.Errorf("failed to retrieve transaction sequence number: %w", err) + } + + batch, err := GetBatchBySequenceNumber(db, uint64(seq)) + if err != nil { + return nil, fmt.Errorf("failed to retrieve batch by sequence number: %w", err) + } + + tx := &common.PublicTransaction{ + TransactionHash: gethcommon.BytesToHash(fullHash), + BatchHeight: batch.Header.Number, + BatchTimestamp: batch.Header.Time, + Finality: common.BatchFinal, + } + + return tx, nil +} + +// GetTotalTxCount returns the total number of batched transactions +func GetTotalTxCount(db HostDB) (*big.Int, error) { + var totalCount int + err := db.GetSQLDB().QueryRow(selectTxCount).Scan(&totalCount) + if err != nil { + return nil, fmt.Errorf("failed to retrieve total transaction count: %w", err) + } + return big.NewInt(int64(totalCount)), nil +} diff --git a/go/host/storage/hostdb/transaction_test.go b/go/host/storage/hostdb/transaction_test.go new file mode 100644 index 0000000000..2df05b5ec4 --- /dev/null +++ b/go/host/storage/hostdb/transaction_test.go @@ -0,0 +1,145 @@ +package hostdb + +import ( + "math/big" + "testing" + + gethcommon "github.com/ethereum/go-ethereum/common" + "github.com/ten-protocol/go-ten/go/common" +) + +func TestGetTransactionListing(t *testing.T) { + db, _ := createSQLiteDB(t) + txHash12 := []common.L2TxHash{gethcommon.BytesToHash([]byte("magicStringOne")), gethcommon.BytesToHash([]byte("magicStringTwo"))} + batchOne := createBatch(batchNumber, txHash12) + dbtx, _ := db.NewDBTransaction() + err := AddBatch(dbtx, db.GetSQLStatement(), &batchOne) + if err != nil { + t.Errorf("could not store batch. Cause: %s", err) + } + + txHash34 := []common.L2TxHash{gethcommon.BytesToHash([]byte("magicStringThree")), gethcommon.BytesToHash([]byte("magicStringFour"))} + batchTwo := createBatch(batchNumber+1, txHash34) + + err = AddBatch(dbtx, db.GetSQLStatement(), &batchTwo) + if err != nil { + t.Errorf("could not store batch. Cause: %s", err) + } + + txHash56 := []common.L2TxHash{gethcommon.BytesToHash([]byte("magicStringFive")), gethcommon.BytesToHash([]byte("magicStringSix"))} + batchThree := createBatch(batchNumber+2, txHash56) + + err = AddBatch(dbtx, db.GetSQLStatement(), &batchThree) + if err != nil { + t.Errorf("could not store batch. Cause: %s", err) + } + dbtx.Write() + + // offset 0, size 3 + txListing, err := GetTransactionListing(db, &common.QueryPagination{Offset: 0, Size: 3}) + if err != nil { + t.Errorf("could not get tx listing. Cause: %s", err) + } + + // should be three elements + if big.NewInt(int64(txListing.Total)).Cmp(big.NewInt(3)) != 0 { + t.Errorf("tx listing was not paginated correctly") + } + + // second element should be in the third batch as they're descending + if txListing.TransactionsData[1].BatchHeight.Cmp(batchThree.Header.Number) != 0 { + t.Errorf("tx listing was not paginated correctly") + } + + // third element should be in the second batch + if txListing.TransactionsData[2].BatchHeight.Cmp(batchTwo.Header.Number) != 0 { + t.Errorf("tx listing was not paginated correctly") + } + + // page 1, size 3 + txListing1, err := GetTransactionListing(db, &common.QueryPagination{Offset: 3, Size: 3}) + if err != nil { + t.Errorf("could not get batch listing. Cause: %s", err) + } + + // should be 3 elements + if big.NewInt(int64(txListing1.Total)).Cmp(big.NewInt(3)) != 0 { + t.Errorf("tx listing was not paginated correctly") + } + + // first element should be in the second batch + if txListing1.TransactionsData[0].BatchHeight.Cmp(batchTwo.Header.Number) != 0 { + t.Errorf("tx listing was not paginated correctly") + } + + // third element should be in the first batch + if txListing1.TransactionsData[2].BatchHeight.Cmp(batchOne.Header.Number) != 0 { + t.Errorf("tx listing was not paginated correctly") + } + + // size overflow, only 6 elements + txListing2, err := GetTransactionListing(db, &common.QueryPagination{Offset: 0, Size: 7}) + if err != nil { + t.Errorf("could not get batch listing. Cause: %s", err) + } + + // should be 6 elements + if big.NewInt(int64(txListing2.Total)).Cmp(big.NewInt(6)) != 0 { + t.Errorf("tx listing was not paginated correctly") + } +} + +func TestGetTransaction(t *testing.T) { + db, _ := createSQLiteDB(t) + txHash1 := gethcommon.BytesToHash([]byte("magicStringOne")) + txHash2 := gethcommon.BytesToHash([]byte("magicStringOne")) + txHashes := []common.L2TxHash{txHash1, txHash2} + batchOne := createBatch(batchNumber, txHashes) + dbtx, _ := db.NewDBTransaction() + err := AddBatch(dbtx, db.GetSQLStatement(), &batchOne) + if err != nil { + t.Errorf("could not store batch. Cause: %s", err) + } + dbtx.Write() + + tx, err := GetTransaction(db, txHash2) + if err != nil { + t.Errorf("was not able to get transaction. Cause: %s", err) + } + + if tx.BatchHeight.Cmp(big.NewInt(batchNumber)) != 0 { + t.Errorf("tx batch height was not retrieved correctly") + } + if tx.TransactionHash.Cmp(txHash2) != 0 { + t.Errorf("tx hash was not retrieved correctly") + } +} + +func TestCanRetrieveTotalNumberOfTransactions(t *testing.T) { + db, _ := createSQLiteDB(t) + txHashesOne := []common.L2TxHash{gethcommon.BytesToHash([]byte("magicStringOne")), gethcommon.BytesToHash([]byte("magicStringTwo"))} + batchOne := createBatch(batchNumber, txHashesOne) + dbtx, _ := db.NewDBTransaction() + err := AddBatch(dbtx, db.GetSQLStatement(), &batchOne) + if err != nil { + t.Errorf("could not store batch. Cause: %s", err) + } + + txHashesTwo := []common.L2TxHash{gethcommon.BytesToHash([]byte("magicStringThree")), gethcommon.BytesToHash([]byte("magicStringFour"))} + batchTwo := createBatch(batchNumber+1, txHashesTwo) + + err = AddBatch(dbtx, db.GetSQLStatement(), &batchTwo) + if err != nil { + t.Errorf("could not store batch. Cause: %s", err) + } + dbtx.Write() + + totalTxs, err := GetTotalTxCount(db) + if err != nil { + t.Errorf("was not able to read total number of transactions. Cause: %s", err) + } + + if int(totalTxs.Int64()) != len(txHashesOne)+len(txHashesTwo) { + t.Errorf("total number of batch transactions was not stored correctly") + } +} diff --git a/go/host/storage/init/postgres/001_init.sql b/go/host/storage/init/postgres/001_init.sql index 09468d0ec7..87eece1b15 100644 --- a/go/host/storage/init/postgres/001_init.sql +++ b/go/host/storage/init/postgres/001_init.sql @@ -32,9 +32,10 @@ CREATE TABLE IF NOT EXISTS batch_host ext_batch BYTEA NOT NULL ); +CREATE INDEX IF NOT EXISTS IDX_BATCH_HASH_HOST ON batch_host USING HASH (hash); CREATE INDEX IF NOT EXISTS IDX_BATCH_HEIGHT_HOST ON batch_host (height); -CREATE TABLE IF NOT EXISTS transactions_host +CREATE TABLE IF NOT EXISTS transaction_host ( hash BYTEA PRIMARY KEY, full_hash BYTEA NOT NULL UNIQUE, @@ -42,6 +43,8 @@ CREATE TABLE IF NOT EXISTS transactions_host FOREIGN KEY (b_sequence) REFERENCES batch_host(sequence) ); +CREATE INDEX IF NOT EXISTS IDX_TX_SEQ_HOST ON transaction_host (b_sequence); + CREATE TABLE IF NOT EXISTS transaction_count ( id SERIAL PRIMARY KEY, diff --git a/go/host/storage/init/sqlite/001_init.sql b/go/host/storage/init/sqlite/001_init.sql index 6fb3352860..c299176d58 100644 --- a/go/host/storage/init/sqlite/001_init.sql +++ b/go/host/storage/init/sqlite/001_init.sql @@ -31,9 +31,10 @@ create table if not exists batch_host height int NOT NULL, ext_batch mediumblob NOT NULL ); +create index IDX_BATCH_HASH_HOST on batch_host (hash); create index IDX_BATCH_HEIGHT_HOST on batch_host (height); -create table if not exists transactions_host +create table if not exists transaction_host ( hash binary(16) PRIMARY KEY, full_hash binary(32) NOT NULL UNIQUE, diff --git a/go/host/storage/interfaces.go b/go/host/storage/interfaces.go index 6e0feef121..e8997d8451 100644 --- a/go/host/storage/interfaces.go +++ b/go/host/storage/interfaces.go @@ -48,6 +48,8 @@ type BatchResolver interface { FetchTransaction(hash gethcommon.Hash) (*common.PublicTransaction, error) // FetchBatchTransactions returns a list of public transaction data within a given batch hash FetchBatchTransactions(batchHash gethcommon.Hash) (*common.TransactionListingResponse, error) + // FetchTransactionListing returns a paginated list of public transaction data + FetchTransactionListing(pagination *common.QueryPagination) (*common.TransactionListingResponse, error) } type BlockResolver interface { diff --git a/go/host/storage/storage.go b/go/host/storage/storage.go index 5167f0bedd..9b6d1681f7 100644 --- a/go/host/storage/storage.go +++ b/go/host/storage/storage.go @@ -174,6 +174,10 @@ func (s *storageImpl) FetchBatchTransactions(batchHash gethcommon.Hash) (*common return hostdb.GetBatchTransactions(s.db, batchHash) } +func (s *storageImpl) FetchTransactionListing(pagination *common.QueryPagination) (*common.TransactionListingResponse, error) { + return hostdb.GetTransactionListing(s.db, pagination) +} + func (s *storageImpl) Close() error { return s.db.GetSQLDB().Close() } diff --git a/go/node/docker_node.go b/go/node/docker_node.go index eb67a175c4..78dc27d277 100644 --- a/go/node/docker_node.go +++ b/go/node/docker_node.go @@ -9,9 +9,7 @@ import ( "github.com/ten-protocol/go-ten/go/common/docker" ) -var ( - _enclaveDataDir = "/enclavedata" // this is how the directory is references within the enclave container -) +var _enclaveDataDir = "/enclavedata" // this is how the directory is references within the enclave container type DockerNode struct { cfg *Config @@ -179,6 +177,7 @@ func (d *DockerNode) startEnclave() error { "-maxRollupSize=65536", fmt.Sprintf("-logLevel=%d", d.cfg.logLevel), "-obscuroGenesis", "{}", + "-edgelessDBHost", d.cfg.nodeName+"-edgelessdb", ) if d.cfg.sgxEnabled { @@ -189,35 +188,29 @@ func (d *DockerNode) startEnclave() error { // prepend the entry.sh execution cmd = append([]string{"/home/obscuro/go-obscuro/go/enclave/main/entry.sh"}, cmd...) - cmd = append(cmd, - "-edgelessDBHost", d.cfg.nodeName+"-edgelessdb", - "-willAttest=true", - ) + cmd = append(cmd, "-willAttest=true") } else { - cmd = append(cmd, - "-sqliteDBPath", "/data/sqlite.db", - ) + cmd = append(cmd, "-willAttest=false") } + // we need the enclave volume to store the db credentials enclaveVolume := map[string]string{d.cfg.nodeName + "-enclave-volume": _enclaveDataDir} - _, err := docker.StartNewContainer(d.cfg.nodeName+"-enclave", d.cfg.enclaveImage, cmd, exposedPorts, envs, devices, enclaveVolume) + return err } func (d *DockerNode) startEdgelessDB() error { - if !d.cfg.sgxEnabled { - // Non-SGX hardware use sqlite database so EdgelessDB is not required. - return nil - } - envs := map[string]string{ "EDG_EDB_CERT_DNS": d.cfg.nodeName + "-edgelessdb", } + devices := map[string]string{} - devices := map[string]string{ - "/dev/sgx_enclave": "/dev/sgx_enclave", - "/dev/sgx_provision": "/dev/sgx_provision", + if d.cfg.sgxEnabled { + devices["/dev/sgx_enclave"] = "/dev/sgx_enclave" + devices["/dev/sgx_provision"] = "/dev/sgx_provision" + } else { + envs["OE_SIMULATION"] = "1" } // only set the pccsAddr env var if it's defined @@ -225,6 +218,10 @@ func (d *DockerNode) startEdgelessDB() error { envs["PCCS_ADDR"] = d.cfg.pccsAddr } + // todo - do we need this volume? + //dbVolume := map[string]string{d.cfg.nodeName + "-db-volume": "/data"} + //_, err := docker.StartNewContainer(d.cfg.nodeName+"-edgelessdb", d.cfg.edgelessDBImage, nil, nil, envs, devices, dbVolume) + _, err := docker.StartNewContainer(d.cfg.nodeName+"-edgelessdb", d.cfg.edgelessDBImage, nil, nil, envs, devices, nil) return err diff --git a/integration/eth2network/build_geth_binary.sh b/integration/eth2network/build_geth_binary.sh index 5d70c83b4c..6741f36af1 100755 --- a/integration/eth2network/build_geth_binary.sh +++ b/integration/eth2network/build_geth_binary.sh @@ -4,12 +4,14 @@ # This script downloads and builds geth from source # Requires to specify the version to clone # +echo "build geth binary" help_and_exit() { echo "" - echo "Usage: $(basename "${0}") --version=v1.14.0 " + echo "Usage: $(basename "${0}") --version=v1.14.0 --output=path_to_output" echo "" echo " version *Required* Set the version of geth to build" + echo " output *Required* Where to copy the binary" echo "" echo "" exit 1 # Exit with error explicitly @@ -24,9 +26,6 @@ build_path="${script_path}/../.build" geth_repo_path="${build_path}/geth_repo" geth_repo_bin_path="${geth_repo_path}/build/bin/geth" -# Define defaults -geth_path="${build_path}/eth2_bin" - # Fetch options for argument in "$@" do @@ -35,6 +34,7 @@ do case "$key" in --version) geth_version=${value} ;; + --output) geth_path=${value} ;; --help) help_and_exit ;; *) esac @@ -48,13 +48,6 @@ fi # Make sure .build folder exists mkdir -p "${build_path}" -# Only download geth code if binary does not exist -if [ -f "${geth_path}/geth-${geth_version}" ] -then - echo "Skipping geth build - Found binary at ${geth_path}/geth-${geth_version}" - exit 0 -fi - # Clone geth source code if the path is empty if [ -d "${geth_repo_path}" ] then @@ -65,11 +58,12 @@ fi # Build geth binary cd "${geth_repo_path}" +export GOROOT= make geth # Copy binary to the correct path mkdir -p "${geth_path}" -cp "${geth_repo_bin_path}" "${geth_path}/geth-${geth_version}" +cp "${geth_repo_bin_path}" "${geth_path}/geth" cd .. diff --git a/integration/eth2network/eth2_binaries.go b/integration/eth2network/eth2_binaries.go index a75e3d18c9..eb8ffa10ab 100644 --- a/integration/eth2network/eth2_binaries.go +++ b/integration/eth2network/eth2_binaries.go @@ -1,6 +1,7 @@ package eth2network import ( + "context" "fmt" "io" "net/http" @@ -9,11 +10,14 @@ import ( "path" "path/filepath" "runtime" + "strings" "sync" + + "github.com/codeclysm/extract/v3" ) const ( - _gethVersion = "1.12.2" + _gethVersion = "1.12.2-bed84606" _prysmVersion = "v4.0.6" ) @@ -37,43 +41,88 @@ func EnsureBinariesExist() (string, error) { panic(err) } - // build geth - if !fileExists(path.Join(basepath, _eth2BinariesRelPath, _gethFileNameVersion)) { - gethScript := path.Join(basepath, "./build_geth_binary.sh") - cmd := exec.Command("bash", gethScript, fmt.Sprintf("%s=%s", "--version", "v"+_gethVersion)) - cmd.Stderr = os.Stderr - - if out, err := cmd.Output(); err != nil { - fmt.Printf("%s\n", out) - return "", err + var wg sync.WaitGroup + prysmaticURL := fmt.Sprintf("https://github.com/prysmaticlabs/prysm/releases/download/%s/", _prysmVersion) + wg.Add(4) + go func() { + defer wg.Done() + err := checkOrDownloadBinary(_prysmBeaconChainFileNameVersion, fmt.Sprintf("%s%s", prysmaticURL, _prysmBeaconChainFileNameVersion), false) + if err != nil { + panic(err) } - } - - // download prysm files - for fileName, downloadURL := range map[string]string{ - _prysmBeaconChainFileNameVersion: fmt.Sprintf("https://github.com/prysmaticlabs/prysm/releases/download/%s/beacon-chain-%s-%s-%s", _prysmVersion, _prysmVersion, runtime.GOOS, runtime.GOARCH), - _prysmCTLFileNameVersion: fmt.Sprintf("https://github.com/prysmaticlabs/prysm/releases/download/%s/prysmctl-%s-%s-%s", _prysmVersion, _prysmVersion, runtime.GOOS, runtime.GOARCH), - _prysmValidatorFileNameVersion: fmt.Sprintf("https://github.com/prysmaticlabs/prysm/releases/download/%s/validator-%s-%s-%s", _prysmVersion, _prysmVersion, runtime.GOOS, runtime.GOARCH), - } { - expectedFilePath := path.Join(basepath, _eth2BinariesRelPath, fileName) - if !fileExists(expectedFilePath) { - err := downloadFile(expectedFilePath, downloadURL) - if err != nil { - return "", err + }() + go func() { + defer wg.Done() + err := checkOrDownloadBinary(_prysmCTLFileNameVersion, fmt.Sprintf("%s%s", prysmaticURL, _prysmCTLFileNameVersion), false) + if err != nil { + panic(err) + } + }() + go func() { + defer wg.Done() + err := checkOrDownloadBinary(_prysmValidatorFileNameVersion, fmt.Sprintf("%s%s", prysmaticURL, _prysmValidatorFileNameVersion), false) + if err != nil { + panic(err) + } + }() + go func() { + defer wg.Done() + err := checkOrDownloadBinary(_gethFileNameVersion, fmt.Sprintf("https://gethstore.blob.core.windows.net/builds/%s.tar.gz", _gethFileNameVersion), true) + if err != nil { + // geth 1.12 is not available to download for the mac, so we have to build it + println("Cannot download geth binary. Compiling from source.") + gethScript := path.Join(basepath, "./build_geth_binary.sh") + + v := strings.Split(_gethVersion, "-") + cmd := exec.Command( + "bash", + gethScript, + fmt.Sprintf("%s=%s", "--version", "v"+v[0]), + fmt.Sprintf("%s=%s", "--output", path.Join(basepath, _eth2BinariesRelPath, _gethFileNameVersion)), + ) + cmd.Stderr = os.Stderr + + if out, err := cmd.Output(); err != nil { + fmt.Printf("%s\n", out) + panic(err) } - fmt.Printf("Downloaded - %s\n", fileName) } - } + }() + wg.Wait() return path.Join(basepath, _eth2BinariesRelPath), nil } -func fileExists(filename string) bool { - info, err := os.Stat(filename) - if os.IsNotExist(err) { - return false +func checkOrDownloadBinary(fileName string, url string, unTar bool) error { + expectedFilePath := path.Join(basepath, _eth2BinariesRelPath, fileName) + if fileExists(expectedFilePath) { + return nil } - return !info.IsDir() + suffix := "" + if unTar { + suffix = ".tar.gz" + } + err := downloadFile(expectedFilePath+suffix, url) + if err != nil { + return err + } + if unTar { + f, err := os.Open(expectedFilePath + suffix) + if err != nil { + return err + } + err = extract.Gz(context.TODO(), f, path.Join(basepath, _eth2BinariesRelPath), nil) + if err != nil { + return err + } + } + fmt.Printf("Downloaded - %s\n", expectedFilePath) + return nil +} + +func fileExists(filename string) bool { + _, err := os.Stat(filename) + return !os.IsNotExist(err) } func downloadFile(filepath string, url string) error { @@ -94,6 +143,7 @@ func downloadFile(filepath string, url string) error { // Check server response if resp.StatusCode != http.StatusOK { + os.Remove(filepath) return fmt.Errorf("bad status: %s", resp.Status) } diff --git a/integration/eth2network/eth2_network.go b/integration/eth2network/eth2_network.go index 3df24cf311..b3fdad4fcd 100644 --- a/integration/eth2network/eth2_network.go +++ b/integration/eth2network/eth2_network.go @@ -9,6 +9,7 @@ import ( "os" "os/exec" "path" + "runtime" "strconv" "strings" "time" @@ -23,12 +24,19 @@ import ( ) const ( - _dataDirFlag = "--datadir" - _eth2BinariesRelPath = "../.build/eth2_bin" - _gethFileNameVersion = "geth-v" + _gethVersion - _prysmBeaconChainFileNameVersion = "beacon-chain-" + _prysmVersion - _prysmCTLFileNameVersion = "prysmctl-" + _prysmVersion - _prysmValidatorFileNameVersion = "validator-" + _prysmVersion + _eth2BinariesRelPath = "../.build/eth2_bin" + _dataDirFlag = "--datadir" + _gethBinaryName = "geth" +) + +// https://gethstore.blob.core.windows.net/builds/geth-darwin-amd64-1.14.2-35b2d07f.tar.gz +var _gethFileNameVersion = fmt.Sprintf("geth-%s-%s-%s", runtime.GOOS, runtime.GOARCH, _gethVersion) + +// https://github.com/prysmaticlabs/prysm/releases/download/v4.0.6/ +var ( + _prysmBeaconChainFileNameVersion = fmt.Sprintf("beacon-chain-%s-%s-%s", _prysmVersion, runtime.GOOS, runtime.GOARCH) + _prysmCTLFileNameVersion = fmt.Sprintf("prysmctl-%s-%s-%s", _prysmVersion, runtime.GOOS, runtime.GOARCH) + _prysmValidatorFileNameVersion = fmt.Sprintf("validator-%s-%s-%s", _prysmVersion, runtime.GOOS, runtime.GOARCH) ) type Impl struct { @@ -93,7 +101,7 @@ func NewEth2Network( prysmGenesisPath := path.Join(buildDir, "genesis.ssz") prysmConfigPath := path.Join(buildDir, "prysm_chain_config.yml") - gethBinaryPath := path.Join(binDir, _gethFileNameVersion) + gethBinaryPath := path.Join(binDir, _gethFileNameVersion, _gethBinaryName) prysmBeaconBinaryPath := path.Join(binDir, _prysmBeaconChainFileNameVersion) prysmBinaryPath := path.Join(binDir, _prysmCTLFileNameVersion) prysmValidatorBinaryPath := path.Join(binDir, _prysmValidatorFileNameVersion) diff --git a/integration/networktest/actions/setup_actions.go b/integration/networktest/actions/setup_actions.go index a6a6f02556..87efeaa46c 100644 --- a/integration/networktest/actions/setup_actions.go +++ b/integration/networktest/actions/setup_actions.go @@ -31,7 +31,11 @@ func (c *CreateTestUser) Run(ctx context.Context, network networktest.NetworkCon if err != nil { return ctx, fmt.Errorf("failed to get required gateway URL: %w", err) } - user, err = userwallet.NewGatewayUser(wal, gwURL, logger) + gwWSURL, err := network.GetGatewayWSURL() + if err != nil { + return ctx, fmt.Errorf("failed to get required gateway WS URL: %w", err) + } + user, err = userwallet.NewGatewayUser(wal, gwURL, gwWSURL, logger) if err != nil { return ctx, fmt.Errorf("failed to create gateway user: %w", err) } diff --git a/integration/networktest/actions/subscription_actions.go b/integration/networktest/actions/subscription_actions.go new file mode 100644 index 0000000000..99ab7a27af --- /dev/null +++ b/integration/networktest/actions/subscription_actions.go @@ -0,0 +1,74 @@ +package actions + +import ( + "context" + "fmt" + "time" + + "github.com/ethereum/go-ethereum/core/types" + "github.com/ten-protocol/go-ten/integration/networktest" + "github.com/ten-protocol/go-ten/integration/networktest/userwallet" +) + +type recordNewHeadsSubscriptionAction struct { + duration time.Duration + gatewayUser int // -1 if not using gateway, else test user index to get gateway from + + recordedHeads []*types.Header +} + +func (r *recordNewHeadsSubscriptionAction) Run(ctx context.Context, network networktest.NetworkConnector) (context.Context, error) { + // get gateway address for first user + user, err := FetchTestUser(ctx, r.gatewayUser) + if err != nil { + return ctx, err + } + // verify user is a gateway user + gwUser, ok := user.(*userwallet.GatewayUser) + if !ok { + return ctx, fmt.Errorf("user is not a gateway user") + } + ethClient, err := gwUser.WSClient() + if err != nil { + return ctx, err + } + headsCh := make(chan *types.Header) + sub, err := ethClient.SubscribeNewHead(ctx, headsCh) + if err != nil { + return nil, err + } + startTime := time.Now() + fmt.Println("Listening for new heads") + // read from headsCh for duration or until subscription is closed + for time.Since(startTime) < r.duration { + select { + case head := <-headsCh: + // read and store head from headsCh, then continue listening if duration has not expired + fmt.Printf("Received new head: %v\n", head.Number) + r.recordedHeads = append(r.recordedHeads, head) + case <-time.After(500 * time.Millisecond): + // no new head received, continue listening if duration has not expired + case <-sub.Err(): + // subscription closed + return ctx, fmt.Errorf("subscription closed unexpectedly") + case <-ctx.Done(): + sub.Unsubscribe() + return ctx, fmt.Errorf("context cancelled") + } + } + sub.Unsubscribe() + return ctx, nil +} + +func (r *recordNewHeadsSubscriptionAction) Verify(_ context.Context, _ networktest.NetworkConnector) error { + if len(r.recordedHeads) == 0 { + return fmt.Errorf("no new heads received during the %s period", r.duration) + } + return nil +} + +func RecordNewHeadsSubscription(duration time.Duration) networktest.Action { + // for now this test expects a gateway user and tests via the gateway + // todo: add support for testing without a gateway (need to add newHeads subscription to ObsClient) + return &recordNewHeadsSubscriptionAction{duration: duration, gatewayUser: 0} +} diff --git a/integration/networktest/env/network_setup.go b/integration/networktest/env/network_setup.go index 86d45bb8e7..06ae70ab75 100644 --- a/integration/networktest/env/network_setup.go +++ b/integration/networktest/env/network_setup.go @@ -24,7 +24,8 @@ func SepoliaTestnet(opts ...TestnetEnvOption) networktest.Environment { []string{"http://erpc.sepolia-testnet.ten.xyz:80"}, "http://sepolia-testnet-faucet.uksouth.azurecontainer.io/fund/eth", "https://rpc.sepolia.org/", - "https://testnet.ten.xyz", // :81 for websocket + "https://testnet.ten.xyz", + "wss://testnet.ten.xyz:81", ) return newTestnetEnv(connector, opts...) } @@ -36,6 +37,7 @@ func UATTestnet(opts ...TestnetEnvOption) networktest.Environment { "http://uat-testnet-faucet.uksouth.azurecontainer.io/fund/eth", "ws://uat-testnet-eth2network.uksouth.cloudapp.azure.com:9000", "https://uat-testnet.ten.xyz", + "wss://uat-testnet.ten.xyz:81", ) return newTestnetEnv(connector, opts...) } @@ -47,6 +49,7 @@ func DevTestnet(opts ...TestnetEnvOption) networktest.Environment { "http://dev-testnet-faucet.uksouth.azurecontainer.io/fund/eth", "ws://dev-testnet-eth2network.uksouth.cloudapp.azure.com:9000", "https://dev-testnet.ten.xyz", + "wss://dev-testnet.ten.xyz:81", ) return newTestnetEnv(connector, opts...) } diff --git a/integration/networktest/env/testnet.go b/integration/networktest/env/testnet.go index f71ea82703..dd6512abee 100644 --- a/integration/networktest/env/testnet.go +++ b/integration/networktest/env/testnet.go @@ -33,16 +33,18 @@ type testnetConnector struct { faucetHTTPAddress string l1RPCURL string tenGatewayURL string + tenGatewayWSURL string faucetWallet userwallet.User } -func newTestnetConnector(seqRPCAddr string, validatorRPCAddressses []string, faucetHTTPAddress string, l1WSURL string, tenGatewayURL string) *testnetConnector { +func newTestnetConnector(seqRPCAddr string, validatorRPCAddressses []string, faucetHTTPAddress string, l1WSURL string, tenGatewayURL string, tenGatewayWSURL string) *testnetConnector { return &testnetConnector{ seqRPCAddress: seqRPCAddr, validatorRPCAddresses: validatorRPCAddressses, faucetHTTPAddress: faucetHTTPAddress, l1RPCURL: l1WSURL, tenGatewayURL: tenGatewayURL, + tenGatewayWSURL: tenGatewayWSURL, } } @@ -146,3 +148,7 @@ func (t *testnetConnector) GetGatewayClient() (ethadapter.EthClient, error) { func (t *testnetConnector) GetGatewayURL() (string, error) { return t.tenGatewayURL, nil } + +func (t *testnetConnector) GetGatewayWSURL() (string, error) { + return t.tenGatewayWSURL, nil +} diff --git a/integration/networktest/interfaces.go b/integration/networktest/interfaces.go index c751328ae8..ac8d9aba25 100644 --- a/integration/networktest/interfaces.go +++ b/integration/networktest/interfaces.go @@ -26,6 +26,7 @@ type NetworkConnector interface { GetL1Client() (ethadapter.EthClient, error) GetMCOwnerWallet() (wallet.Wallet, error) // wallet that owns the management contract (network admin) GetGatewayURL() (string, error) + GetGatewayWSURL() (string, error) } // Action is any step in a test, they will typically be either minimally small steps in the test or they will be containers diff --git a/integration/networktest/tests/subscription/subscriptions_test.go b/integration/networktest/tests/subscription/subscriptions_test.go new file mode 100644 index 0000000000..1f86243b9e --- /dev/null +++ b/integration/networktest/tests/subscription/subscriptions_test.go @@ -0,0 +1,28 @@ +package subscription + +import ( + "testing" + "time" + + "github.com/ten-protocol/go-ten/integration/networktest" + "github.com/ten-protocol/go-ten/integration/networktest/actions" + "github.com/ten-protocol/go-ten/integration/networktest/env" + "github.com/ten-protocol/go-ten/integration/simulation/devnetwork" +) + +func TestGatewayNewHeadsSubscription(t *testing.T) { + networktest.TestOnlyRunsInIDE(t) + networktest.Run( + "gateway-new-heads-subscription", + t, + env.LocalDevNetwork(devnetwork.WithGateway()), + actions.Series( + // user not technically needed, but we need a gateway address to use + &actions.CreateTestUser{UserID: 0, UseGateway: true}, + actions.SetContextValue(actions.KeyNumberOfTestUsers, 1), + + // Record new heads for specified duration, verify that the subscription is working + actions.RecordNewHeadsSubscription(20*time.Second), + ), + ) +} diff --git a/integration/networktest/userwallet/gateway.go b/integration/networktest/userwallet/gateway.go index 0853595489..03fa361a9d 100644 --- a/integration/networktest/userwallet/gateway.go +++ b/integration/networktest/userwallet/gateway.go @@ -20,8 +20,9 @@ import ( type GatewayUser struct { wal wallet.Wallet - gwLib *lib.TGLib // TenGateway utility - client *ethclient.Client + gwLib *lib.TGLib // TenGateway utility + client *ethclient.Client + wsClient *ethclient.Client // lazily initialized websocket client // state managed by the wallet nonce uint64 @@ -29,8 +30,8 @@ type GatewayUser struct { logger gethlog.Logger } -func NewGatewayUser(wal wallet.Wallet, gatewayURL string, logger gethlog.Logger) (*GatewayUser, error) { - gwLib := lib.NewTenGatewayLibrary(gatewayURL, "") // not providing wsURL for now, add if we need it +func NewGatewayUser(wal wallet.Wallet, gatewayURL string, gatewayWSURL string, logger gethlog.Logger) (*GatewayUser, error) { + gwLib := lib.NewTenGatewayLibrary(gatewayURL, gatewayWSURL) err := gwLib.Join() if err != nil { @@ -112,3 +113,14 @@ func (g *GatewayUser) NativeBalance(ctx context.Context) (*big.Int, error) { func (g *GatewayUser) Wallet() wallet.Wallet { return g.wal } + +func (g *GatewayUser) WSClient() (*ethclient.Client, error) { + if g.wsClient == nil { + var err error + g.wsClient, err = ethclient.Dial(g.gwLib.WS()) + if err != nil { + return nil, fmt.Errorf("failed to dial TenGateway WS: %w", err) + } + } + return g.wsClient, nil +} diff --git a/integration/simulation/devnetwork/dev_network.go b/integration/simulation/devnetwork/dev_network.go index 25cd70f86b..2315393403 100644 --- a/integration/simulation/devnetwork/dev_network.go +++ b/integration/simulation/devnetwork/dev_network.go @@ -71,6 +71,13 @@ func (s *InMemDevNetwork) GetGatewayURL() (string, error) { return fmt.Sprintf("http://localhost:%d", _gwHTTPPort), nil } +func (s *InMemDevNetwork) GetGatewayWSURL() (string, error) { + if !s.tenConfig.TenGatewayEnabled { + return "", fmt.Errorf("ten gateway not enabled") + } + return fmt.Sprintf("ws://localhost:%d", _gwWSPort), nil +} + func (s *InMemDevNetwork) GetMCOwnerWallet() (wallet.Wallet, error) { return s.networkWallets.MCOwnerWallet, nil } @@ -147,11 +154,12 @@ func (s *InMemDevNetwork) Start() { fmt.Println("Starting obscuro nodes") s.startNodes() + // sleep to allow the nodes to start + time.Sleep(10 * time.Second) + if s.tenConfig.TenGatewayEnabled { s.startTenGateway() } - // sleep to allow the nodes to start - time.Sleep(10 * time.Second) } func (s *InMemDevNetwork) GetGatewayClient() (ethadapter.EthClient, error) { diff --git a/integration/simulation/p2p/in_mem_obscuro_client.go b/integration/simulation/p2p/in_mem_obscuro_client.go index bc94156a5b..6db8332e1c 100644 --- a/integration/simulation/p2p/in_mem_obscuro_client.go +++ b/integration/simulation/p2p/in_mem_obscuro_client.go @@ -381,7 +381,7 @@ func (c *inMemObscuroClient) getPublicTransactionData(result interface{}, args [ return fmt.Errorf("first arg to %s is of type %T, expected type int", rpc.GetPublicTransactionData, args[0]) } - txs, err := c.tenScanAPI.GetPublicTransactionData(context.Background(), pagination) + txs, err := c.tenScanAPI.GetPublicTransactionData(pagination) if err != nil { return fmt.Errorf("`%s` call failed. Cause: %w", rpc.GetPublicTransactionData, err) } diff --git a/integration/simulation/simulation.go b/integration/simulation/simulation.go index cde600a775..81540b3226 100644 --- a/integration/simulation/simulation.go +++ b/integration/simulation/simulation.go @@ -55,7 +55,7 @@ func (s *Simulation) Start() { // Arbitrary sleep to wait for RPC clients to get up and running // and for all l2 nodes to receive the genesis l2 batch - time.Sleep(6 * time.Second) + time.Sleep(7 * time.Second) s.bridgeFundingToObscuro() s.trackLogs() // Create log subscriptions, to validate that they're working correctly later. diff --git a/testnet/launcher/docker.go b/testnet/launcher/docker.go index 95f6bcfc81..b92936caea 100644 --- a/testnet/launcher/docker.go +++ b/testnet/launcher/docker.go @@ -65,6 +65,9 @@ func (t *Testnet) Start() error { node.WithLogLevel(t.cfg.logLevel), node.WithEdgelessDBImage("ghcr.io/edgelesssys/edgelessdb-sgx-4gb:v0.3.2"), // default edgeless db value ) + if !t.cfg.isSGXEnabled { + sequencerNodeConfig.UpdateNodeConfig(node.WithEdgelessDBImage("ghcr.io/edgelesssys/edgelessdb-sgx-1gb:v0.3.2")) + } sequencerNode := node.NewDockerNode(sequencerNodeConfig) @@ -106,6 +109,10 @@ func (t *Testnet) Start() error { node.WithEdgelessDBImage("ghcr.io/edgelesssys/edgelessdb-sgx-4gb:v0.3.2"), // default edgeless db value ) + if !t.cfg.isSGXEnabled { + validatorNodeConfig.UpdateNodeConfig(node.WithEdgelessDBImage("ghcr.io/edgelesssys/edgelessdb-sgx-1gb:v0.3.2")) + } + validatorNode := node.NewDockerNode(validatorNodeConfig) err = validatorNode.Start() diff --git a/testnet/launcher/eth2network/docker.go b/testnet/launcher/eth2network/docker.go index 144e13dbf4..0a2b5d4e4e 100644 --- a/testnet/launcher/eth2network/docker.go +++ b/testnet/launcher/eth2network/docker.go @@ -45,7 +45,10 @@ func (n *Eth2Network) Start() error { exposedPorts = append(exposedPorts, n.cfg.gethWSPort) } - _, err := docker.StartNewContainer("eth2network", "testnetobscuronet.azurecr.io/obscuronet/eth2network:latest", cmds, exposedPorts, nil, nil, nil) + // keep a volume of binaries to avoid downloading + volume := map[string]string{"eth2_bin": "/home/obscuro/go-obscuro/integration/.build/eth2_bin/"} + + _, err := docker.StartNewContainer("eth2network", "testnetobscuronet.azurecr.io/obscuronet/eth2network:latest", cmds, exposedPorts, nil, nil, volume) return err } diff --git a/tools/tenscan/frontend/src/components/layouts/header.tsx b/tools/tenscan/frontend/src/components/layouts/header.tsx index 3a2e59b40a..a04de0fea8 100644 --- a/tools/tenscan/frontend/src/components/layouts/header.tsx +++ b/tools/tenscan/frontend/src/components/layouts/header.tsx @@ -14,7 +14,7 @@ export default function Header() {