diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index d122b0f195..506aeac655 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -15,7 +15,9 @@ "vscode": { "extensions": [ "766b.go-outliner", - "golang.go" + "golang.go", + "zxh404.vscode-proto3", + "NomicFoundation.hardhat-solidity" ], "settings": { "go.testTimeout": "10m" @@ -24,7 +26,8 @@ }, "postCreateCommand": "bash -i ./.devcontainer/install-deps.sh", "containerEnv": { - "LOCALHOST_URL": "http://host.docker.internal" + "LOCALHOST_URL": "http://host.docker.internal", + "IDE": "true" } // Features to add to the dev container. More info: https://containers.dev/features. diff --git a/.devcontainer/install-deps.sh b/.devcontainer/install-deps.sh index 40b5419d38..20bf606202 100644 --- a/.devcontainer/install-deps.sh +++ b/.devcontainer/install-deps.sh @@ -2,4 +2,8 @@ go install github.com/ethereum/go-ethereum/cmd/abigen@v1.13.15; nvm install 18; cd contracts; npm install; -cd .. \ No newline at end of file +cd .. +sudo apt-get update; +sudo apt-get install -y protobuf-compiler; +go install google.golang.org/protobuf/cmd/protoc-gen-go@latest; +go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest; diff --git a/contracts/deployment_scripts/testing/003_simple_withdrawal.ts b/contracts/deployment_scripts/testing/003_simple_withdrawal.ts index 2b447a07a1..edbbabd0a5 100644 --- a/contracts/deployment_scripts/testing/003_simple_withdrawal.ts +++ b/contracts/deployment_scripts/testing/003_simple_withdrawal.ts @@ -33,6 +33,8 @@ async function waitForRootPublished(management, msg, proof, root, provider: Ethe var gas_estimate = null const l1Ethers = new HardhatEthersProvider(provider, "layer1") + console.log(`balance of management contract = ${await l1Ethers.getBalance(management.getAddress())}`) + const startTime = Date.now(); while (gas_estimate === null) { try { @@ -51,10 +53,24 @@ async function waitForRootPublished(management, msg, proof, root, provider: Ethe console.log(`Estimation took ${Date.now() - startTime} ms`) return gas_estimate } + +async function retryLoop(callback: ()=>Promise, interval = 20000, timeout = 12000000) { + const startTime = Date.now(); + while (true) { + try { + const result = await callback(); + if (result) { + return result; + } + } catch (error) { + console.log(`Error in retry loop: ${error}`); + } + await sleep(interval); + } +} const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { - return; const l2Network = hre; const {deployer} = await hre.getNamedAccounts(); @@ -81,41 +97,18 @@ const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { const msgHash = _processed_value_transfer[1] const decoded = decode_base64(block.crossChainTree) - console.log(` Sender: ${value_transfer['args'].sender}`) - console.log(` Receiver: ${value_transfer['args'].receiver}`) - console.log(` Amount: ${value_transfer['args'].amount}`) - console.log(` Sequence: ${value_transfer['args'].sequence}`) - console.log(` VTrans Hash: ${msgHash}`) - console.log(` XChain tree: ${decoded}`) - - if (decoded[0][1] != msgHash) { - console.error('Value transfer hash is not in the xchain tree!'); - return; - } - - const tree = StandardMerkleTree.of(decoded, ["string", "bytes32"]); - const proof = tree.getProof(['v',msgHash]) - console.log(` Merkle root: ${tree.root}`) - console.log(` Merkle proof: ${JSON.stringify(proof, null,2)}`) - - if (block.crossChainTreeHash != tree.root) { - console.error('Constructed merkle root matches block crossChainTreeHash'); - return - } + console.log(`Decoded = ${JSON.stringify(decoded, null, 2)}`) + console.log(`Getting cross chain proof for 'v' and msgHash = ${msgHash}`) - const l1Accounts = await hre.companionNetworks.layer1.getNamedAccounts() - const fundTx = await hre.companionNetworks.layer1.deployments.rawTx({ - from: l1Accounts.deployer, - to: messageBusAddress, - value: "1000", - }) - console.log(`Message bus funding status = ${fundTx.status}`) + const proof : any = await retryLoop(() => hre.ethers.provider.send('ten_getCrossChainProof', ['v', msgHash])) - const code = await hre.companionNetworks.layer1.provider.request({method: 'eth_getCode', params: [mgmtContractAddress, 'latest']}); - console.log(`Management contract code = ${(code as string).length}`); + console.log(`Proof = ${JSON.stringify(proof, null, 2)}`) var managementContract = await hre.ethers.getContractAt("ManagementContract", mgmtContractAddress); - const estimation = await waitForRootPublished(managementContract, msg, proof, tree.root, hre.companionNetworks.layer1.provider) + + const decoded_proof = hre.ethers.decodeRlp(proof.Proof) + + const estimation = await waitForRootPublished(managementContract, msg, decoded_proof, proof.Root, hre.companionNetworks.layer1.provider) console.log(`Estimation for native value extraction = ${estimation}`) }; diff --git a/contracts/deployment_scripts/testing/004_token_withdrawal.ts b/contracts/deployment_scripts/testing/004_token_withdrawal.ts index 60d22ebcbb..b42b7d0358 100644 --- a/contracts/deployment_scripts/testing/004_token_withdrawal.ts +++ b/contracts/deployment_scripts/testing/004_token_withdrawal.ts @@ -34,6 +34,7 @@ async function buildMerkleProof(tree: any, message: any) { } const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { + return; const l2Network = hre; const l1Network = hre.companionNetworks.layer1!; const { deployer } = await hre.getNamedAccounts(); diff --git a/contracts/generated/ManagementContract/ManagementContract.go b/contracts/generated/ManagementContract/ManagementContract.go index 2d7004b1f9..238c3a3c28 100644 --- a/contracts/generated/ManagementContract/ManagementContract.go +++ b/contracts/generated/ManagementContract/ManagementContract.go @@ -34,6 +34,9 @@ type StructsMetaRollup struct { Hash [32]byte Signature []byte LastSequenceNumber *big.Int + BlockBindingHash [32]byte + BlockBindingNumber *big.Int + CrossChainRoot [32]byte } // StructsValueTransferMessage is an auto generated low-level Go binding around an user-defined struct. @@ -46,8 +49,8 @@ type StructsValueTransferMessage 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\":\"requester\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"requestReport\",\"type\":\"string\"}],\"name\":\"NetworkSecretRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"requester\",\"type\":\"address\"}],\"name\":\"NetworkSecretResponded\",\"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\":\"bytes32\",\"name\":\"rollupHash\",\"type\":\"bytes32\"}],\"name\":\"RollupAdded\",\"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\"}],\"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\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"}],\"internalType\":\"structStructs.ValueTransferMessage\",\"name\":\"_msg\",\"type\":\"tuple\"},{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"ExtractNativeValue\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"GetChallengePeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"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\":\"uint256\",\"name\":\"number\",\"type\":\"uint256\"}],\"name\":\"GetRollupByNumber\",\"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\":\"uint256\",\"name\":\"number\",\"type\":\"uint256\"}],\"name\":\"GetUniqueForkID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"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\":\"uint256\",\"name\":\"_delay\",\"type\":\"uint256\"}],\"name\":\"SetChallengePeriod\",\"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\":\"bytes32\",\"name\":\"_lastBatchHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"providedBlockHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"blockNum\",\"type\":\"uint256\"},{\"internalType\":\"bytes[]\",\"name\":\"crossChainHashes\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"rollupNumber\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"forkID\",\"type\":\"bytes32\"}],\"name\":\"addCrossChainMessagesRoot\",\"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\":[{\"internalType\":\"bytes[]\",\"name\":\"crossChainHashes\",\"type\":\"bytes[]\"}],\"name\":\"isBundleAvailable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"isBundleSaved\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"isWithdrawalSpent\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastBatchHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastBatchSeqNo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"merkleMessageBus\",\"outputs\":[{\"internalType\":\"contractIMerkleTreeMessageBus\",\"name\":\"\",\"type\":\"address\"}],\"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: "0x6080604052348015600f57600080fd5b50601733601b565b608c565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b61551c8061009b6000396000f3fe608060405234801561001057600080fd5b50600436106101ef5760003560e01c8063728109961161010f578063a1a227fa116100a2578063db5d91b111610071578063db5d91b1146104a6578063e34fbfc8146104d2578063e874eb20146104e5578063f2fde38b146104f857600080fd5b8063a1a227fa14610450578063a4ab2faa14610470578063a52f433c14610483578063d4fab8871461049357600080fd5b806384154826116100de57806384154826146103ca57806387059edb146103ed5780638da5cb5b1461040057806398077e861461043057600080fd5b806372810996146103865780638129fc1c1461038e57806381be5385146103965780638236a7ba146103a957600080fd5b8063476657381161018757806368e103831161015657806368e10383146103435780636a30d26c146103565780636b9707d61461036b578063715018a61461037e57600080fd5b806347665738146102e95780635024621f146102fc5780635371a2161461030f578063568699c81461032257600080fd5b80632f0cb9e3116101c35780632f0cb9e3146102435780633e60a22f1461027357806343348b2f146102b4578063440c953b146102e057600080fd5b80620ddd27146101f457806303e72e4814610213578063073b6ef3146102285780631aca00ab1461023b575b600080fd5b6101fd600e5481565b60405161020a9190611b1e565b60405180910390f35b610226610221366004611c54565b61050b565b005b610226610236366004611dc9565b610613565b600f546101fd565b610266610251366004611e97565b600c6020526000908152604090205460ff1681565b60405161020a9190611ebe565b6102a7610281366004611ecc565b80516020818301810180516003825292820191909301209152546001600160a01b031681565b60405161020a9190611f18565b6102666102c2366004611f26565b6001600160a01b031660009081526020819052604090205460ff1690565b6101fd60055481565b6102266102f7366004611f26565b6108a1565b61022661030a366004611e97565b610941565b61022661031d366004611fab565b61094e565b610335610330366004611e97565b610af3565b60405161020a9291906120ad565b6102266103513660046120cd565b610b49565b61035e610bed565b60405161020a91906121d0565b610226610379366004611f26565b610cc6565b610226610d56565b610226610d6a565b610226610def565b6102266103a43660046121f6565b610fca565b6103bc6103b7366004611e97565b6110c5565b60405161020a929190612231565b6102666103d8366004611e97565b600d6020526000908152604090205460ff1681565b6103bc6103fb366004611e97565b6111ad565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166102a7565b61044361043e366004611e97565b611224565b60405161020a919061223f565b600a54610463906001600160a01b031681565b60405161020a9190612292565b61026661047e3660046122a0565b6112d0565b600454610100900460ff16610266565b6102266104a13660046122ee565b61134e565b6102666104b4366004611f26565b6001600160a01b031660009081526001602052604090205460ff1690565b6102266104e0366004612395565b611456565b600b54610463906001600160a01b031681565b610226610506366004611f26565b61149d565b6105136114f4565b60006001600160a01b031660038360405161052e91906123ff565b908152604051908190036020019020546001600160a01b03160361058a57600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0161058883826124db565b505b8060038360405161059b91906123ff565b90815260405190819003602001812080546001600160a01b039390931673ffffffffffffffffffffffffffffffffffffffff19909316929092179091557f17b2f9f5748931099ffee882b5b64f4a560b5c55da9b4f4e396dae3bb9f98cb590610607908490849061259b565b60405180910390a15050565b61061e8660ff6125d1565b43106106455760405162461bcd60e51b815260040161063c90612616565b60405180910390fd5b8543036106645760405162461bcd60e51b815260040161063c90612680565b854060008190036106875760405162461bcd60e51b815260040161063c906126c2565b8781146106a65760405162461bcd60e51b815260040161063c90612704565b60008381526008602052604090205482146106d35760405162461bcd60e51b815260040161063c90612746565b60006107418a8a8a8a6040516020016106ef94939291906127ae565b6040516020818303038152906040528051906020012087878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061156892505050565b6001600160a01b03811660009081526001602052604090205490915060ff1661077c5760405162461bcd60e51b815260040161063c90612824565b600e8a90556000805b885181101561087b57600b5489516001600160a01b039091169063b6aed0cb908b90849081106107b7576107b7612834565b60200260200101516107c890612854565b600f546107d590426125d1565b6040518363ffffffff1660e01b81526004016107f292919061288a565b600060405180830381600087803b15801561080c57600080fd5b505af1158015610820573d6000803e3d6000fd5b505050508189828151811061083757610837612834565b602002602001015161084890612854565b60405160200161085992919061288a565b60408051601f1981840301815291905280516020909101209150600101610785565b506000908152600d60205260409020805460ff1916600117905550505050505050505050565b6108a96114f4565b6001600160a01b03811660009081526020819052604090205460ff166108e15760405162461bcd60e51b815260040161063c906128d7565b6001600160a01b038116600090815260016020819052604091829020805460ff19169091179055517ffe64c7181f0fc60e300dc02cca368cdfa94d7ca45902de3b9a9d80070e76093690610936908390611f18565b60405180910390a150565b6109496114f4565b600f55565b600b546040517fb201246f0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063b201246f9061099d908790879087908790600401612a02565b60006040518083038186803b1580156109b557600080fd5b505afa1580156109c9573d6000803e3d6000fd5b505050506000846040516020016109e09190612a3b565b60408051601f1981840301815291815281516020928301206000818152600c90935291205490915060ff1615610a285760405162461bcd60e51b815260040161063c90612a7b565b6001600c600087604051602001610a3f9190612a3b565b60408051808303601f190181529181528151602092830120835282820193909352908201600020805460ff191693151593909317909255600a546001600160a01b0316916399a3ad2191610a9891908901908901611f26565b87604001356040518363ffffffff1660e01b8152600401610aba929190612a8b565b600060405180830381600087803b158015610ad457600080fd5b505af1158015610ae8573d6000803e3d6000fd5b505050505050505050565b604080516060808201835260008083526020830191909152918101829052600080610b1d856111ad565b9150915081610b325760009590945092505050565b600094855260086020526040909420549492505050565b60045460ff1615610b6c5760405162461bcd60e51b815260040161063c90612af1565b60048054600160ff1991821681179092556001600160a01b0387166000908152602081815260408083208054851686179055908490529081902080549092169092179055517ffe64c7181f0fc60e300dc02cca368cdfa94d7ca45902de3b9a9d80070e76093690610bde908790611f18565b60405180910390a15050505050565b60606002805480602002602001604051908101604052809291908181526020016000905b82821015610cbd578382906000526020600020018054610c309061241f565b80601f0160208091040260200160405190810160405280929190818152602001828054610c5c9061241f565b8015610ca95780601f10610c7e57610100808354040283529160200191610ca9565b820191906000526020600020905b815481529060010190602001808311610c8c57829003601f168201915b505050505081526020019060010190610c11565b50505050905090565b610cce6114f4565b6001600160a01b03811660009081526001602052604090205460ff16610d065760405162461bcd60e51b815260040161063c90612b33565b6001600160a01b03811660009081526001602052604090819020805460ff19169055517f0f279980343c7ca542fde9fa5396555068efb5cd560d9cf9c191aa2911079b4790610936908390611f18565b610d5e6114f4565b610d686000611594565b565b610d726114f4565b600a546040517f36d2da900000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906336d2da9090610dbb903390600401611f18565b600060405180830381600087803b158015610dd557600080fd5b505af1158015610de9573d6000803e3d6000fd5b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610e3a5750825b905060008267ffffffffffffffff166001148015610e575750303b155b905081158015610e65575080155b15610e9c576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610ed057845468ff00000000000000001916680100000000000000001785555b610ed933611612565b60006005556001600955604051610eef90611b09565b604051809103906000f080158015610f0b573d6000803e3d6000fd5b50600b80546001600160a01b039290921673ffffffffffffffffffffffffffffffffffffffff199283168117909155600a805490921681179091556040517fbd726cf82ac9c3260b1495107182e336e0654b25c10915648c0cc15b2bb72cbf91610f7491611f18565b60405180910390a18315610fc357845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290610bde90600190612b5e565b5050505050565b60006110188235610fde6020850185612b6c565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061156892505050565b6001600160a01b03811660009081526020819052604090205490915060ff166110535760405162461bcd60e51b815260040161063c906128d7565b6001600160a01b03811660009081526001602052604090205460ff1661108b5760405162461bcd60e51b815260040161063c90612b33565b61109482611623565b6040517fd6555bff8670bd3008dc064c30bb56d6ac7cb14ae801e36146fe4e7c6a504a589061060790843590611b1e565b6040805160608082018352600080835260208084018390528385018290528582526006815284822085519384019095528454835260018501805492958694939092840191906111139061241f565b80601f016020809104026020016040519081016040528092919081815260200182805461113f9061241f565b801561118c5780601f106111615761010080835404028352916020019161118c565b820191906000526020600020905b81548152906001019060200180831161116f57829003601f168201915b50505091835250506002919091015460209091015280519094149492505050565b6040805160608082018352600080835260208301919091529181018290526000838152600760205260408120549081900361121157505060408051606081018252600080825282516020818101855282825283015291810182905290939092509050565b61121a816110c5565b9250925050915091565b6002818154811061123457600080fd5b90600052602060002001600091509050805461124f9061241f565b80601f016020809104026020016040519081016040528092919081815260200182805461127b9061241f565b80156112c85780601f1061129d576101008083540402835291602001916112c8565b820191906000526020600020905b8154815290600101906020018083116112ab57829003601f168201915b505050505081565b600080805b835181101561133557818482815181106112f1576112f1612834565b602002602001015161130290612854565b60405160200161131392919061288a565b60408051601f19818403018152919052805160209091012091506001016112d5565b506000908152600d602052604090205460ff1692915050565b6001600160a01b03851660009081526020819052604090205460ff16806113875760405162461bcd60e51b815260040161063c90612c19565b81156113ff5760006113bb8787866040516020016113a793929190612c51565b6040516020818303038152906040526116c7565b905060006113c98287611568565b9050876001600160a01b0316816001600160a01b0316146113fc5760405162461bcd60e51b815260040161063c90612ccd565b50505b6001600160a01b03808616600081815260208190526040808220805460ff191660011790555191928916917fb869e23ebc7c717d76e345eee8ec282612603e45c44f7ae5494b197c8d9d1be19190a3505050505050565b336001600160a01b03167f0b0ecdedd12079aa2d6c5e0186026c711cb0c8d04f1b724ba5880fb6328d43018383604051611491929190612cfd565b60405180910390a25050565b6114a56114f4565b6001600160a01b0381166114e85760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161063c9190611f18565b6114f181611594565b50565b336115267f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614610d6857336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161063c9190611f18565b6000806000806115788686611702565b925092509250611588828261174f565b50909150505b92915050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b61161a611855565b6114f1816118bc565b80356000908152600660205260409020819061163f8282612e72565b50506009546000908152600760205260409020813590819055611663600143612e7c565b4060405160200161167592919061288a565b60408051601f1981840301815291815281516020928301206009805460009081526008909452918320558054916116ab83612e8f565b9190505550600554816040013511156114f15760400135600555565b60006116d382516118c4565b826040516020016116e5929190612ea8565b604051602081830303815290604052805190602001209050919050565b6000806000835160410361173c5760208401516040850151606086015160001a61172e88828585611965565b955095509550505050611748565b50508151600091506002905b9250925092565b600082600381111561176357611763612ee4565b0361176c575050565b600182600381111561178057611780612ee4565b036117b7576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028260038111156117cb576117cb612ee4565b03611804576040517ffce698f700000000000000000000000000000000000000000000000000000000815261063c908290600401611b1e565b600382600381111561181857611818612ee4565b0361185157806040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260040161063c9190611b1e565b5050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16610d68576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114a5611855565b606060006118d183611a27565b600101905060008167ffffffffffffffff8111156118f1576118f1611b2c565b6040519080825280601f01601f19166020018201604052801561191b576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084611925575b509392505050565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156119a05750600091506003905082611a1d565b6000600188888888604051600081526020016040526040516119c59493929190612f03565b6020604051602081039080840390855afa1580156119e7573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611a1357506000925060019150829050611a1d565b9250600091508190505b9450945094915050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611a70577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310611a9c576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310611aba57662386f26fc10000830492506010015b6305f5e1008310611ad2576305f5e100830492506008015b6127108310611ae657612710830492506004015b60648310611af8576064830492506002015b600a831061158e5760010192915050565b6125ae80612f3983390190565b805b82525050565b6020810161158e8284611b16565b634e487b7160e01b600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff82111715611b6857611b68611b2c565b6040525050565b6000611b7a60405190565b9050611b868282611b42565b919050565b600067ffffffffffffffff821115611ba557611ba5611b2c565b601f19601f83011660200192915050565b82818337506000910152565b6000611bd5611bd084611b8b565b611b6f565b9050828152838383011115611bec57611bec600080fd5b611bfa836020830184611bb6565b9392505050565b600082601f830112611c1557611c15600080fd5b611bfa83833560208501611bc2565b60006001600160a01b03821661158e565b611c3e81611c24565b81146114f157600080fd5b803561158e81611c35565b60008060408385031215611c6a57611c6a600080fd5b823567ffffffffffffffff811115611c8457611c84600080fd5b611c9085828601611c01565b925050611ca08460208501611c49565b90509250929050565b80611c3e565b803561158e81611ca9565b600067ffffffffffffffff821115611cd457611cd4611b2c565b5060209081020190565b6000611cec611bd084611cba565b83815290506020808201908402830185811115611d0b57611d0b600080fd5b835b81811015611d4a57803567ffffffffffffffff811115611d2f57611d2f600080fd5b611d3b88828801611c01565b84525060209283019201611d0d565b5050509392505050565b600082601f830112611d6857611d68600080fd5b611bfa83833560208501611cde565b60008083601f840112611d8c57611d8c600080fd5b50813567ffffffffffffffff811115611da757611da7600080fd5b602083019150836001820283011115611dc257611dc2600080fd5b9250929050565b60008060008060008060008060e0898b031215611de857611de8600080fd5b611df28a8a611caf565b9750611e018a60208b01611caf565b9650611e108a60408b01611caf565b9550606089013567ffffffffffffffff811115611e2f57611e2f600080fd5b611e3b8b828c01611d54565b955050608089013567ffffffffffffffff811115611e5b57611e5b600080fd5b611e678b828c01611d77565b9450945050611e798a60a08b01611caf565b9150611e888a60c08b01611caf565b90509295985092959890939650565b600060208284031215611eac57611eac600080fd5b611bfa8383611caf565b801515611b18565b6020810161158e8284611eb6565b600060208284031215611ee157611ee1600080fd5b813567ffffffffffffffff811115611efb57611efb600080fd5b611f0784828501611c01565b949350505050565b611b1881611c24565b6020810161158e8284611f0f565b600060208284031215611f3b57611f3b600080fd5b611bfa8383611c49565b600060808284031215611f5a57611f5a600080fd5b50919050565b60008083601f840112611f7557611f75600080fd5b50813567ffffffffffffffff811115611f9057611f90600080fd5b602083019150836020820283011115611dc257611dc2600080fd5b60008060008060c08587031215611fc457611fc4600080fd5b611fce8686611f45565b9350608085013567ffffffffffffffff811115611fed57611fed600080fd5b611ff987828801611f60565b935093505061200b8660a08701611caf565b905092959194509250565b60005b83811015612031578181015183820152602001612019565b50506000910152565b6000612044825190565b80845260208401935061205b818560208601612016565b601f01601f19169290920192915050565b805160009060608401906120808582611b16565b5060208301518482036020860152612098828261203a565b915050604083015161195d6040860182611b16565b604081016120bb8285611b16565b8181036020830152611f07818461206c565b6000806000806000606086880312156120e8576120e8600080fd5b6120f28787611c49565b9450602086013567ffffffffffffffff81111561211157612111600080fd5b61211d88828901611d77565b9450945050604086013567ffffffffffffffff81111561213f5761213f600080fd5b61214b88828901611d77565b92509250509295509295909350565b6000611bfa838361203a565b60200190565b6000612176825190565b808452602084019350836020820285016121908560200190565b60005b848110156121c457838303885281516121ac848261215a565b93505060208201602098909801979150600101612193565b50909695505050505050565b60208082528101611bfa818461216c565b600060608284031215611f5a57611f5a600080fd5b60006020828403121561220b5761220b600080fd5b813567ffffffffffffffff81111561222557612225600080fd5b611f07848285016121e1565b604081016120bb8285611eb6565b60208082528101611bfa818461203a565b600061158e6001600160a01b038316612267565b90565b6001600160a01b031690565b600061158e82612250565b600061158e82612273565b611b188161227e565b6020810161158e8284612289565b6000602082840312156122b5576122b5600080fd5b813567ffffffffffffffff8111156122cf576122cf600080fd5b611f0784828501611d54565b801515611c3e565b803561158e816122db565b600080600080600060a0868803121561230957612309600080fd5b6123138787611c49565b94506123228760208801611c49565b9350604086013567ffffffffffffffff81111561234157612341600080fd5b61234d88828901611c01565b935050606086013567ffffffffffffffff81111561236d5761236d600080fd5b61237988828901611c01565b92505061238987608088016122e3565b90509295509295909350565b600080602083850312156123ab576123ab600080fd5b823567ffffffffffffffff8111156123c5576123c5600080fd5b6123d185828601611d77565b92509250509250929050565b60006123e7825190565b6123f5818560208601612016565b9290920192915050565b61158e81836123dd565b634e487b7160e01b600052602260045260246000fd5b60028104600182168061243357607f821691505b602082108103611f5a57611f5a612409565b600061158e6122648381565b61245a83612445565b815460001960089490940293841b1916921b91909117905550565b6000612482818484612451565b505050565b818110156118515761249a600082612475565b600101612487565b601f821115612482576000818152602090206020601f850104810160208510156124c95750805b610fc36020601f860104830182612487565b815167ffffffffffffffff8111156124f5576124f5611b2c565b6124ff825461241f565b61250a8282856124a2565b506020601f82116001811461253f57600083156125275750848201515b600019600885021c1981166002850217855550610fc3565b600084815260208120601f198516915b8281101561256f578785015182556020948501946001909201910161254f565b508482101561258c5783870151600019601f87166008021c191681555b50505050600202600101905550565b604080825281016125ac818561203a565b9050611bfa6020830184611f0f565b634e487b7160e01b600052601160045260246000fd5b8082018082111561158e5761158e6125bb565b60158152602081017f426c6f636b2062696e64696e6720746f6f206f6c64000000000000000000000081529050612166565b6020808252810161158e816125e4565b60368152602081017f43616e6e6f742062696e6420746f2074686520626c6f636b207468617420697381527f206265696e672063757272656e746c79206d696e656400000000000000000000602082015290505b60400190565b6020808252810161158e81612626565b60128152602081017f556e6b6e6f776e20626c6f636b2068617368000000000000000000000000000081529050612166565b6020808252810161158e81612690565b60168152602081017f426c6f636b2062696e64696e67206d69736d617463680000000000000000000081529050612166565b6020808252810161158e816126d2565b600e8152602081017f496e76616c696420666f726b494400000000000000000000000000000000000081529050612166565b6020808252810161158e81612714565b6000612760825190565b8084526020840193508360208202850161277a8560200190565b60005b848110156121c45783830388528151612796848261215a565b9350506020820160209890980197915060010161277d565b608081016127bc8287611b16565b6127c96020830186611b16565b6127d66040830185611b16565b81810360608301526127e88184612756565b9695505050505050565b60178152602081017f61646472657373206e6f7420612073657175656e63657200000000000000000081529050612166565b6020808252810161158e816127f2565b634e487b7160e01b600052603260045260246000fd5b600061158e825190565b600061285e825190565b6020830161286b8161284a565b9250506020811015611f5a576000196020919091036008021b16919050565b604081016128988285611b16565b611bfa6020830184611b16565b60168152602081017f656e636c6176654944206e6f742061747465737465640000000000000000000081529050612166565b6020808252810161158e816128a5565b50600061158e6020830183611c49565b50600061158e6020830183611caf565b67ffffffffffffffff8116611c3e565b803561158e81612907565b50600061158e6020830183612917565b67ffffffffffffffff8116611b18565b61294c81806128e7565b6129568382611f0f565b5061296460208201826128e7565b6129716020840182611f0f565b5061297f60408201826128f7565b61298c6040840182611b16565b5061299a6060820182612922565b6124826060840182612932565b82818337505050565b81835260208301925060007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8311156129eb576129eb600080fd5b6020830292506129fc8385846129a7565b50500190565b60c08101612a108287612942565b8181036080830152612a238185876129b0565b9050612a3260a0830184611b16565b95945050505050565b6080810161158e8284612942565b60188152602081017f7769746864726177616c20616c7265616479207370656e74000000000000000081529050612166565b6020808252810161158e81612a49565b604081016128988285611f0f565b60228152602081017f6e6574776f726b2073656372657420616c726561647920696e697469616c697a81527f65640000000000000000000000000000000000000000000000000000000000006020820152905061267a565b6020808252810161158e81612a99565b60198152602081017f656e636c6176654944206e6f7420612073657175656e6365720000000000000081529050612166565b6020808252810161158e81612b01565b600067ffffffffffffffff821661158e565b611b1881612b43565b6020810161158e8284612b55565b6000808335601e1936859003018112612b8757612b87600080fd5b8301915050803567ffffffffffffffff811115612ba657612ba6600080fd5b602082019150600181023603821315611dc257611dc2600080fd5b60238152602081017f726573706f6e64696e67206174746573746572206973206e6f7420617474657381527f74656400000000000000000000000000000000000000000000000000000000006020820152905061267a565b6020808252810161158e81612bc1565b600061158e8260601b90565b600061158e82612c29565b611b18612c4c82611c24565b612c35565b612c5b8185612c40565b601401612c688184612c40565b601401611f0781836123dd565b602c8152602081017f63616c63756c61746564206164647265737320616e642061747465737465724981527f4420646f6e74206d6174636800000000000000000000000000000000000000006020820152905061267a565b6020808252810161158e81612c75565b818352602083019250612cf1828483611bb6565b50601f01601f19160190565b60208082528101611f07818486612cdd565b6000813561158e81611ca9565b60008161158e565b612d2d82612d1c565b612d3961226482612d1c565b8255505050565b8267ffffffffffffffff811115612d5957612d59611b2c565b612d63825461241f565b612d6e8282856124a2565b506000601f821160018114612da35760008315612d8b5750848201355b600019600885021c1981166002850217855550612dfd565b600084815260209020601f19841690835b82811015612dd45787850135825560209485019460019092019101612db4565b5084821015612df1576000196008601f8716021c19878501351681555b50506001600284020184555b505050505050565b612482838383612d40565b612e1982612445565b80612d39565b8180612e2a81612d0f565b9050612e368184612d24565b5050612e456020830183612b6c565b612e53818360018601612e05565b50506040820180612e6382612d0f565b9050610de98160028501612e10565b6118518282612e1f565b8181038181111561158e5761158e6125bb565b600060018201612ea157612ea16125bb565b5060010190565b7f19457468657265756d205369676e6564204d6573736167653a0a0000000000008152601a01612ed881846123dd565b9050611bfa81836123dd565b634e487b7160e01b600052602160045260246000fd5b60ff8116611b18565b60808101612f118287611b16565b612f1e6020830186612efa565b612f2b6040830185611b16565b612a326060830184611b1656fe608060405234801561001057600080fd5b5061001a33610027565b610022610098565b61014a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100e85760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101475780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b612455806101596000396000f3fe6080604052600436106101115760003560e01c80638da5cb5b116100a5578063b1454caa11610074578063b6aed0cb11610059578063b6aed0cb1461038b578063e138a8d2146103ab578063f2fde38b146103cb57610185565b8063b1454caa1461034b578063b201246f1461036b57610185565b80638da5cb5b146102a65780639730886d146102eb57806399a3ad211461030b578063ab53bddc1461032b57610185565b8063346633fb116100e1578063346633fb1461023e57806336d2da9014610251578063485cc95514610271578063715018a61461029157610185565b8062a1b815146101a65780630fcfbd11146101d15780630fe9188e146101f157806333a88c721461021157610185565b36610185576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb90349061015690339083906004016111ea565b6000604051808303818588803b15801561016f57600080fd5b505af1158015610183573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161019d90611239565b60405180910390fd5b3480156101b257600080fd5b506101bb6103eb565b6040516101c89190611249565b60405180910390f35b3480156101dd57600080fd5b506101bb6101ec366004611272565b610477565b3480156101fd57600080fd5b5061018361020c3660046112c5565b6104d6565b34801561021d57600080fd5b5061023161022c366004611272565b61051c565b6040516101c891906112ec565b61018361024c36600461130e565b61056e565b34801561025d57600080fd5b5061018361026c366004611346565b6106bd565b34801561027d57600080fd5b5061018361028c366004611365565b61073c565b34801561029d57600080fd5b506101836108a7565b3480156102b257600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166040516101c89190611394565b3480156102f757600080fd5b506101836103063660046113a2565b6108bb565b34801561031757600080fd5b5061018361032636600461130e565b610a27565b34801561033757600080fd5b5061018361034636600461130e565b610aa7565b61035e61035936600461146b565b610b70565b6040516101c891906114f8565b34801561037757600080fd5b50610183610386366004611566565b610c7d565b34801561039757600080fd5b506101836103a63660046115d1565b610d7e565b3480156103b757600080fd5b506101836103c63660046115f1565b610dc4565b3480156103d757600080fd5b506101836103e6366004611346565b610f0f565b600354604080517f1a90a21900000000000000000000000000000000000000000000000000000000815290516000926001600160a01b031691631a90a2199160048083019260209291908290030181865afa15801561044e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104729190611679565b905090565b6000808260405160200161048b9190611837565b60408051601f198184030181529181528151602092830120600081815292839052912054909150806104cf5760405162461bcd60e51b815260040161019d90611886565b9392505050565b6104de610f66565b600081815260046020526040812054900361050b5760405162461bcd60e51b815260040161019d906118c8565b600090815260046020526040812055565b600080826040516020016105309190611837565b60408051601f19818403018152918152815160209283012060008181529283905291205490915080158015906105665750428111155b949350505050565b60003411801561057d57508034145b6105995760405162461bcd60e51b815260040161019d90611930565b60035434906001600160a01b03161561065d5760006105b66103eb565b9050803410156105d85760405162461bcd60e51b815260040161019d90611970565b6105e28134611996565b6003546040519193506000916001600160a01b039091169083908381818185875af1925050503d8060008114610634576040519150601f19603f3d011682016040523d82523d6000602084013e610639565b606091505b505090508061065a5760405162461bcd60e51b815260040161019d90611a01565b50505b600061066833610fda565b9050836001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b684846040516106af929190611a11565b60405180910390a350505050565b6106c5610f66565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610712576040519150601f19603f3d011682016040523d82523d6000602084013e610717565b606091505b50509050806107385760405162461bcd60e51b815260040161019d90611a5e565b5050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156107875750825b905060008267ffffffffffffffff1660011480156107a45750303b155b9050811580156107b2575080155b156107e9576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561081d57845468ff00000000000000001916680100000000000000001785555b61082687611038565b6003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038816179055831561089e57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061089590600190611a92565b60405180910390a15b50505050505050565b6108af610f66565b6108b96000611049565b565b60006108c8600130611aa0565b90506108fb7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806109225750336001600160a01b038216145b61093e5760405162461bcd60e51b815260040161019d90611af5565b600061094a8342611b05565b905060008460405160200161095f9190611837565b60408051601f198184030181529181528151602092830120600081815292839052912054909150156109a35760405162461bcd60e51b815260040161019d90611b70565b6000818152602081815260408220849055600191906109c490880188611346565b6001600160a01b0316815260208101919091526040016000908120906109f06080880160608901611b80565b63ffffffff1681526020808201929092526040016000908120805460018101825590825291902086916004020161089e8282611fbe565b610a2f610f66565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610a7c576040519150601f19603f3d011682016040523d82523d6000602084013e610a81565b606091505b5050905080610aa25760405162461bcd60e51b815260040161019d90611a5e565b505050565b6000610ab4600130611aa0565b9050610ae77f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b03161480610b0e5750336001600160a01b038216145b610b2a5760405162461bcd60e51b815260040161019d90611af5565b826001600160a01b03167fcd9850463422a7449c406a036e35e5edb6fbe35a64c9f12a2354be98a750c0d383604051610b639190611249565b60405180910390a2505050565b6003546000906001600160a01b031615610c26576000610b8e6103eb565b905080341015610bb05760405162461bcd60e51b815260040161019d90612020565b6003546040516000916001600160a01b03169083908381818185875af1925050503d8060008114610bfd576040519150601f19603f3d011682016040523d82523d6000602084013e610c02565b606091505b5050905080610c235760405162461bcd60e51b815260040161019d90611a01565b50505b610c2f33610fda565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef77593733828888888888604051610c6c9796959493929190612030565b60405180910390a195945050505050565b6000818152600460205260408120549003610caa5760405162461bcd60e51b815260040161019d906120eb565b600081815260046020526040902054421015610cd85760405162461bcd60e51b815260040161019d90612137565b600084604051602001610ceb91906121bc565b60405160208183030381529060405280519060200120604051602001610d1191906121fc565b604051602081830303815290604052805190602001209050610d5b84848484604051602001610d40919061221b565b604051602081830303815290604052805190602001206110c7565b610d775760405162461bcd60e51b815260040161019d90612285565b5050505050565b610d86610f66565b60008281526004602052604090205415610db25760405162461bcd60e51b815260040161019d906122ed565b60009182526004602052604090912055565b6000818152600460205260408120549003610df15760405162461bcd60e51b815260040161019d906120eb565b600081815260046020526040902054421015610e1f5760405162461bcd60e51b815260040161019d90612137565b6000610e2e6020860186611346565b610e3e60408701602088016122fd565b610e4e6060880160408901611b80565b610e5e6080890160608a01611b80565b610e6b60808a018a611cd7565b610e7b60c08c0160a08d0161231c565b604051602001610e919796959493929190612030565b604051602081830303815290604052805190602001209050600081604051602001610ebc919061236d565b604051602081830303815290604052805190602001209050610eeb85858584604051602001610d40919061221b565b610f075760405162461bcd60e51b815260040161019d906123d5565b505050505050565b610f17610f66565b6001600160a01b038116610f5a5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161019d9190611394565b610f6381611049565b50565b33610f987f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146108b957336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161019d9190611394565b6001600160a01b0381166000908152600260205260408120805467ffffffffffffffff16916001919061100d83856123e5565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b6110406110df565b610f6381611146565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6000826110d586868561114e565b1495945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166108b9576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f176110df565b600081815b848110156111875761117d8287878481811061117157611171612409565b90506020020135611190565b9150600101611153565b50949350505050565b60008183106111ac5760008281526020849052604090206111bb565b60008381526020839052604090205b90505b92915050565b60006001600160a01b0382166111be565b6111de816111c4565b82525050565b806111de565b604081016111f882856111d5565b6104cf60208301846111e4565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b602080825281016111be81611205565b602081016111be82846111e4565b600060c0828403121561126c5761126c600080fd5b50919050565b60006020828403121561128757611287600080fd5b813567ffffffffffffffff8111156112a1576112a1600080fd5b61056684828501611257565b805b8114610f6357600080fd5b80356111be816112ad565b6000602082840312156112da576112da600080fd5b6111bb83836112ba565b8015156111de565b602081016111be82846112e4565b6112af816111c4565b80356111be816112fa565b6000806040838503121561132457611324600080fd5b61132e8484611303565b915061133d84602085016112ba565b90509250929050565b60006020828403121561135b5761135b600080fd5b6111bb8383611303565b6000806040838503121561137b5761137b600080fd5b6113858484611303565b915061133d8460208501611303565b602081016111be82846111d5565b600080604083850312156113b8576113b8600080fd5b823567ffffffffffffffff8111156113d2576113d2600080fd5b6113de85828601611257565b92505061133d84602085016112ba565b63ffffffff81166112af565b80356111be816113ee565b60008083601f84011261141a5761141a600080fd5b50813567ffffffffffffffff81111561143557611435600080fd5b60208301915083600182028301111561145057611450600080fd5b9250929050565b60ff81166112af565b80356111be81611457565b60008060008060006080868803121561148657611486600080fd5b61149087876113fa565b945061149f87602088016113fa565b9350604086013567ffffffffffffffff8111156114be576114be600080fd5b6114ca88828901611405565b93509350506114dc8760608801611460565b90509295509295909350565b67ffffffffffffffff81166111de565b602081016111be82846114e8565b60006080828403121561126c5761126c600080fd5b60008083601f84011261153057611530600080fd5b50813567ffffffffffffffff81111561154b5761154b600080fd5b60208301915083602082028301111561145057611450600080fd5b60008060008060c0858703121561157f5761157f600080fd5b6115898686611506565b9350608085013567ffffffffffffffff8111156115a8576115a8600080fd5b6115b48782880161151b565b93509350506115c68660a087016112ba565b905092959194509250565b600080604083850312156115e7576115e7600080fd5b61132e84846112ba565b6000806000806060858703121561160a5761160a600080fd5b843567ffffffffffffffff81111561162457611624600080fd5b61163087828801611257565b945050602085013567ffffffffffffffff81111561165057611650600080fd5b61165c8782880161151b565b93509350506115c686604087016112ba565b80516111be816112ad565b60006020828403121561168e5761168e600080fd5b6111bb838361166e565b5060006111be6020830183611303565b67ffffffffffffffff81166112af565b80356111be816116a8565b5060006111be60208301836116b8565b5060006111be60208301836113fa565b63ffffffff81166111de565b6000808335601e193685900301811261170a5761170a600080fd5b830160208101925035905067ffffffffffffffff81111561172d5761172d600080fd5b3681900382131561145057611450600080fd5b82818337506000910152565b818352602083019250611760828483611740565b50601f01601f19160190565b5060006111be6020830183611460565b60ff81166111de565b600060c083016117958380611698565b61179f85826111d5565b506117ad60208401846116c3565b6117ba60208601826114e8565b506117c860408401846116d3565b6117d560408601826116e3565b506117e360608401846116d3565b6117f060608601826116e3565b506117fe60808401846116ef565b858303608087015261181183828461174c565b9250505061182260a084018461176c565b61182f60a086018261177c565b509392505050565b602080825281016111bb8184611785565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d69747465648152601760f91b602082015290505b60400190565b602080825281016111be81611848565b601a8152602081017f537461746520726f6f7420646f6573206e6f742065786973742e00000000000081529050611233565b602080825281016111be81611896565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e672045746865720000000000000000000000000000000060208201529050611880565b602080825281016111be816118d8565b60208082527f496e73756666696369656e742066756e647320746f2073656e642076616c75659101908152611233565b602080825281016111be81611940565b634e487b7160e01b600052601160045260246000fd5b818103818111156111be576111be611980565b60248152602081017f4661696c656420746f2073656e64206665657320746f206665657320636f6e7481527f726163740000000000000000000000000000000000000000000000000000000060208201529050611880565b602080825281016111be816119a9565b60408101611a1f82856111e4565b6104cf60208301846114e8565b60148152602081017f6661696c65642073656e64696e672076616c756500000000000000000000000081529050611233565b602080825281016111be81611a2c565b60006111be82611a7c565b90565b67ffffffffffffffff1690565b6111de81611a6e565b602081016111be8284611a89565b6001600160a01b039182169190811690828203908111156111be576111be611980565b60118152602081017f4e6f74206f776e6572206f722073656c6600000000000000000000000000000081529050611233565b602080825281016111be81611ac3565b808201808211156111be576111be611980565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f210000000000000000000000000000000000000000000000000000000000000060208201529050611880565b602080825281016111be81611b18565b600060208284031215611b9557611b95600080fd5b6111bb83836113fa565b600081356111be816112fa565b60006001600160a01b03835b81169019929092169190911792915050565b60006111be826111c4565b60006111be82611bca565b611be982611bd5565b611bf4818354611bac565b8255505050565b600081356111be816116a8565b60007bffffffffffffffff0000000000000000000000000000000000000000611bb88460a01b90565b60006111be67ffffffffffffffff8316611a7c565b611c4f82611c31565b611bf4818354611c08565b600081356111be816113ee565b60007fffffffff00000000000000000000000000000000000000000000000000000000611bb88460e01b90565b600063ffffffff82166111be565b611cab82611c94565b611bf4818354611c67565b600063ffffffff83611bb8565b611ccc82611c94565b611bf4818354611cb6565b6000808335601e1936859003018112611cf257611cf2600080fd5b8301915050803567ffffffffffffffff811115611d1157611d11600080fd5b60208201915060018102360382131561145057611450600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b600281046001821680611d6c57607f821691505b60208210810361126c5761126c611d42565b60006111be611a798381565b611d9383611d7e565b815460001960089490940293841b1916921b91909117905550565b6000610aa2818484611d8a565b8181101561073857611dce600082611dae565b600101611dbb565b601f821115610aa2576000818152602090206020601f85010481016020851015611dfd5750805b610d776020601f860104830182611dbb565b8267ffffffffffffffff811115611e2857611e28611d2c565b611e328254611d58565b611e3d828285611dd6565b506000601f821160018114611e725760008315611e5a5750848201355b600019600885021c1981166002850217855550610f07565b600084815260209020601f19841690835b82811015611ea35787850135825560209485019460019092019101611e83565b5084821015611ec0576000196008601f8716021c19878501351681555b5050505060020260010190555050565b610aa2838383611e0f565b600081356111be81611457565b600060ff82166111be565b611efc82611ee8565b815460ff191660ff821617611bf4565b808280611f1881611b9f565b9050611f248184611be0565b50506020830180611f3482611bfb565b9050611f408184611c46565b50506040830180611f5082611c5a565b9050611f5c8184611ca2565b5050506060820180611f6d82611c5a565b9050611f7c8160018501611cc3565b5050611f8b6080830183611cd7565b611f99818360028601611ed0565b505060a0820180611fa982611edb565b9050611fb88160038501611ef3565b50505050565b6107388282611f0c565b60258152602081017f496e73756666696369656e742066756e647320746f207075626c697368206d6581527f737361676500000000000000000000000000000000000000000000000000000060208201529050611880565b602080825281016111be81611fc8565b60c0810161203e828a6111d5565b61204b60208301896114e8565b61205860408301886116e3565b61206560608301876116e3565b818103608083015261207881858761174c565b905061208760a083018461177c565b98975050505050505050565b602a8152602081017f526f6f74206973206e6f74207075626c6973686564206f6e2074686973206d6581527f7373616765206275732e0000000000000000000000000000000000000000000060208201529050611880565b602080825281016111be81612093565b60218152602081017f526f6f74206973206e6f7420636f6e736964657265642066696e616c207965748152601760f91b60208201529050611880565b602080825281016111be816120fb565b5060006111be60208301836112ba565b6121618180611698565b61216b83826111d5565b506121796020820182611698565b61218660208401826111d5565b506121946040820182612147565b6121a160408401826111e4565b506121af60608201826116c3565b610aa260608401826114e8565b608081016111be8284612157565b60018152602081017f760000000000000000000000000000000000000000000000000000000000000081529050611233565b6040808252810161220c816121ca565b90506111be60208301846111e4565b61222581836111e4565b602001919050565b60338152602081017f496e76616c696420696e636c7573696f6e2070726f6f6620666f722076616c7581527f65207472616e73666572206d6573736167652e0000000000000000000000000060208201529050611880565b602080825281016111be8161222d565b60258152602081017f526f6f7420616c726561647920616464656420746f20746865206d657373616781527f652062757300000000000000000000000000000000000000000000000000000060208201529050611880565b602080825281016111be81612295565b60006020828403121561231257612312600080fd5b6111bb83836116b8565b60006020828403121561233157612331600080fd5b6111bb8383611460565b60018152602081017f6d0000000000000000000000000000000000000000000000000000000000000081529050611233565b6040808252810161220c8161233b565b60308152602081017f496e76616c696420696e636c7573696f6e2070726f6f6620666f722063726f7381527f7320636861696e206d6573736167652e0000000000000000000000000000000060208201529050611880565b602080825281016111be8161237d565b67ffffffffffffffff9182169190811690828201908111156111be576111be611980565b634e487b7160e01b600052603260045260246000fdfea26469706673582212209046d260e6ecf02a9b545045265133ebd2a8a091d8cfe42d8fe9829451348f2664736f6c634300081c0033a2646970667358221220101b62990bb77813fedaf26fccfbe1484c6f6ffffdafd582c8320a8b7f985f8464736f6c634300081c0033", + 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\":\"requester\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"requestReport\",\"type\":\"string\"}],\"name\":\"NetworkSecretRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"requester\",\"type\":\"address\"}],\"name\":\"NetworkSecretResponded\",\"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\":\"bytes32\",\"name\":\"rollupHash\",\"type\":\"bytes32\"}],\"name\":\"RollupAdded\",\"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\":\"bytes32\",\"name\":\"BlockBindingHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"BlockBindingNumber\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"crossChainRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structStructs.MetaRollup\",\"name\":\"r\",\"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\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"}],\"internalType\":\"structStructs.ValueTransferMessage\",\"name\":\"_msg\",\"type\":\"tuple\"},{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"ExtractNativeValue\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"GetChallengePeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"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\":\"bytes32\",\"name\":\"BlockBindingHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"BlockBindingNumber\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"crossChainRoot\",\"type\":\"bytes32\"}],\"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\":\"uint256\",\"name\":\"_delay\",\"type\":\"uint256\"}],\"name\":\"SetChallengePeriod\",\"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\":[{\"internalType\":\"bytes[]\",\"name\":\"crossChainHashes\",\"type\":\"bytes[]\"}],\"name\":\"isBundleAvailable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"isBundleSaved\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"isWithdrawalSpent\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastBatchHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastBatchSeqNo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"merkleMessageBus\",\"outputs\":[{\"internalType\":\"contractIMerkleTreeMessageBus\",\"name\":\"\",\"type\":\"address\"}],\"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: "0x6080604052348015600f57600080fd5b50601733601b565b608c565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b614ef88061009b6000396000f3fe608060405234801561001057600080fd5b50600436106101ce5760003560e01c80637281099611610104578063a1a227fa116100a2578063db5d91b111610071578063db5d91b11461043e578063e34fbfc81461046a578063e874eb201461047d578063f2fde38b1461049057600080fd5b8063a1a227fa146103e8578063a4ab2faa14610408578063a52f433c1461041b578063d4fab8871461042b57600080fd5b806384154826116100de57806384154826146103625780638da5cb5b1461038557806395b6b662146103b557806398077e86146103c857600080fd5b806372810996146103315780638129fc1c146103395780638236a7ba1461034157600080fd5b8063476657381161017157806368e103831161014b57806368e10383146102ee5780636a30d26c146103015780636b9707d614610316578063715018a61461032957600080fd5b806347665738146102b55780635024621f146102c85780635371a216146102db57600080fd5b80632f0cb9e3116101ad5780632f0cb9e31461020f5780633e60a22f1461023f57806343348b2f14610280578063440c953b146102ac57600080fd5b80620ddd27146101d357806303e72e48146101f25780631aca00ab14610207575b600080fd5b6101dc600c5481565b6040516101e991906117c3565b60405180910390f35b6102056102003660046118f9565b6104a3565b005b600d546101dc565b61023261021d36600461195f565b600a6020526000908152604090205460ff1681565b6040516101e99190611986565b61027361024d366004611994565b80516020818301810180516003825292820191909301209152546001600160a01b031681565b6040516101e991906119e0565b61023261028e3660046119ee565b6001600160a01b031660009081526020819052604090205460ff1690565b6101dc60055481565b6102056102c33660046119ee565b6105ab565b6102056102d636600461195f565b610654565b6102056102e9366004611a7a565b610661565b6102056102fc366004611b30565b610806565b6103096108aa565b6040516101e99190611c89565b6102056103243660046119ee565b610983565b610205610a13565b610205610a27565b610205610aac565b61035461034f36600461195f565b610c82565b6040516101e9929190611d14565b61023261037036600461195f565b600b6020526000908152604090205460ff1681565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b0316610273565b6102056103c3366004611d49565b610da0565b6103db6103d636600461195f565b610f38565b6040516101e99190611d84565b6008546103fb906001600160a01b031681565b6040516101e99190611dd7565b610232610416366004611ea2565b610fe4565b600454610100900460ff16610232565b610205610439366004611ef0565b611062565b61023261044c3660046119ee565b6001600160a01b031660009081526001602052604090205460ff1690565b610205610478366004611f97565b61116a565b6009546103fb906001600160a01b031681565b61020561049e3660046119ee565b6111b1565b6104ab611208565b60006001600160a01b03166003836040516104c69190612001565b908152604051908190036020019020546001600160a01b03160361052257600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0161052083826120dd565b505b806003836040516105339190612001565b90815260405190819003602001812080546001600160a01b039390931673ffffffffffffffffffffffffffffffffffffffff19909316929092179091557f17b2f9f5748931099ffee882b5b64f4a560b5c55da9b4f4e396dae3bb9f98cb59061059f908490849061219d565b60405180910390a15050565b6105b3611208565b6001600160a01b03811660009081526020819052604090205460ff166105f45760405162461bcd60e51b81526004016105eb906121ef565b60405180910390fd5b6001600160a01b038116600090815260016020819052604091829020805460ff19169091179055517ffe64c7181f0fc60e300dc02cca368cdfa94d7ca45902de3b9a9d80070e760936906106499083906119e0565b60405180910390a150565b61065c611208565b600d55565b6009546040517fb201246f0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063b201246f906106b090879087908790879060040161231a565b60006040518083038186803b1580156106c857600080fd5b505afa1580156106dc573d6000803e3d6000fd5b505050506000846040516020016106f39190612353565b60408051601f1981840301815291815281516020928301206000818152600a90935291205490915060ff161561073b5760405162461bcd60e51b81526004016105eb90612393565b6001600a6000876040516020016107529190612353565b60408051808303601f190181529181528151602092830120835282820193909352908201600020805460ff1916931515939093179092556008546001600160a01b0316916399a3ad21916107ab919089019089016119ee565b87604001356040518363ffffffff1660e01b81526004016107cd9291906123a3565b600060405180830381600087803b1580156107e757600080fd5b505af11580156107fb573d6000803e3d6000fd5b505050505050505050565b60045460ff16156108295760405162461bcd60e51b81526004016105eb90612418565b60048054600160ff1991821681179092556001600160a01b0387166000908152602081815260408083208054851686179055908490529081902080549092169092179055517ffe64c7181f0fc60e300dc02cca368cdfa94d7ca45902de3b9a9d80070e7609369061089b9087906119e0565b60405180910390a15050505050565b60606002805480602002602001604051908101604052809291908181526020016000905b8282101561097a5783829060005260206000200180546108ed90612021565b80601f016020809104026020016040519081016040528092919081815260200182805461091990612021565b80156109665780601f1061093b57610100808354040283529160200191610966565b820191906000526020600020905b81548152906001019060200180831161094957829003601f168201915b5050505050815260200190600101906108ce565b50505050905090565b61098b611208565b6001600160a01b03811660009081526001602052604090205460ff166109c35760405162461bcd60e51b81526004016105eb9061245a565b6001600160a01b03811660009081526001602052604090819020805460ff19169055517f0f279980343c7ca542fde9fa5396555068efb5cd560d9cf9c191aa2911079b47906106499083906119e0565b610a1b611208565b610a25600061127c565b565b610a2f611208565b6008546040517f36d2da900000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906336d2da9090610a789033906004016119e0565b600060405180830381600087803b158015610a9257600080fd5b505af1158015610aa6573d6000803e3d6000fd5b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610af75750825b905060008267ffffffffffffffff166001148015610b145750303b155b905081158015610b22575080155b15610b59576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610b8d57845468ff00000000000000001916680100000000000000001785555b610b96336112fa565b6000600555604051610ba7906117ae565b604051809103906000f080158015610bc3573d6000803e3d6000fd5b50600980546001600160a01b039290921673ffffffffffffffffffffffffffffffffffffffff1992831681179091556008805490921681179091556040517fbd726cf82ac9c3260b1495107182e336e0654b25c10915648c0cc15b2bb72cbf91610c2c916119e0565b60405180910390a18315610c7b57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061089b90600190612485565b5050505050565b6040805160c08101825260008082526060602083018190529282018190529181018290526080810182905260a081018290526000838152600660209081526040808320815160c08101909252805482526001810180549293919291840191610ce990612021565b80601f0160208091040260200160405190810160405280929190818152602001828054610d1590612021565b8015610d625780601f10610d3757610100808354040283529160200191610d62565b820191906000526020600020905b815481529060010190602001808311610d4557829003601f168201915b505050918352505060028201546020820152600382015460408201526004820154606082015260059091015460809091015280519094149492505050565b806000610def8235610db56020850185612493565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061130b92505050565b6001600160a01b03811660009081526020819052604090205490915060ff16610e2a5760405162461bcd60e51b81526004016105eb906121ef565b6001600160a01b03811660009081526001602052604090205460ff16610e625760405162461bcd60e51b81526004016105eb9061245a565b610e6b83611337565b60a083013560001914610efa576009546040517fb6aed0cb0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063b6aed0cb90610ec79060a08701359042906004016124e8565b600060405180830381600087803b158015610ee157600080fd5b505af1158015610ef5573d6000803e3d6000fd5b505050505b6040517fd6555bff8670bd3008dc064c30bb56d6ac7cb14ae801e36146fe4e7c6a504a5890610f2b908535906117c3565b60405180910390a1505050565b60028181548110610f4857600080fd5b906000526020600020016000915090508054610f6390612021565b80601f0160208091040260200160405190810160405280929190818152602001828054610f8f90612021565b8015610fdc5780601f10610fb157610100808354040283529160200191610fdc565b820191906000526020600020905b815481529060010190602001808311610fbf57829003601f168201915b505050505081565b600080805b83518110156110495781848281518110611005576110056124f6565b602002602001015161101690612516565b6040516020016110279291906124e8565b60408051601f1981840301815291905280516020909101209150600101610fe9565b506000908152600b602052604090205460ff1692915050565b6001600160a01b03851660009081526020819052604090205460ff168061109b5760405162461bcd60e51b81526004016105eb906125a4565b81156111135760006110cf8787866040516020016110bb939291906125dc565b60405160208183030381529060405261136c565b905060006110dd828761130b565b9050876001600160a01b0316816001600160a01b0316146111105760405162461bcd60e51b81526004016105eb90612658565b50505b6001600160a01b03808616600081815260208190526040808220805460ff191660011790555191928916917fb869e23ebc7c717d76e345eee8ec282612603e45c44f7ae5494b197c8d9d1be19190a3505050505050565b336001600160a01b03167f0b0ecdedd12079aa2d6c5e0186026c711cb0c8d04f1b724ba5880fb6328d430183836040516111a5929190612688565b60405180910390a25050565b6111b9611208565b6001600160a01b0381166111fc5760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016105eb91906119e0565b6112058161127c565b50565b3361123a7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614610a2557336040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016105eb91906119e0565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6113026113a7565b6112058161140e565b60008060008061131b8686611416565b92509250925061132b8282611463565b50909150505b92915050565b803560009081526006602052604090208190611353828261285a565b5050600554604082013511156112055760400135600555565b60006113788251611569565b8260405160200161138a929190612864565b604051602081830303815290604052805190602001209050919050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16610a25576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111b96113a7565b600080600083516041036114505760208401516040850151606086015160001a6114428882858561160a565b95509550955050505061145c565b50508151600091506002905b9250925092565b6000826003811115611477576114776128a0565b03611480575050565b6001826003811115611494576114946128a0565b036114cb576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028260038111156114df576114df6128a0565b03611518576040517ffce698f70000000000000000000000000000000000000000000000000000000081526105eb9082906004016117c3565b600382600381111561152c5761152c6128a0565b0361156557806040517fd78bce0c0000000000000000000000000000000000000000000000000000000081526004016105eb91906117c3565b5050565b60606000611576836116cc565b600101905060008167ffffffffffffffff811115611596576115966117d1565b6040519080825280601f01601f1916602001820160405280156115c0576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846115ca575b509392505050565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561164557506000915060039050826116c2565b60006001888888886040516000815260200160405260405161166a94939291906128bf565b6020604051602081039080840390855afa15801561168c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166116b8575060009250600191508290506116c2565b9250600091508190505b9450945094915050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611715577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310611741576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061175f57662386f26fc10000830492506010015b6305f5e1008310611777576305f5e100830492506008015b612710831061178b57612710830492506004015b6064831061179d576064830492506002015b600a83106113315760010192915050565b6125ce806128f583390190565b805b82525050565b6020810161133182846117bb565b634e487b7160e01b600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff8211171561180d5761180d6117d1565b6040525050565b600061181f60405190565b905061182b82826117e7565b919050565b600067ffffffffffffffff82111561184a5761184a6117d1565b601f19601f83011660200192915050565b82818337506000910152565b600061187a61187584611830565b611814565b905082815283838301111561189157611891600080fd5b61189f83602083018461185b565b9392505050565b600082601f8301126118ba576118ba600080fd5b61189f83833560208501611867565b60006001600160a01b038216611331565b6118e3816118c9565b811461120557600080fd5b8035611331816118da565b6000806040838503121561190f5761190f600080fd5b823567ffffffffffffffff81111561192957611929600080fd5b611935858286016118a6565b92505061194584602085016118ee565b90509250929050565b806118e3565b80356113318161194e565b60006020828403121561197457611974600080fd5b61189f8383611954565b8015156117bd565b60208101611331828461197e565b6000602082840312156119a9576119a9600080fd5b813567ffffffffffffffff8111156119c3576119c3600080fd5b6119cf848285016118a6565b949350505050565b6117bd816118c9565b6020810161133182846119d7565b600060208284031215611a0357611a03600080fd5b61189f83836118ee565b600060808284031215611a2257611a22600080fd5b50919050565b60008083601f840112611a3d57611a3d600080fd5b50813567ffffffffffffffff811115611a5857611a58600080fd5b602083019150836020820283011115611a7357611a73600080fd5b9250929050565b60008060008060c08587031215611a9357611a93600080fd5b611a9d8686611a0d565b9350608085013567ffffffffffffffff811115611abc57611abc600080fd5b611ac887828801611a28565b9350935050611ada8660a08701611954565b905092959194509250565b60008083601f840112611afa57611afa600080fd5b50813567ffffffffffffffff811115611b1557611b15600080fd5b602083019150836001820283011115611a7357611a73600080fd5b600080600080600060608688031215611b4b57611b4b600080fd5b611b5587876118ee565b9450602086013567ffffffffffffffff811115611b7457611b74600080fd5b611b8088828901611ae5565b9450945050604086013567ffffffffffffffff811115611ba257611ba2600080fd5b611bae88828901611ae5565b92509250509295509295909350565b60005b83811015611bd8578181015183820152602001611bc0565b50506000910152565b6000611beb825190565b808452602084019350611c02818560208601611bbd565b601f01601f19169290920192915050565b600061189f8383611be1565b60200190565b6000611c2f825190565b80845260208401935083602082028501611c498560200190565b60005b84811015611c7d5783830388528151611c658482611c13565b93505060208201602098909801979150600101611c4c565b50909695505050505050565b6020808252810161189f8184611c25565b805160009060c0840190611cae85826117bb565b5060208301518482036020860152611cc68282611be1565b9150506040830151611cdb60408601826117bb565b506060830151611cee60608601826117bb565b506080830151611d0160808601826117bb565b5060a083015161160260a08601826117bb565b60408101611d22828561197e565b81810360208301526119cf8184611c9a565b600060c08284031215611a2257611a22600080fd5b600060208284031215611d5e57611d5e600080fd5b813567ffffffffffffffff811115611d7857611d78600080fd5b6119cf84828501611d34565b6020808252810161189f8184611be1565b60006113316001600160a01b038316611dac565b90565b6001600160a01b031690565b600061133182611d95565b600061133182611db8565b6117bd81611dc3565b602081016113318284611dce565b600067ffffffffffffffff821115611dff57611dff6117d1565b5060209081020190565b6000611e1761187584611de5565b83815290506020808201908402830185811115611e3657611e36600080fd5b835b81811015611e7557803567ffffffffffffffff811115611e5a57611e5a600080fd5b611e66888288016118a6565b84525060209283019201611e38565b5050509392505050565b600082601f830112611e9357611e93600080fd5b61189f83833560208501611e09565b600060208284031215611eb757611eb7600080fd5b813567ffffffffffffffff811115611ed157611ed1600080fd5b6119cf84828501611e7f565b8015156118e3565b803561133181611edd565b600080600080600060a08688031215611f0b57611f0b600080fd5b611f1587876118ee565b9450611f2487602088016118ee565b9350604086013567ffffffffffffffff811115611f4357611f43600080fd5b611f4f888289016118a6565b935050606086013567ffffffffffffffff811115611f6f57611f6f600080fd5b611f7b888289016118a6565b925050611f8b8760808801611ee5565b90509295509295909350565b60008060208385031215611fad57611fad600080fd5b823567ffffffffffffffff811115611fc757611fc7600080fd5b611fd385828601611ae5565b92509250509250929050565b6000611fe9825190565b611ff7818560208601611bbd565b9290920192915050565b6113318183611fdf565b634e487b7160e01b600052602260045260246000fd5b60028104600182168061203557607f821691505b602082108103611a2257611a2261200b565b6000611331611da98381565b61205c83612047565b815460001960089490940293841b1916921b91909117905550565b6000612084818484612053565b505050565b818110156115655761209c600082612077565b600101612089565b601f821115612084576000818152602090206020601f850104810160208510156120cb5750805b610c7b6020601f860104830182612089565b815167ffffffffffffffff8111156120f7576120f76117d1565b6121018254612021565b61210c8282856120a4565b506020601f82116001811461214157600083156121295750848201515b600019600885021c1981166002850217855550610c7b565b600084815260208120601f198516915b828110156121715787850151825560209485019460019092019101612151565b508482101561218e5783870151600019601f87166008021c191681555b50505050600202600101905550565b604080825281016121ae8185611be1565b905061189f60208301846119d7565b60168152602081017f656e636c6176654944206e6f742061747465737465640000000000000000000081529050611c1f565b60208082528101611331816121bd565b50600061133160208301836118ee565b5060006113316020830183611954565b67ffffffffffffffff81166118e3565b80356113318161221f565b506000611331602083018361222f565b67ffffffffffffffff81166117bd565b61226481806121ff565b61226e83826119d7565b5061227c60208201826121ff565b61228960208401826119d7565b50612297604082018261220f565b6122a460408401826117bb565b506122b2606082018261223a565b612084606084018261224a565b82818337505050565b81835260208301925060007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83111561230357612303600080fd5b6020830292506123148385846122bf565b50500190565b60c08101612328828761225a565b818103608083015261233b8185876122c8565b905061234a60a08301846117bb565b95945050505050565b60808101611331828461225a565b60188152602081017f7769746864726177616c20616c7265616479207370656e74000000000000000081529050611c1f565b6020808252810161133181612361565b604081016123b182856119d7565b61189f60208301846117bb565b60228152602081017f6e6574776f726b2073656372657420616c726561647920696e697469616c697a81527f6564000000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b60208082528101611331816123be565b60198152602081017f656e636c6176654944206e6f7420612073657175656e6365720000000000000081529050611c1f565b6020808252810161133181612428565b600067ffffffffffffffff8216611331565b6117bd8161246a565b60208101611331828461247c565b6000808335601e19368590030181126124ae576124ae600080fd5b8301915050803567ffffffffffffffff8111156124cd576124cd600080fd5b602082019150600181023603821315611a7357611a73600080fd5b604081016123b182856117bb565b634e487b7160e01b600052603260045260246000fd5b6000611331825190565b6000612520825190565b6020830161252d8161250c565b9250506020811015611a22576000196020919091036008021b16919050565b60238152602081017f726573706f6e64696e67206174746573746572206973206e6f7420617474657381527f746564000000000000000000000000000000000000000000000000000000000060208201529050612412565b602080825281016113318161254c565b60006113318260601b90565b6000611331826125b4565b6117bd6125d7826118c9565b6125c0565b6125e681856125cb565b6014016125f381846125cb565b6014016119cf8183611fdf565b602c8152602081017f63616c63756c61746564206164647265737320616e642061747465737465724981527f4420646f6e74206d61746368000000000000000000000000000000000000000060208201529050612412565b6020808252810161133181612600565b81835260208301925061267c82848361185b565b50601f01601f19160190565b602080825281016119cf818486612668565b600081356113318161194e565b600081611331565b6126b8826126a7565b6126c4611da9826126a7565b8255505050565b8267ffffffffffffffff8111156126e4576126e46117d1565b6126ee8254612021565b6126f98282856120a4565b506000601f82116001811461272e57600083156127165750848201355b600019600885021c1981166002850217855550612788565b600084815260209020601f19841690835b8281101561275f578785013582556020948501946001909201910161273f565b508482101561277c576000196008601f8716021c19878501351681555b50506001600284020184555b505050505050565b6120848383836126cb565b6127a482612047565b806126c4565b81806127b58161269a565b90506127c181846126af565b50506127d06020830183612493565b6127de818360018601612790565b505060408201806127ee8261269a565b90506127fd816002850161279b565b5050606082018061280d8261269a565b905061281c81600385016126af565b5050608082018061282c8261269a565b905061283b816004850161279b565b505060a082018061284b8261269a565b9050610aa681600585016126af565b61156582826127aa565b7f19457468657265756d205369676e6564204d6573736167653a0a0000000000008152601a016128948184611fdf565b905061189f8183611fdf565b634e487b7160e01b600052602160045260246000fd5b60ff81166117bd565b608081016128cd82876117bb565b6128da60208301866128b6565b6128e760408301856117bb565b61234a60608301846117bb56fe608060405234801561001057600080fd5b5061001a33610027565b610022610098565b61014a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100e85760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101475780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b612475806101596000396000f3fe6080604052600436106101115760003560e01c80638da5cb5b116100a5578063b1454caa11610074578063b6aed0cb11610059578063b6aed0cb1461038b578063e138a8d2146103ab578063f2fde38b146103cb57610185565b8063b1454caa1461034b578063b201246f1461036b57610185565b80638da5cb5b146102a65780639730886d146102eb57806399a3ad211461030b578063ab53bddc1461032b57610185565b8063346633fb116100e1578063346633fb1461023e57806336d2da9014610251578063485cc95514610271578063715018a61461029157610185565b8062a1b815146101a65780630fcfbd11146101d15780630fe9188e146101f157806333a88c721461021157610185565b36610185576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb903490610156903390839060040161120a565b6000604051808303818588803b15801561016f57600080fd5b505af1158015610183573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161019d90611259565b60405180910390fd5b3480156101b257600080fd5b506101bb6103eb565b6040516101c89190611269565b60405180910390f35b3480156101dd57600080fd5b506101bb6101ec366004611292565b610477565b3480156101fd57600080fd5b5061018361020c3660046112e5565b6104d6565b34801561021d57600080fd5b5061023161022c366004611292565b61051c565b6040516101c8919061130c565b61018361024c36600461132e565b61056e565b34801561025d57600080fd5b5061018361026c366004611366565b6106bd565b34801561027d57600080fd5b5061018361028c366004611385565b61073c565b34801561029d57600080fd5b506101836108a7565b3480156102b257600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166040516101c891906113b4565b3480156102f757600080fd5b506101836103063660046113c2565b6108bb565b34801561031757600080fd5b5061018361032636600461132e565b610a27565b34801561033757600080fd5b5061018361034636600461132e565b610ac7565b61035e61035936600461148b565b610b90565b6040516101c89190611518565b34801561037757600080fd5b50610183610386366004611586565b610c9d565b34801561039757600080fd5b506101836103a63660046115f1565b610d9e565b3480156103b757600080fd5b506101836103c6366004611611565b610de4565b3480156103d757600080fd5b506101836103e6366004611366565b610f2f565b600354604080517f1a90a21900000000000000000000000000000000000000000000000000000000815290516000926001600160a01b031691631a90a2199160048083019260209291908290030181865afa15801561044e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104729190611699565b905090565b6000808260405160200161048b9190611857565b60408051601f198184030181529181528151602092830120600081815292839052912054909150806104cf5760405162461bcd60e51b815260040161019d906118a6565b9392505050565b6104de610f86565b600081815260046020526040812054900361050b5760405162461bcd60e51b815260040161019d906118e8565b600090815260046020526040812055565b600080826040516020016105309190611857565b60408051601f19818403018152918152815160209283012060008181529283905291205490915080158015906105665750428111155b949350505050565b60003411801561057d57508034145b6105995760405162461bcd60e51b815260040161019d90611950565b60035434906001600160a01b03161561065d5760006105b66103eb565b9050803410156105d85760405162461bcd60e51b815260040161019d90611990565b6105e281346119b6565b6003546040519193506000916001600160a01b039091169083908381818185875af1925050503d8060008114610634576040519150601f19603f3d011682016040523d82523d6000602084013e610639565b606091505b505090508061065a5760405162461bcd60e51b815260040161019d90611a21565b50505b600061066833610ffa565b9050836001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b684846040516106af929190611a31565b60405180910390a350505050565b6106c5610f86565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610712576040519150601f19603f3d011682016040523d82523d6000602084013e610717565b606091505b50509050806107385760405162461bcd60e51b815260040161019d90611a7e565b5050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156107875750825b905060008267ffffffffffffffff1660011480156107a45750303b155b9050811580156107b2575080155b156107e9576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561081d57845468ff00000000000000001916680100000000000000001785555b61082687611058565b6003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038816179055831561089e57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061089590600190611ab2565b60405180910390a15b50505050505050565b6108af610f86565b6108b96000611069565b565b60006108c8600130611ac0565b90506108fb7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806109225750336001600160a01b038216145b61093e5760405162461bcd60e51b815260040161019d90611b15565b600061094a8342611b25565b905060008460405160200161095f9190611857565b60408051601f198184030181529181528151602092830120600081815292839052912054909150156109a35760405162461bcd60e51b815260040161019d90611b90565b6000818152602081815260408220849055600191906109c490880188611366565b6001600160a01b0316815260208101919091526040016000908120906109f06080880160608901611ba0565b63ffffffff1681526020808201929092526040016000908120805460018101825590825291902086916004020161089e8282611fde565b610a2f610f86565b80471015610a4f5760405162461bcd60e51b815260040161019d90611990565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610a9c576040519150601f19603f3d011682016040523d82523d6000602084013e610aa1565b606091505b5050905080610ac25760405162461bcd60e51b815260040161019d90611a7e565b505050565b6000610ad4600130611ac0565b9050610b077f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b03161480610b2e5750336001600160a01b038216145b610b4a5760405162461bcd60e51b815260040161019d90611b15565b826001600160a01b03167fcd9850463422a7449c406a036e35e5edb6fbe35a64c9f12a2354be98a750c0d383604051610b839190611269565b60405180910390a2505050565b6003546000906001600160a01b031615610c46576000610bae6103eb565b905080341015610bd05760405162461bcd60e51b815260040161019d90612040565b6003546040516000916001600160a01b03169083908381818185875af1925050503d8060008114610c1d576040519150601f19603f3d011682016040523d82523d6000602084013e610c22565b606091505b5050905080610c435760405162461bcd60e51b815260040161019d90611a21565b50505b610c4f33610ffa565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef77593733828888888888604051610c8c9796959493929190612050565b60405180910390a195945050505050565b6000818152600460205260408120549003610cca5760405162461bcd60e51b815260040161019d9061210b565b600081815260046020526040902054421015610cf85760405162461bcd60e51b815260040161019d90612157565b600084604051602001610d0b91906121dc565b60405160208183030381529060405280519060200120604051602001610d31919061221c565b604051602081830303815290604052805190602001209050610d7b84848484604051602001610d60919061223b565b604051602081830303815290604052805190602001206110e7565b610d975760405162461bcd60e51b815260040161019d906122a5565b5050505050565b610da6610f86565b60008281526004602052604090205415610dd25760405162461bcd60e51b815260040161019d9061230d565b60009182526004602052604090912055565b6000818152600460205260408120549003610e115760405162461bcd60e51b815260040161019d9061210b565b600081815260046020526040902054421015610e3f5760405162461bcd60e51b815260040161019d90612157565b6000610e4e6020860186611366565b610e5e604087016020880161231d565b610e6e6060880160408901611ba0565b610e7e6080890160608a01611ba0565b610e8b60808a018a611cf7565b610e9b60c08c0160a08d0161233c565b604051602001610eb19796959493929190612050565b604051602081830303815290604052805190602001209050600081604051602001610edc919061238d565b604051602081830303815290604052805190602001209050610f0b85858584604051602001610d60919061223b565b610f275760405162461bcd60e51b815260040161019d906123f5565b505050505050565b610f37610f86565b6001600160a01b038116610f7a5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161019d91906113b4565b610f8381611069565b50565b33610fb87f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146108b957336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161019d91906113b4565b6001600160a01b0381166000908152600260205260408120805467ffffffffffffffff16916001919061102d8385612405565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b6110606110ff565b610f8381611166565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6000826110f586868561116e565b1495945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166108b9576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f376110ff565b600081815b848110156111a75761119d8287878481811061119157611191612429565b905060200201356111b0565b9150600101611173565b50949350505050565b60008183106111cc5760008281526020849052604090206111db565b60008381526020839052604090205b90505b92915050565b60006001600160a01b0382166111de565b6111fe816111e4565b82525050565b806111fe565b6040810161121882856111f5565b6104cf6020830184611204565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b602080825281016111de81611225565b602081016111de8284611204565b600060c0828403121561128c5761128c600080fd5b50919050565b6000602082840312156112a7576112a7600080fd5b813567ffffffffffffffff8111156112c1576112c1600080fd5b61056684828501611277565b805b8114610f8357600080fd5b80356111de816112cd565b6000602082840312156112fa576112fa600080fd5b6111db83836112da565b8015156111fe565b602081016111de8284611304565b6112cf816111e4565b80356111de8161131a565b6000806040838503121561134457611344600080fd5b61134e8484611323565b915061135d84602085016112da565b90509250929050565b60006020828403121561137b5761137b600080fd5b6111db8383611323565b6000806040838503121561139b5761139b600080fd5b6113a58484611323565b915061135d8460208501611323565b602081016111de82846111f5565b600080604083850312156113d8576113d8600080fd5b823567ffffffffffffffff8111156113f2576113f2600080fd5b6113fe85828601611277565b92505061135d84602085016112da565b63ffffffff81166112cf565b80356111de8161140e565b60008083601f84011261143a5761143a600080fd5b50813567ffffffffffffffff81111561145557611455600080fd5b60208301915083600182028301111561147057611470600080fd5b9250929050565b60ff81166112cf565b80356111de81611477565b6000806000806000608086880312156114a6576114a6600080fd5b6114b0878761141a565b94506114bf876020880161141a565b9350604086013567ffffffffffffffff8111156114de576114de600080fd5b6114ea88828901611425565b93509350506114fc8760608801611480565b90509295509295909350565b67ffffffffffffffff81166111fe565b602081016111de8284611508565b60006080828403121561128c5761128c600080fd5b60008083601f84011261155057611550600080fd5b50813567ffffffffffffffff81111561156b5761156b600080fd5b60208301915083602082028301111561147057611470600080fd5b60008060008060c0858703121561159f5761159f600080fd5b6115a98686611526565b9350608085013567ffffffffffffffff8111156115c8576115c8600080fd5b6115d48782880161153b565b93509350506115e68660a087016112da565b905092959194509250565b6000806040838503121561160757611607600080fd5b61134e84846112da565b6000806000806060858703121561162a5761162a600080fd5b843567ffffffffffffffff81111561164457611644600080fd5b61165087828801611277565b945050602085013567ffffffffffffffff81111561167057611670600080fd5b61167c8782880161153b565b93509350506115e686604087016112da565b80516111de816112cd565b6000602082840312156116ae576116ae600080fd5b6111db838361168e565b5060006111de6020830183611323565b67ffffffffffffffff81166112cf565b80356111de816116c8565b5060006111de60208301836116d8565b5060006111de602083018361141a565b63ffffffff81166111fe565b6000808335601e193685900301811261172a5761172a600080fd5b830160208101925035905067ffffffffffffffff81111561174d5761174d600080fd5b3681900382131561147057611470600080fd5b82818337506000910152565b818352602083019250611780828483611760565b50601f01601f19160190565b5060006111de6020830183611480565b60ff81166111fe565b600060c083016117b583806116b8565b6117bf85826111f5565b506117cd60208401846116e3565b6117da6020860182611508565b506117e860408401846116f3565b6117f56040860182611703565b5061180360608401846116f3565b6118106060860182611703565b5061181e608084018461170f565b858303608087015261183183828461176c565b9250505061184260a084018461178c565b61184f60a086018261179c565b509392505050565b602080825281016111db81846117a5565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d69747465648152601760f91b602082015290505b60400190565b602080825281016111de81611868565b601a8152602081017f537461746520726f6f7420646f6573206e6f742065786973742e00000000000081529050611253565b602080825281016111de816118b6565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e6720457468657200000000000000000000000000000000602082015290506118a0565b602080825281016111de816118f8565b60208082527f496e73756666696369656e742066756e647320746f2073656e642076616c75659101908152611253565b602080825281016111de81611960565b634e487b7160e01b600052601160045260246000fd5b818103818111156111de576111de6119a0565b60248152602081017f4661696c656420746f2073656e64206665657320746f206665657320636f6e7481527f7261637400000000000000000000000000000000000000000000000000000000602082015290506118a0565b602080825281016111de816119c9565b60408101611a3f8285611204565b6104cf6020830184611508565b60148152602081017f6661696c65642073656e64696e672076616c756500000000000000000000000081529050611253565b602080825281016111de81611a4c565b60006111de82611a9c565b90565b67ffffffffffffffff1690565b6111fe81611a8e565b602081016111de8284611aa9565b6001600160a01b039182169190811690828203908111156111de576111de6119a0565b60118152602081017f4e6f74206f776e6572206f722073656c6600000000000000000000000000000081529050611253565b602080825281016111de81611ae3565b808201808211156111de576111de6119a0565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f2100000000000000000000000000000000000000000000000000000000000000602082015290506118a0565b602080825281016111de81611b38565b600060208284031215611bb557611bb5600080fd5b6111db838361141a565b600081356111de8161131a565b60006001600160a01b03835b81169019929092169190911792915050565b60006111de826111e4565b60006111de82611bea565b611c0982611bf5565b611c14818354611bcc565b8255505050565b600081356111de816116c8565b60007bffffffffffffffff0000000000000000000000000000000000000000611bd88460a01b90565b60006111de67ffffffffffffffff8316611a9c565b611c6f82611c51565b611c14818354611c28565b600081356111de8161140e565b60007fffffffff00000000000000000000000000000000000000000000000000000000611bd88460e01b90565b600063ffffffff82166111de565b611ccb82611cb4565b611c14818354611c87565b600063ffffffff83611bd8565b611cec82611cb4565b611c14818354611cd6565b6000808335601e1936859003018112611d1257611d12600080fd5b8301915050803567ffffffffffffffff811115611d3157611d31600080fd5b60208201915060018102360382131561147057611470600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b600281046001821680611d8c57607f821691505b60208210810361128c5761128c611d62565b60006111de611a998381565b611db383611d9e565b815460001960089490940293841b1916921b91909117905550565b6000610ac2818484611daa565b8181101561073857611dee600082611dce565b600101611ddb565b601f821115610ac2576000818152602090206020601f85010481016020851015611e1d5750805b610d976020601f860104830182611ddb565b8267ffffffffffffffff811115611e4857611e48611d4c565b611e528254611d78565b611e5d828285611df6565b506000601f821160018114611e925760008315611e7a5750848201355b600019600885021c1981166002850217855550610f27565b600084815260209020601f19841690835b82811015611ec35787850135825560209485019460019092019101611ea3565b5084821015611ee0576000196008601f8716021c19878501351681555b5050505060020260010190555050565b610ac2838383611e2f565b600081356111de81611477565b600060ff82166111de565b611f1c82611f08565b815460ff191660ff821617611c14565b808280611f3881611bbf565b9050611f448184611c00565b50506020830180611f5482611c1b565b9050611f608184611c66565b50506040830180611f7082611c7a565b9050611f7c8184611cc2565b5050506060820180611f8d82611c7a565b9050611f9c8160018501611ce3565b5050611fab6080830183611cf7565b611fb9818360028601611ef0565b505060a0820180611fc982611efb565b9050611fd88160038501611f13565b50505050565b6107388282611f2c565b60258152602081017f496e73756666696369656e742066756e647320746f207075626c697368206d6581527f7373616765000000000000000000000000000000000000000000000000000000602082015290506118a0565b602080825281016111de81611fe8565b60c0810161205e828a6111f5565b61206b6020830189611508565b6120786040830188611703565b6120856060830187611703565b818103608083015261209881858761176c565b90506120a760a083018461179c565b98975050505050505050565b602a8152602081017f526f6f74206973206e6f74207075626c6973686564206f6e2074686973206d6581527f7373616765206275732e00000000000000000000000000000000000000000000602082015290506118a0565b602080825281016111de816120b3565b60218152602081017f526f6f74206973206e6f7420636f6e736964657265642066696e616c207965748152601760f91b602082015290506118a0565b602080825281016111de8161211b565b5060006111de60208301836112da565b61218181806116b8565b61218b83826111f5565b5061219960208201826116b8565b6121a660208401826111f5565b506121b46040820182612167565b6121c16040840182611204565b506121cf60608201826116e3565b610ac26060840182611508565b608081016111de8284612177565b60018152602081017f760000000000000000000000000000000000000000000000000000000000000081529050611253565b6040808252810161222c816121ea565b90506111de6020830184611204565b6122458183611204565b602001919050565b60338152602081017f496e76616c696420696e636c7573696f6e2070726f6f6620666f722076616c7581527f65207472616e73666572206d6573736167652e00000000000000000000000000602082015290506118a0565b602080825281016111de8161224d565b60258152602081017f526f6f7420616c726561647920616464656420746f20746865206d657373616781527f6520627573000000000000000000000000000000000000000000000000000000602082015290506118a0565b602080825281016111de816122b5565b60006020828403121561233257612332600080fd5b6111db83836116d8565b60006020828403121561235157612351600080fd5b6111db8383611480565b60018152602081017f6d0000000000000000000000000000000000000000000000000000000000000081529050611253565b6040808252810161222c8161235b565b60308152602081017f496e76616c696420696e636c7573696f6e2070726f6f6620666f722063726f7381527f7320636861696e206d6573736167652e00000000000000000000000000000000602082015290506118a0565b602080825281016111de8161239d565b67ffffffffffffffff9182169190811690828201908111156111de576111de6119a0565b634e487b7160e01b600052603260045260246000fdfea2646970667358221220f582c47618345ca2599c3d254b6ce9e0ea5159411fd58e3d9a86019ef0bc297d64736f6c634300081c0033a2646970667358221220443137aad7904971a052a9b0d3a4782bac899e95e4c1fff7f4df07023783bb5a64736f6c634300081c0033", } // ManagementContractABI is the input ABI used to generate the binding from. @@ -312,7 +315,7 @@ func (_ManagementContract *ManagementContractCallerSession) GetImportantContract // GetRollupByHash is a free data retrieval call binding the contract method 0x8236a7ba. // -// Solidity: function GetRollupByHash(bytes32 rollupHash) view returns(bool, (bytes32,bytes,uint256)) +// Solidity: function GetRollupByHash(bytes32 rollupHash) view returns(bool, (bytes32,bytes,uint256,bytes32,uint256,bytes32)) func (_ManagementContract *ManagementContractCaller) GetRollupByHash(opts *bind.CallOpts, rollupHash [32]byte) (bool, StructsMetaRollup, error) { var out []interface{} err := _ManagementContract.contract.Call(opts, &out, "GetRollupByHash", rollupHash) @@ -330,82 +333,18 @@ func (_ManagementContract *ManagementContractCaller) GetRollupByHash(opts *bind. // GetRollupByHash is a free data retrieval call binding the contract method 0x8236a7ba. // -// Solidity: function GetRollupByHash(bytes32 rollupHash) view returns(bool, (bytes32,bytes,uint256)) +// Solidity: function GetRollupByHash(bytes32 rollupHash) view returns(bool, (bytes32,bytes,uint256,bytes32,uint256,bytes32)) func (_ManagementContract *ManagementContractSession) GetRollupByHash(rollupHash [32]byte) (bool, StructsMetaRollup, error) { return _ManagementContract.Contract.GetRollupByHash(&_ManagementContract.CallOpts, rollupHash) } // GetRollupByHash is a free data retrieval call binding the contract method 0x8236a7ba. // -// Solidity: function GetRollupByHash(bytes32 rollupHash) view returns(bool, (bytes32,bytes,uint256)) +// Solidity: function GetRollupByHash(bytes32 rollupHash) view returns(bool, (bytes32,bytes,uint256,bytes32,uint256,bytes32)) func (_ManagementContract *ManagementContractCallerSession) GetRollupByHash(rollupHash [32]byte) (bool, StructsMetaRollup, error) { return _ManagementContract.Contract.GetRollupByHash(&_ManagementContract.CallOpts, rollupHash) } -// GetRollupByNumber is a free data retrieval call binding the contract method 0x87059edb. -// -// Solidity: function GetRollupByNumber(uint256 number) view returns(bool, (bytes32,bytes,uint256)) -func (_ManagementContract *ManagementContractCaller) GetRollupByNumber(opts *bind.CallOpts, number *big.Int) (bool, StructsMetaRollup, error) { - var out []interface{} - err := _ManagementContract.contract.Call(opts, &out, "GetRollupByNumber", number) - - if err != nil { - return *new(bool), *new(StructsMetaRollup), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - out1 := *abi.ConvertType(out[1], new(StructsMetaRollup)).(*StructsMetaRollup) - - return out0, out1, err - -} - -// GetRollupByNumber is a free data retrieval call binding the contract method 0x87059edb. -// -// Solidity: function GetRollupByNumber(uint256 number) view returns(bool, (bytes32,bytes,uint256)) -func (_ManagementContract *ManagementContractSession) GetRollupByNumber(number *big.Int) (bool, StructsMetaRollup, error) { - return _ManagementContract.Contract.GetRollupByNumber(&_ManagementContract.CallOpts, number) -} - -// GetRollupByNumber is a free data retrieval call binding the contract method 0x87059edb. -// -// Solidity: function GetRollupByNumber(uint256 number) view returns(bool, (bytes32,bytes,uint256)) -func (_ManagementContract *ManagementContractCallerSession) GetRollupByNumber(number *big.Int) (bool, StructsMetaRollup, error) { - return _ManagementContract.Contract.GetRollupByNumber(&_ManagementContract.CallOpts, number) -} - -// GetUniqueForkID is a free data retrieval call binding the contract method 0x568699c8. -// -// Solidity: function GetUniqueForkID(uint256 number) view returns(bytes32, (bytes32,bytes,uint256)) -func (_ManagementContract *ManagementContractCaller) GetUniqueForkID(opts *bind.CallOpts, number *big.Int) ([32]byte, StructsMetaRollup, error) { - var out []interface{} - err := _ManagementContract.contract.Call(opts, &out, "GetUniqueForkID", number) - - if err != nil { - return *new([32]byte), *new(StructsMetaRollup), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - out1 := *abi.ConvertType(out[1], new(StructsMetaRollup)).(*StructsMetaRollup) - - return out0, out1, err - -} - -// GetUniqueForkID is a free data retrieval call binding the contract method 0x568699c8. -// -// Solidity: function GetUniqueForkID(uint256 number) view returns(bytes32, (bytes32,bytes,uint256)) -func (_ManagementContract *ManagementContractSession) GetUniqueForkID(number *big.Int) ([32]byte, StructsMetaRollup, error) { - return _ManagementContract.Contract.GetUniqueForkID(&_ManagementContract.CallOpts, number) -} - -// GetUniqueForkID is a free data retrieval call binding the contract method 0x568699c8. -// -// Solidity: function GetUniqueForkID(uint256 number) view returns(bytes32, (bytes32,bytes,uint256)) -func (_ManagementContract *ManagementContractCallerSession) GetUniqueForkID(number *big.Int) ([32]byte, StructsMetaRollup, error) { - return _ManagementContract.Contract.GetUniqueForkID(&_ManagementContract.CallOpts, number) -} - // IsSequencerEnclave is a free data retrieval call binding the contract method 0xdb5d91b1. // // Solidity: function IsSequencerEnclave(address _addr) view returns(bool) @@ -778,23 +717,23 @@ func (_ManagementContract *ManagementContractCallerSession) Owner() (common.Addr return _ManagementContract.Contract.Owner(&_ManagementContract.CallOpts) } -// AddRollup is a paid mutator transaction binding the contract method 0x81be5385. +// AddRollup is a paid mutator transaction binding the contract method 0x95b6b662. // -// Solidity: function AddRollup((bytes32,bytes,uint256) r) returns() +// Solidity: function AddRollup((bytes32,bytes,uint256,bytes32,uint256,bytes32) r) returns() func (_ManagementContract *ManagementContractTransactor) AddRollup(opts *bind.TransactOpts, r StructsMetaRollup) (*types.Transaction, error) { return _ManagementContract.contract.Transact(opts, "AddRollup", r) } -// AddRollup is a paid mutator transaction binding the contract method 0x81be5385. +// AddRollup is a paid mutator transaction binding the contract method 0x95b6b662. // -// Solidity: function AddRollup((bytes32,bytes,uint256) r) returns() +// Solidity: function AddRollup((bytes32,bytes,uint256,bytes32,uint256,bytes32) r) returns() func (_ManagementContract *ManagementContractSession) AddRollup(r StructsMetaRollup) (*types.Transaction, error) { return _ManagementContract.Contract.AddRollup(&_ManagementContract.TransactOpts, r) } -// AddRollup is a paid mutator transaction binding the contract method 0x81be5385. +// AddRollup is a paid mutator transaction binding the contract method 0x95b6b662. // -// Solidity: function AddRollup((bytes32,bytes,uint256) r) returns() +// Solidity: function AddRollup((bytes32,bytes,uint256,bytes32,uint256,bytes32) r) returns() func (_ManagementContract *ManagementContractTransactorSession) AddRollup(r StructsMetaRollup) (*types.Transaction, error) { return _ManagementContract.Contract.AddRollup(&_ManagementContract.TransactOpts, r) } @@ -988,27 +927,6 @@ func (_ManagementContract *ManagementContractTransactorSession) SetImportantCont return _ManagementContract.Contract.SetImportantContractAddress(&_ManagementContract.TransactOpts, key, newAddress) } -// AddCrossChainMessagesRoot is a paid mutator transaction binding the contract method 0x073b6ef3. -// -// Solidity: function addCrossChainMessagesRoot(bytes32 _lastBatchHash, bytes32 providedBlockHash, uint256 blockNum, bytes[] crossChainHashes, bytes signature, uint256 rollupNumber, bytes32 forkID) returns() -func (_ManagementContract *ManagementContractTransactor) AddCrossChainMessagesRoot(opts *bind.TransactOpts, _lastBatchHash [32]byte, providedBlockHash [32]byte, blockNum *big.Int, crossChainHashes [][]byte, signature []byte, rollupNumber *big.Int, forkID [32]byte) (*types.Transaction, error) { - return _ManagementContract.contract.Transact(opts, "addCrossChainMessagesRoot", _lastBatchHash, providedBlockHash, blockNum, crossChainHashes, signature, rollupNumber, forkID) -} - -// AddCrossChainMessagesRoot is a paid mutator transaction binding the contract method 0x073b6ef3. -// -// Solidity: function addCrossChainMessagesRoot(bytes32 _lastBatchHash, bytes32 providedBlockHash, uint256 blockNum, bytes[] crossChainHashes, bytes signature, uint256 rollupNumber, bytes32 forkID) returns() -func (_ManagementContract *ManagementContractSession) AddCrossChainMessagesRoot(_lastBatchHash [32]byte, providedBlockHash [32]byte, blockNum *big.Int, crossChainHashes [][]byte, signature []byte, rollupNumber *big.Int, forkID [32]byte) (*types.Transaction, error) { - return _ManagementContract.Contract.AddCrossChainMessagesRoot(&_ManagementContract.TransactOpts, _lastBatchHash, providedBlockHash, blockNum, crossChainHashes, signature, rollupNumber, forkID) -} - -// AddCrossChainMessagesRoot is a paid mutator transaction binding the contract method 0x073b6ef3. -// -// Solidity: function addCrossChainMessagesRoot(bytes32 _lastBatchHash, bytes32 providedBlockHash, uint256 blockNum, bytes[] crossChainHashes, bytes signature, uint256 rollupNumber, bytes32 forkID) returns() -func (_ManagementContract *ManagementContractTransactorSession) AddCrossChainMessagesRoot(_lastBatchHash [32]byte, providedBlockHash [32]byte, blockNum *big.Int, crossChainHashes [][]byte, signature []byte, rollupNumber *big.Int, forkID [32]byte) (*types.Transaction, error) { - return _ManagementContract.Contract.AddCrossChainMessagesRoot(&_ManagementContract.TransactOpts, _lastBatchHash, providedBlockHash, blockNum, crossChainHashes, signature, rollupNumber, forkID) -} - // Initialize is a paid mutator transaction binding the contract method 0x8129fc1c. // // Solidity: function initialize() returns() diff --git a/contracts/generated/MerkleTreeMessageBus/MerkleTreeMessageBus.go b/contracts/generated/MerkleTreeMessageBus/MerkleTreeMessageBus.go index 28b2b8a847..a3afb06520 100644 --- a/contracts/generated/MerkleTreeMessageBus/MerkleTreeMessageBus.go +++ b/contracts/generated/MerkleTreeMessageBus/MerkleTreeMessageBus.go @@ -50,7 +50,7 @@ type StructsValueTransferMessage struct { // MerkleTreeMessageBusMetaData contains all meta data concerning the MerkleTreeMessageBus contract. var MerkleTreeMessageBusMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"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\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"name\":\"LogMessagePublished\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"NativeDeposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"}],\"name\":\"ValueTransfer\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"activationTime\",\"type\":\"uint256\"}],\"name\":\"addStateRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"}],\"name\":\"disableStateRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"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\":\"crossChainMessage\",\"type\":\"tuple\"}],\"name\":\"getMessageTimeOfFinality\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPublishFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feesAddress\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"notifyDeposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"name\":\"publishMessage\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"receiveValueFromL2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"retrieveAllFunds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"sendValueToL2\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"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\":\"crossChainMessage\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"finalAfterTimestamp\",\"type\":\"uint256\"}],\"name\":\"storeCrossChainMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"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\":\"crossChainMessage\",\"type\":\"tuple\"}],\"name\":\"verifyMessageFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"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\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"verifyMessageInclusion\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"}],\"internalType\":\"structStructs.ValueTransferMessage\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"verifyValueTransferInclusion\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x608060405234801561001057600080fd5b5061001a33610027565b610022610098565b61014a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100e85760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101475780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b612455806101596000396000f3fe6080604052600436106101115760003560e01c80638da5cb5b116100a5578063b1454caa11610074578063b6aed0cb11610059578063b6aed0cb1461038b578063e138a8d2146103ab578063f2fde38b146103cb57610185565b8063b1454caa1461034b578063b201246f1461036b57610185565b80638da5cb5b146102a65780639730886d146102eb57806399a3ad211461030b578063ab53bddc1461032b57610185565b8063346633fb116100e1578063346633fb1461023e57806336d2da9014610251578063485cc95514610271578063715018a61461029157610185565b8062a1b815146101a65780630fcfbd11146101d15780630fe9188e146101f157806333a88c721461021157610185565b36610185576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb90349061015690339083906004016111ea565b6000604051808303818588803b15801561016f57600080fd5b505af1158015610183573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161019d90611239565b60405180910390fd5b3480156101b257600080fd5b506101bb6103eb565b6040516101c89190611249565b60405180910390f35b3480156101dd57600080fd5b506101bb6101ec366004611272565b610477565b3480156101fd57600080fd5b5061018361020c3660046112c5565b6104d6565b34801561021d57600080fd5b5061023161022c366004611272565b61051c565b6040516101c891906112ec565b61018361024c36600461130e565b61056e565b34801561025d57600080fd5b5061018361026c366004611346565b6106bd565b34801561027d57600080fd5b5061018361028c366004611365565b61073c565b34801561029d57600080fd5b506101836108a7565b3480156102b257600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166040516101c89190611394565b3480156102f757600080fd5b506101836103063660046113a2565b6108bb565b34801561031757600080fd5b5061018361032636600461130e565b610a27565b34801561033757600080fd5b5061018361034636600461130e565b610aa7565b61035e61035936600461146b565b610b70565b6040516101c891906114f8565b34801561037757600080fd5b50610183610386366004611566565b610c7d565b34801561039757600080fd5b506101836103a63660046115d1565b610d7e565b3480156103b757600080fd5b506101836103c63660046115f1565b610dc4565b3480156103d757600080fd5b506101836103e6366004611346565b610f0f565b600354604080517f1a90a21900000000000000000000000000000000000000000000000000000000815290516000926001600160a01b031691631a90a2199160048083019260209291908290030181865afa15801561044e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104729190611679565b905090565b6000808260405160200161048b9190611837565b60408051601f198184030181529181528151602092830120600081815292839052912054909150806104cf5760405162461bcd60e51b815260040161019d90611886565b9392505050565b6104de610f66565b600081815260046020526040812054900361050b5760405162461bcd60e51b815260040161019d906118c8565b600090815260046020526040812055565b600080826040516020016105309190611837565b60408051601f19818403018152918152815160209283012060008181529283905291205490915080158015906105665750428111155b949350505050565b60003411801561057d57508034145b6105995760405162461bcd60e51b815260040161019d90611930565b60035434906001600160a01b03161561065d5760006105b66103eb565b9050803410156105d85760405162461bcd60e51b815260040161019d90611970565b6105e28134611996565b6003546040519193506000916001600160a01b039091169083908381818185875af1925050503d8060008114610634576040519150601f19603f3d011682016040523d82523d6000602084013e610639565b606091505b505090508061065a5760405162461bcd60e51b815260040161019d90611a01565b50505b600061066833610fda565b9050836001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b684846040516106af929190611a11565b60405180910390a350505050565b6106c5610f66565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610712576040519150601f19603f3d011682016040523d82523d6000602084013e610717565b606091505b50509050806107385760405162461bcd60e51b815260040161019d90611a5e565b5050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156107875750825b905060008267ffffffffffffffff1660011480156107a45750303b155b9050811580156107b2575080155b156107e9576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561081d57845468ff00000000000000001916680100000000000000001785555b61082687611038565b6003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038816179055831561089e57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061089590600190611a92565b60405180910390a15b50505050505050565b6108af610f66565b6108b96000611049565b565b60006108c8600130611aa0565b90506108fb7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806109225750336001600160a01b038216145b61093e5760405162461bcd60e51b815260040161019d90611af5565b600061094a8342611b05565b905060008460405160200161095f9190611837565b60408051601f198184030181529181528151602092830120600081815292839052912054909150156109a35760405162461bcd60e51b815260040161019d90611b70565b6000818152602081815260408220849055600191906109c490880188611346565b6001600160a01b0316815260208101919091526040016000908120906109f06080880160608901611b80565b63ffffffff1681526020808201929092526040016000908120805460018101825590825291902086916004020161089e8282611fbe565b610a2f610f66565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610a7c576040519150601f19603f3d011682016040523d82523d6000602084013e610a81565b606091505b5050905080610aa25760405162461bcd60e51b815260040161019d90611a5e565b505050565b6000610ab4600130611aa0565b9050610ae77f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b03161480610b0e5750336001600160a01b038216145b610b2a5760405162461bcd60e51b815260040161019d90611af5565b826001600160a01b03167fcd9850463422a7449c406a036e35e5edb6fbe35a64c9f12a2354be98a750c0d383604051610b639190611249565b60405180910390a2505050565b6003546000906001600160a01b031615610c26576000610b8e6103eb565b905080341015610bb05760405162461bcd60e51b815260040161019d90612020565b6003546040516000916001600160a01b03169083908381818185875af1925050503d8060008114610bfd576040519150601f19603f3d011682016040523d82523d6000602084013e610c02565b606091505b5050905080610c235760405162461bcd60e51b815260040161019d90611a01565b50505b610c2f33610fda565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef77593733828888888888604051610c6c9796959493929190612030565b60405180910390a195945050505050565b6000818152600460205260408120549003610caa5760405162461bcd60e51b815260040161019d906120eb565b600081815260046020526040902054421015610cd85760405162461bcd60e51b815260040161019d90612137565b600084604051602001610ceb91906121bc565b60405160208183030381529060405280519060200120604051602001610d1191906121fc565b604051602081830303815290604052805190602001209050610d5b84848484604051602001610d40919061221b565b604051602081830303815290604052805190602001206110c7565b610d775760405162461bcd60e51b815260040161019d90612285565b5050505050565b610d86610f66565b60008281526004602052604090205415610db25760405162461bcd60e51b815260040161019d906122ed565b60009182526004602052604090912055565b6000818152600460205260408120549003610df15760405162461bcd60e51b815260040161019d906120eb565b600081815260046020526040902054421015610e1f5760405162461bcd60e51b815260040161019d90612137565b6000610e2e6020860186611346565b610e3e60408701602088016122fd565b610e4e6060880160408901611b80565b610e5e6080890160608a01611b80565b610e6b60808a018a611cd7565b610e7b60c08c0160a08d0161231c565b604051602001610e919796959493929190612030565b604051602081830303815290604052805190602001209050600081604051602001610ebc919061236d565b604051602081830303815290604052805190602001209050610eeb85858584604051602001610d40919061221b565b610f075760405162461bcd60e51b815260040161019d906123d5565b505050505050565b610f17610f66565b6001600160a01b038116610f5a5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161019d9190611394565b610f6381611049565b50565b33610f987f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146108b957336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161019d9190611394565b6001600160a01b0381166000908152600260205260408120805467ffffffffffffffff16916001919061100d83856123e5565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b6110406110df565b610f6381611146565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6000826110d586868561114e565b1495945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166108b9576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f176110df565b600081815b848110156111875761117d8287878481811061117157611171612409565b90506020020135611190565b9150600101611153565b50949350505050565b60008183106111ac5760008281526020849052604090206111bb565b60008381526020839052604090205b90505b92915050565b60006001600160a01b0382166111be565b6111de816111c4565b82525050565b806111de565b604081016111f882856111d5565b6104cf60208301846111e4565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b602080825281016111be81611205565b602081016111be82846111e4565b600060c0828403121561126c5761126c600080fd5b50919050565b60006020828403121561128757611287600080fd5b813567ffffffffffffffff8111156112a1576112a1600080fd5b61056684828501611257565b805b8114610f6357600080fd5b80356111be816112ad565b6000602082840312156112da576112da600080fd5b6111bb83836112ba565b8015156111de565b602081016111be82846112e4565b6112af816111c4565b80356111be816112fa565b6000806040838503121561132457611324600080fd5b61132e8484611303565b915061133d84602085016112ba565b90509250929050565b60006020828403121561135b5761135b600080fd5b6111bb8383611303565b6000806040838503121561137b5761137b600080fd5b6113858484611303565b915061133d8460208501611303565b602081016111be82846111d5565b600080604083850312156113b8576113b8600080fd5b823567ffffffffffffffff8111156113d2576113d2600080fd5b6113de85828601611257565b92505061133d84602085016112ba565b63ffffffff81166112af565b80356111be816113ee565b60008083601f84011261141a5761141a600080fd5b50813567ffffffffffffffff81111561143557611435600080fd5b60208301915083600182028301111561145057611450600080fd5b9250929050565b60ff81166112af565b80356111be81611457565b60008060008060006080868803121561148657611486600080fd5b61149087876113fa565b945061149f87602088016113fa565b9350604086013567ffffffffffffffff8111156114be576114be600080fd5b6114ca88828901611405565b93509350506114dc8760608801611460565b90509295509295909350565b67ffffffffffffffff81166111de565b602081016111be82846114e8565b60006080828403121561126c5761126c600080fd5b60008083601f84011261153057611530600080fd5b50813567ffffffffffffffff81111561154b5761154b600080fd5b60208301915083602082028301111561145057611450600080fd5b60008060008060c0858703121561157f5761157f600080fd5b6115898686611506565b9350608085013567ffffffffffffffff8111156115a8576115a8600080fd5b6115b48782880161151b565b93509350506115c68660a087016112ba565b905092959194509250565b600080604083850312156115e7576115e7600080fd5b61132e84846112ba565b6000806000806060858703121561160a5761160a600080fd5b843567ffffffffffffffff81111561162457611624600080fd5b61163087828801611257565b945050602085013567ffffffffffffffff81111561165057611650600080fd5b61165c8782880161151b565b93509350506115c686604087016112ba565b80516111be816112ad565b60006020828403121561168e5761168e600080fd5b6111bb838361166e565b5060006111be6020830183611303565b67ffffffffffffffff81166112af565b80356111be816116a8565b5060006111be60208301836116b8565b5060006111be60208301836113fa565b63ffffffff81166111de565b6000808335601e193685900301811261170a5761170a600080fd5b830160208101925035905067ffffffffffffffff81111561172d5761172d600080fd5b3681900382131561145057611450600080fd5b82818337506000910152565b818352602083019250611760828483611740565b50601f01601f19160190565b5060006111be6020830183611460565b60ff81166111de565b600060c083016117958380611698565b61179f85826111d5565b506117ad60208401846116c3565b6117ba60208601826114e8565b506117c860408401846116d3565b6117d560408601826116e3565b506117e360608401846116d3565b6117f060608601826116e3565b506117fe60808401846116ef565b858303608087015261181183828461174c565b9250505061182260a084018461176c565b61182f60a086018261177c565b509392505050565b602080825281016111bb8184611785565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d69747465648152601760f91b602082015290505b60400190565b602080825281016111be81611848565b601a8152602081017f537461746520726f6f7420646f6573206e6f742065786973742e00000000000081529050611233565b602080825281016111be81611896565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e672045746865720000000000000000000000000000000060208201529050611880565b602080825281016111be816118d8565b60208082527f496e73756666696369656e742066756e647320746f2073656e642076616c75659101908152611233565b602080825281016111be81611940565b634e487b7160e01b600052601160045260246000fd5b818103818111156111be576111be611980565b60248152602081017f4661696c656420746f2073656e64206665657320746f206665657320636f6e7481527f726163740000000000000000000000000000000000000000000000000000000060208201529050611880565b602080825281016111be816119a9565b60408101611a1f82856111e4565b6104cf60208301846114e8565b60148152602081017f6661696c65642073656e64696e672076616c756500000000000000000000000081529050611233565b602080825281016111be81611a2c565b60006111be82611a7c565b90565b67ffffffffffffffff1690565b6111de81611a6e565b602081016111be8284611a89565b6001600160a01b039182169190811690828203908111156111be576111be611980565b60118152602081017f4e6f74206f776e6572206f722073656c6600000000000000000000000000000081529050611233565b602080825281016111be81611ac3565b808201808211156111be576111be611980565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f210000000000000000000000000000000000000000000000000000000000000060208201529050611880565b602080825281016111be81611b18565b600060208284031215611b9557611b95600080fd5b6111bb83836113fa565b600081356111be816112fa565b60006001600160a01b03835b81169019929092169190911792915050565b60006111be826111c4565b60006111be82611bca565b611be982611bd5565b611bf4818354611bac565b8255505050565b600081356111be816116a8565b60007bffffffffffffffff0000000000000000000000000000000000000000611bb88460a01b90565b60006111be67ffffffffffffffff8316611a7c565b611c4f82611c31565b611bf4818354611c08565b600081356111be816113ee565b60007fffffffff00000000000000000000000000000000000000000000000000000000611bb88460e01b90565b600063ffffffff82166111be565b611cab82611c94565b611bf4818354611c67565b600063ffffffff83611bb8565b611ccc82611c94565b611bf4818354611cb6565b6000808335601e1936859003018112611cf257611cf2600080fd5b8301915050803567ffffffffffffffff811115611d1157611d11600080fd5b60208201915060018102360382131561145057611450600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b600281046001821680611d6c57607f821691505b60208210810361126c5761126c611d42565b60006111be611a798381565b611d9383611d7e565b815460001960089490940293841b1916921b91909117905550565b6000610aa2818484611d8a565b8181101561073857611dce600082611dae565b600101611dbb565b601f821115610aa2576000818152602090206020601f85010481016020851015611dfd5750805b610d776020601f860104830182611dbb565b8267ffffffffffffffff811115611e2857611e28611d2c565b611e328254611d58565b611e3d828285611dd6565b506000601f821160018114611e725760008315611e5a5750848201355b600019600885021c1981166002850217855550610f07565b600084815260209020601f19841690835b82811015611ea35787850135825560209485019460019092019101611e83565b5084821015611ec0576000196008601f8716021c19878501351681555b5050505060020260010190555050565b610aa2838383611e0f565b600081356111be81611457565b600060ff82166111be565b611efc82611ee8565b815460ff191660ff821617611bf4565b808280611f1881611b9f565b9050611f248184611be0565b50506020830180611f3482611bfb565b9050611f408184611c46565b50506040830180611f5082611c5a565b9050611f5c8184611ca2565b5050506060820180611f6d82611c5a565b9050611f7c8160018501611cc3565b5050611f8b6080830183611cd7565b611f99818360028601611ed0565b505060a0820180611fa982611edb565b9050611fb88160038501611ef3565b50505050565b6107388282611f0c565b60258152602081017f496e73756666696369656e742066756e647320746f207075626c697368206d6581527f737361676500000000000000000000000000000000000000000000000000000060208201529050611880565b602080825281016111be81611fc8565b60c0810161203e828a6111d5565b61204b60208301896114e8565b61205860408301886116e3565b61206560608301876116e3565b818103608083015261207881858761174c565b905061208760a083018461177c565b98975050505050505050565b602a8152602081017f526f6f74206973206e6f74207075626c6973686564206f6e2074686973206d6581527f7373616765206275732e0000000000000000000000000000000000000000000060208201529050611880565b602080825281016111be81612093565b60218152602081017f526f6f74206973206e6f7420636f6e736964657265642066696e616c207965748152601760f91b60208201529050611880565b602080825281016111be816120fb565b5060006111be60208301836112ba565b6121618180611698565b61216b83826111d5565b506121796020820182611698565b61218660208401826111d5565b506121946040820182612147565b6121a160408401826111e4565b506121af60608201826116c3565b610aa260608401826114e8565b608081016111be8284612157565b60018152602081017f760000000000000000000000000000000000000000000000000000000000000081529050611233565b6040808252810161220c816121ca565b90506111be60208301846111e4565b61222581836111e4565b602001919050565b60338152602081017f496e76616c696420696e636c7573696f6e2070726f6f6620666f722076616c7581527f65207472616e73666572206d6573736167652e0000000000000000000000000060208201529050611880565b602080825281016111be8161222d565b60258152602081017f526f6f7420616c726561647920616464656420746f20746865206d657373616781527f652062757300000000000000000000000000000000000000000000000000000060208201529050611880565b602080825281016111be81612295565b60006020828403121561231257612312600080fd5b6111bb83836116b8565b60006020828403121561233157612331600080fd5b6111bb8383611460565b60018152602081017f6d0000000000000000000000000000000000000000000000000000000000000081529050611233565b6040808252810161220c8161233b565b60308152602081017f496e76616c696420696e636c7573696f6e2070726f6f6620666f722063726f7381527f7320636861696e206d6573736167652e0000000000000000000000000000000060208201529050611880565b602080825281016111be8161237d565b67ffffffffffffffff9182169190811690828201908111156111be576111be611980565b634e487b7160e01b600052603260045260246000fdfea26469706673582212209046d260e6ecf02a9b545045265133ebd2a8a091d8cfe42d8fe9829451348f2664736f6c634300081c0033", + Bin: "0x608060405234801561001057600080fd5b5061001a33610027565b610022610098565b61014a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100e85760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101475780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b612475806101596000396000f3fe6080604052600436106101115760003560e01c80638da5cb5b116100a5578063b1454caa11610074578063b6aed0cb11610059578063b6aed0cb1461038b578063e138a8d2146103ab578063f2fde38b146103cb57610185565b8063b1454caa1461034b578063b201246f1461036b57610185565b80638da5cb5b146102a65780639730886d146102eb57806399a3ad211461030b578063ab53bddc1461032b57610185565b8063346633fb116100e1578063346633fb1461023e57806336d2da9014610251578063485cc95514610271578063715018a61461029157610185565b8062a1b815146101a65780630fcfbd11146101d15780630fe9188e146101f157806333a88c721461021157610185565b36610185576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb903490610156903390839060040161120a565b6000604051808303818588803b15801561016f57600080fd5b505af1158015610183573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161019d90611259565b60405180910390fd5b3480156101b257600080fd5b506101bb6103eb565b6040516101c89190611269565b60405180910390f35b3480156101dd57600080fd5b506101bb6101ec366004611292565b610477565b3480156101fd57600080fd5b5061018361020c3660046112e5565b6104d6565b34801561021d57600080fd5b5061023161022c366004611292565b61051c565b6040516101c8919061130c565b61018361024c36600461132e565b61056e565b34801561025d57600080fd5b5061018361026c366004611366565b6106bd565b34801561027d57600080fd5b5061018361028c366004611385565b61073c565b34801561029d57600080fd5b506101836108a7565b3480156102b257600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166040516101c891906113b4565b3480156102f757600080fd5b506101836103063660046113c2565b6108bb565b34801561031757600080fd5b5061018361032636600461132e565b610a27565b34801561033757600080fd5b5061018361034636600461132e565b610ac7565b61035e61035936600461148b565b610b90565b6040516101c89190611518565b34801561037757600080fd5b50610183610386366004611586565b610c9d565b34801561039757600080fd5b506101836103a63660046115f1565b610d9e565b3480156103b757600080fd5b506101836103c6366004611611565b610de4565b3480156103d757600080fd5b506101836103e6366004611366565b610f2f565b600354604080517f1a90a21900000000000000000000000000000000000000000000000000000000815290516000926001600160a01b031691631a90a2199160048083019260209291908290030181865afa15801561044e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104729190611699565b905090565b6000808260405160200161048b9190611857565b60408051601f198184030181529181528151602092830120600081815292839052912054909150806104cf5760405162461bcd60e51b815260040161019d906118a6565b9392505050565b6104de610f86565b600081815260046020526040812054900361050b5760405162461bcd60e51b815260040161019d906118e8565b600090815260046020526040812055565b600080826040516020016105309190611857565b60408051601f19818403018152918152815160209283012060008181529283905291205490915080158015906105665750428111155b949350505050565b60003411801561057d57508034145b6105995760405162461bcd60e51b815260040161019d90611950565b60035434906001600160a01b03161561065d5760006105b66103eb565b9050803410156105d85760405162461bcd60e51b815260040161019d90611990565b6105e281346119b6565b6003546040519193506000916001600160a01b039091169083908381818185875af1925050503d8060008114610634576040519150601f19603f3d011682016040523d82523d6000602084013e610639565b606091505b505090508061065a5760405162461bcd60e51b815260040161019d90611a21565b50505b600061066833610ffa565b9050836001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b684846040516106af929190611a31565b60405180910390a350505050565b6106c5610f86565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610712576040519150601f19603f3d011682016040523d82523d6000602084013e610717565b606091505b50509050806107385760405162461bcd60e51b815260040161019d90611a7e565b5050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156107875750825b905060008267ffffffffffffffff1660011480156107a45750303b155b9050811580156107b2575080155b156107e9576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561081d57845468ff00000000000000001916680100000000000000001785555b61082687611058565b6003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038816179055831561089e57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061089590600190611ab2565b60405180910390a15b50505050505050565b6108af610f86565b6108b96000611069565b565b60006108c8600130611ac0565b90506108fb7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806109225750336001600160a01b038216145b61093e5760405162461bcd60e51b815260040161019d90611b15565b600061094a8342611b25565b905060008460405160200161095f9190611857565b60408051601f198184030181529181528151602092830120600081815292839052912054909150156109a35760405162461bcd60e51b815260040161019d90611b90565b6000818152602081815260408220849055600191906109c490880188611366565b6001600160a01b0316815260208101919091526040016000908120906109f06080880160608901611ba0565b63ffffffff1681526020808201929092526040016000908120805460018101825590825291902086916004020161089e8282611fde565b610a2f610f86565b80471015610a4f5760405162461bcd60e51b815260040161019d90611990565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610a9c576040519150601f19603f3d011682016040523d82523d6000602084013e610aa1565b606091505b5050905080610ac25760405162461bcd60e51b815260040161019d90611a7e565b505050565b6000610ad4600130611ac0565b9050610b077f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b03161480610b2e5750336001600160a01b038216145b610b4a5760405162461bcd60e51b815260040161019d90611b15565b826001600160a01b03167fcd9850463422a7449c406a036e35e5edb6fbe35a64c9f12a2354be98a750c0d383604051610b839190611269565b60405180910390a2505050565b6003546000906001600160a01b031615610c46576000610bae6103eb565b905080341015610bd05760405162461bcd60e51b815260040161019d90612040565b6003546040516000916001600160a01b03169083908381818185875af1925050503d8060008114610c1d576040519150601f19603f3d011682016040523d82523d6000602084013e610c22565b606091505b5050905080610c435760405162461bcd60e51b815260040161019d90611a21565b50505b610c4f33610ffa565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef77593733828888888888604051610c8c9796959493929190612050565b60405180910390a195945050505050565b6000818152600460205260408120549003610cca5760405162461bcd60e51b815260040161019d9061210b565b600081815260046020526040902054421015610cf85760405162461bcd60e51b815260040161019d90612157565b600084604051602001610d0b91906121dc565b60405160208183030381529060405280519060200120604051602001610d31919061221c565b604051602081830303815290604052805190602001209050610d7b84848484604051602001610d60919061223b565b604051602081830303815290604052805190602001206110e7565b610d975760405162461bcd60e51b815260040161019d906122a5565b5050505050565b610da6610f86565b60008281526004602052604090205415610dd25760405162461bcd60e51b815260040161019d9061230d565b60009182526004602052604090912055565b6000818152600460205260408120549003610e115760405162461bcd60e51b815260040161019d9061210b565b600081815260046020526040902054421015610e3f5760405162461bcd60e51b815260040161019d90612157565b6000610e4e6020860186611366565b610e5e604087016020880161231d565b610e6e6060880160408901611ba0565b610e7e6080890160608a01611ba0565b610e8b60808a018a611cf7565b610e9b60c08c0160a08d0161233c565b604051602001610eb19796959493929190612050565b604051602081830303815290604052805190602001209050600081604051602001610edc919061238d565b604051602081830303815290604052805190602001209050610f0b85858584604051602001610d60919061223b565b610f275760405162461bcd60e51b815260040161019d906123f5565b505050505050565b610f37610f86565b6001600160a01b038116610f7a5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161019d91906113b4565b610f8381611069565b50565b33610fb87f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146108b957336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161019d91906113b4565b6001600160a01b0381166000908152600260205260408120805467ffffffffffffffff16916001919061102d8385612405565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b6110606110ff565b610f8381611166565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6000826110f586868561116e565b1495945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166108b9576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f376110ff565b600081815b848110156111a75761119d8287878481811061119157611191612429565b905060200201356111b0565b9150600101611173565b50949350505050565b60008183106111cc5760008281526020849052604090206111db565b60008381526020839052604090205b90505b92915050565b60006001600160a01b0382166111de565b6111fe816111e4565b82525050565b806111fe565b6040810161121882856111f5565b6104cf6020830184611204565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b602080825281016111de81611225565b602081016111de8284611204565b600060c0828403121561128c5761128c600080fd5b50919050565b6000602082840312156112a7576112a7600080fd5b813567ffffffffffffffff8111156112c1576112c1600080fd5b61056684828501611277565b805b8114610f8357600080fd5b80356111de816112cd565b6000602082840312156112fa576112fa600080fd5b6111db83836112da565b8015156111fe565b602081016111de8284611304565b6112cf816111e4565b80356111de8161131a565b6000806040838503121561134457611344600080fd5b61134e8484611323565b915061135d84602085016112da565b90509250929050565b60006020828403121561137b5761137b600080fd5b6111db8383611323565b6000806040838503121561139b5761139b600080fd5b6113a58484611323565b915061135d8460208501611323565b602081016111de82846111f5565b600080604083850312156113d8576113d8600080fd5b823567ffffffffffffffff8111156113f2576113f2600080fd5b6113fe85828601611277565b92505061135d84602085016112da565b63ffffffff81166112cf565b80356111de8161140e565b60008083601f84011261143a5761143a600080fd5b50813567ffffffffffffffff81111561145557611455600080fd5b60208301915083600182028301111561147057611470600080fd5b9250929050565b60ff81166112cf565b80356111de81611477565b6000806000806000608086880312156114a6576114a6600080fd5b6114b0878761141a565b94506114bf876020880161141a565b9350604086013567ffffffffffffffff8111156114de576114de600080fd5b6114ea88828901611425565b93509350506114fc8760608801611480565b90509295509295909350565b67ffffffffffffffff81166111fe565b602081016111de8284611508565b60006080828403121561128c5761128c600080fd5b60008083601f84011261155057611550600080fd5b50813567ffffffffffffffff81111561156b5761156b600080fd5b60208301915083602082028301111561147057611470600080fd5b60008060008060c0858703121561159f5761159f600080fd5b6115a98686611526565b9350608085013567ffffffffffffffff8111156115c8576115c8600080fd5b6115d48782880161153b565b93509350506115e68660a087016112da565b905092959194509250565b6000806040838503121561160757611607600080fd5b61134e84846112da565b6000806000806060858703121561162a5761162a600080fd5b843567ffffffffffffffff81111561164457611644600080fd5b61165087828801611277565b945050602085013567ffffffffffffffff81111561167057611670600080fd5b61167c8782880161153b565b93509350506115e686604087016112da565b80516111de816112cd565b6000602082840312156116ae576116ae600080fd5b6111db838361168e565b5060006111de6020830183611323565b67ffffffffffffffff81166112cf565b80356111de816116c8565b5060006111de60208301836116d8565b5060006111de602083018361141a565b63ffffffff81166111fe565b6000808335601e193685900301811261172a5761172a600080fd5b830160208101925035905067ffffffffffffffff81111561174d5761174d600080fd5b3681900382131561147057611470600080fd5b82818337506000910152565b818352602083019250611780828483611760565b50601f01601f19160190565b5060006111de6020830183611480565b60ff81166111fe565b600060c083016117b583806116b8565b6117bf85826111f5565b506117cd60208401846116e3565b6117da6020860182611508565b506117e860408401846116f3565b6117f56040860182611703565b5061180360608401846116f3565b6118106060860182611703565b5061181e608084018461170f565b858303608087015261183183828461176c565b9250505061184260a084018461178c565b61184f60a086018261179c565b509392505050565b602080825281016111db81846117a5565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d69747465648152601760f91b602082015290505b60400190565b602080825281016111de81611868565b601a8152602081017f537461746520726f6f7420646f6573206e6f742065786973742e00000000000081529050611253565b602080825281016111de816118b6565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e6720457468657200000000000000000000000000000000602082015290506118a0565b602080825281016111de816118f8565b60208082527f496e73756666696369656e742066756e647320746f2073656e642076616c75659101908152611253565b602080825281016111de81611960565b634e487b7160e01b600052601160045260246000fd5b818103818111156111de576111de6119a0565b60248152602081017f4661696c656420746f2073656e64206665657320746f206665657320636f6e7481527f7261637400000000000000000000000000000000000000000000000000000000602082015290506118a0565b602080825281016111de816119c9565b60408101611a3f8285611204565b6104cf6020830184611508565b60148152602081017f6661696c65642073656e64696e672076616c756500000000000000000000000081529050611253565b602080825281016111de81611a4c565b60006111de82611a9c565b90565b67ffffffffffffffff1690565b6111fe81611a8e565b602081016111de8284611aa9565b6001600160a01b039182169190811690828203908111156111de576111de6119a0565b60118152602081017f4e6f74206f776e6572206f722073656c6600000000000000000000000000000081529050611253565b602080825281016111de81611ae3565b808201808211156111de576111de6119a0565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f2100000000000000000000000000000000000000000000000000000000000000602082015290506118a0565b602080825281016111de81611b38565b600060208284031215611bb557611bb5600080fd5b6111db838361141a565b600081356111de8161131a565b60006001600160a01b03835b81169019929092169190911792915050565b60006111de826111e4565b60006111de82611bea565b611c0982611bf5565b611c14818354611bcc565b8255505050565b600081356111de816116c8565b60007bffffffffffffffff0000000000000000000000000000000000000000611bd88460a01b90565b60006111de67ffffffffffffffff8316611a9c565b611c6f82611c51565b611c14818354611c28565b600081356111de8161140e565b60007fffffffff00000000000000000000000000000000000000000000000000000000611bd88460e01b90565b600063ffffffff82166111de565b611ccb82611cb4565b611c14818354611c87565b600063ffffffff83611bd8565b611cec82611cb4565b611c14818354611cd6565b6000808335601e1936859003018112611d1257611d12600080fd5b8301915050803567ffffffffffffffff811115611d3157611d31600080fd5b60208201915060018102360382131561147057611470600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b600281046001821680611d8c57607f821691505b60208210810361128c5761128c611d62565b60006111de611a998381565b611db383611d9e565b815460001960089490940293841b1916921b91909117905550565b6000610ac2818484611daa565b8181101561073857611dee600082611dce565b600101611ddb565b601f821115610ac2576000818152602090206020601f85010481016020851015611e1d5750805b610d976020601f860104830182611ddb565b8267ffffffffffffffff811115611e4857611e48611d4c565b611e528254611d78565b611e5d828285611df6565b506000601f821160018114611e925760008315611e7a5750848201355b600019600885021c1981166002850217855550610f27565b600084815260209020601f19841690835b82811015611ec35787850135825560209485019460019092019101611ea3565b5084821015611ee0576000196008601f8716021c19878501351681555b5050505060020260010190555050565b610ac2838383611e2f565b600081356111de81611477565b600060ff82166111de565b611f1c82611f08565b815460ff191660ff821617611c14565b808280611f3881611bbf565b9050611f448184611c00565b50506020830180611f5482611c1b565b9050611f608184611c66565b50506040830180611f7082611c7a565b9050611f7c8184611cc2565b5050506060820180611f8d82611c7a565b9050611f9c8160018501611ce3565b5050611fab6080830183611cf7565b611fb9818360028601611ef0565b505060a0820180611fc982611efb565b9050611fd88160038501611f13565b50505050565b6107388282611f2c565b60258152602081017f496e73756666696369656e742066756e647320746f207075626c697368206d6581527f7373616765000000000000000000000000000000000000000000000000000000602082015290506118a0565b602080825281016111de81611fe8565b60c0810161205e828a6111f5565b61206b6020830189611508565b6120786040830188611703565b6120856060830187611703565b818103608083015261209881858761176c565b90506120a760a083018461179c565b98975050505050505050565b602a8152602081017f526f6f74206973206e6f74207075626c6973686564206f6e2074686973206d6581527f7373616765206275732e00000000000000000000000000000000000000000000602082015290506118a0565b602080825281016111de816120b3565b60218152602081017f526f6f74206973206e6f7420636f6e736964657265642066696e616c207965748152601760f91b602082015290506118a0565b602080825281016111de8161211b565b5060006111de60208301836112da565b61218181806116b8565b61218b83826111f5565b5061219960208201826116b8565b6121a660208401826111f5565b506121b46040820182612167565b6121c16040840182611204565b506121cf60608201826116e3565b610ac26060840182611508565b608081016111de8284612177565b60018152602081017f760000000000000000000000000000000000000000000000000000000000000081529050611253565b6040808252810161222c816121ea565b90506111de6020830184611204565b6122458183611204565b602001919050565b60338152602081017f496e76616c696420696e636c7573696f6e2070726f6f6620666f722076616c7581527f65207472616e73666572206d6573736167652e00000000000000000000000000602082015290506118a0565b602080825281016111de8161224d565b60258152602081017f526f6f7420616c726561647920616464656420746f20746865206d657373616781527f6520627573000000000000000000000000000000000000000000000000000000602082015290506118a0565b602080825281016111de816122b5565b60006020828403121561233257612332600080fd5b6111db83836116d8565b60006020828403121561235157612351600080fd5b6111db8383611480565b60018152602081017f6d0000000000000000000000000000000000000000000000000000000000000081529050611253565b6040808252810161222c8161235b565b60308152602081017f496e76616c696420696e636c7573696f6e2070726f6f6620666f722063726f7381527f7320636861696e206d6573736167652e00000000000000000000000000000000602082015290506118a0565b602080825281016111de8161239d565b67ffffffffffffffff9182169190811690828201908111156111de576111de6119a0565b634e487b7160e01b600052603260045260246000fdfea2646970667358221220f582c47618345ca2599c3d254b6ce9e0ea5159411fd58e3d9a86019ef0bc297d64736f6c634300081c0033", } // MerkleTreeMessageBusABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/MessageBus/MessageBus.go b/contracts/generated/MessageBus/MessageBus.go index d4d9d55264..9a1ea95923 100644 --- a/contracts/generated/MessageBus/MessageBus.go +++ b/contracts/generated/MessageBus/MessageBus.go @@ -42,7 +42,7 @@ type StructsCrossChainMessage struct { // MessageBusMetaData contains all meta data concerning the MessageBus contract. var MessageBusMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"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\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"name\":\"LogMessagePublished\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"NativeDeposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"}],\"name\":\"ValueTransfer\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[{\"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\":\"crossChainMessage\",\"type\":\"tuple\"}],\"name\":\"getMessageTimeOfFinality\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPublishFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feesAddress\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"notifyDeposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"name\":\"publishMessage\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"receiveValueFromL2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"retrieveAllFunds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"sendValueToL2\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"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\":\"crossChainMessage\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"finalAfterTimestamp\",\"type\":\"uint256\"}],\"name\":\"storeCrossChainMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"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\":\"crossChainMessage\",\"type\":\"tuple\"}],\"name\":\"verifyMessageFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x608060405234801561001057600080fd5b5061001a33610027565b610022610098565b61014a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100e85760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101475780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b611b40806101596000396000f3fe6080604052600436106100d55760003560e01c8063715018a61161007f57806399a3ad211161005957806399a3ad21146102af578063ab53bddc146102cf578063b1454caa146102ef578063f2fde38b1461030f57610149565b8063715018a6146102355780638da5cb5b1461024a5780639730886d1461028f57610149565b8063346633fb116100b0578063346633fb146101e257806336d2da90146101f5578063485cc9551461021557610149565b8062a1b8151461016a5780630fcfbd111461019557806333a88c72146101b557610149565b36610149576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb90349061011a9033908390600401610dca565b6000604051808303818588803b15801561013357600080fd5b505af1158015610147573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161016190610e19565b60405180910390fd5b34801561017657600080fd5b5061017f61032f565b60405161018c9190610e29565b60405180910390f35b3480156101a157600080fd5b5061017f6101b0366004610e52565b6103bb565b3480156101c157600080fd5b506101d56101d0366004610e52565b61041a565b60405161018c9190610e95565b6101476101f0366004610ed3565b61046c565b34801561020157600080fd5b50610147610210366004610f0b565b6105bb565b34801561022157600080fd5b50610147610230366004610f2a565b61063a565b34801561024157600080fd5b506101476107a5565b34801561025657600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031660405161018c9190610f59565b34801561029b57600080fd5b506101476102aa366004610f67565b6107b9565b3480156102bb57600080fd5b506101476102ca366004610ed3565b610925565b3480156102db57600080fd5b506101476102ea366004610ed3565b6109a5565b6103026102fd366004611030565b610a6e565b60405161018c91906110bd565b34801561031b57600080fd5b5061014761032a366004610f0b565b610b7b565b600354604080517f1a90a21900000000000000000000000000000000000000000000000000000000815290516000926001600160a01b031691631a90a2199160048083019260209291908290030181865afa158015610392573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103b691906110d6565b905090565b600080826040516020016103cf9190611294565b60408051601f198184030181529181528151602092830120600081815292839052912054909150806104135760405162461bcd60e51b8152600401610161906112ff565b9392505050565b6000808260405160200161042e9190611294565b60408051601f19818403018152918152815160209283012060008181529283905291205490915080158015906104645750428111155b949350505050565b60003411801561047b57508034145b6104975760405162461bcd60e51b815260040161016190611367565b60035434906001600160a01b03161561055b5760006104b461032f565b9050803410156104d65760405162461bcd60e51b8152600401610161906113a7565b6104e081346113cd565b6003546040519193506000916001600160a01b039091169083908381818185875af1925050503d8060008114610532576040519150601f19603f3d011682016040523d82523d6000602084013e610537565b606091505b50509050806105585760405162461bcd60e51b815260040161016190611438565b50505b600061056633610bd2565b9050836001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b684846040516105ad929190611448565b60405180910390a350505050565b6105c3610c30565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610610576040519150601f19603f3d011682016040523d82523d6000602084013e610615565b606091505b50509050806106365760405162461bcd60e51b815260040161016190611495565b5050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156106855750825b905060008267ffffffffffffffff1660011480156106a25750303b155b9050811580156106b0575080155b156106e7576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561071b57845468ff00000000000000001916680100000000000000001785555b61072487610ca4565b6003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038816179055831561079c57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290610793906001906114c9565b60405180910390a15b50505050505050565b6107ad610c30565b6107b76000610cb5565b565b60006107c66001306114d7565b90506107f97f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806108205750336001600160a01b038216145b61083c5760405162461bcd60e51b81526004016101619061152c565b6000610848834261153c565b905060008460405160200161085d9190611294565b60408051601f198184030181529181528151602092830120600081815292839052912054909150156108a15760405162461bcd60e51b8152600401610161906115a7565b6000818152602081815260408220849055600191906108c290880188610f0b565b6001600160a01b0316815260208101919091526040016000908120906108ee60808801606089016115b7565b63ffffffff1681526020808201929092526040016000908120805460018101825590825291902086916004020161079c8282611a11565b61092d610c30565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461097a576040519150601f19603f3d011682016040523d82523d6000602084013e61097f565b606091505b50509050806109a05760405162461bcd60e51b815260040161016190611495565b505050565b60006109b26001306114d7565b90506109e57f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b03161480610a0c5750336001600160a01b038216145b610a285760405162461bcd60e51b81526004016101619061152c565b826001600160a01b03167fcd9850463422a7449c406a036e35e5edb6fbe35a64c9f12a2354be98a750c0d383604051610a619190610e29565b60405180910390a2505050565b6003546000906001600160a01b031615610b24576000610a8c61032f565b905080341015610aae5760405162461bcd60e51b815260040161016190611a73565b6003546040516000916001600160a01b03169083908381818185875af1925050503d8060008114610afb576040519150601f19603f3d011682016040523d82523d6000602084013e610b00565b606091505b5050905080610b215760405162461bcd60e51b815260040161016190611438565b50505b610b2d33610bd2565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef77593733828888888888604051610b6a9796959493929190611a83565b60405180910390a195945050505050565b610b83610c30565b6001600160a01b038116610bc65760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016101619190610f59565b610bcf81610cb5565b50565b6001600160a01b0381166000908152600260205260408120805467ffffffffffffffff169160019190610c058385611ae6565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b33610c627f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146107b757336040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016101619190610f59565b610cac610d33565b610bcf81610d9a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166107b7576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b83610d33565b60006001600160a01b0382165b92915050565b610dbe81610da2565b82525050565b80610dbe565b60408101610dd88285610db5565b6104136020830184610dc4565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b60208082528101610daf81610de5565b60208101610daf8284610dc4565b600060c08284031215610e4c57610e4c600080fd5b50919050565b600060208284031215610e6757610e67600080fd5b813567ffffffffffffffff811115610e8157610e81600080fd5b61046484828501610e37565b801515610dbe565b60208101610daf8284610e8d565b610eac81610da2565b8114610bcf57600080fd5b8035610daf81610ea3565b80610eac565b8035610daf81610ec2565b60008060408385031215610ee957610ee9600080fd5b610ef38484610eb7565b9150610f028460208501610ec8565b90509250929050565b600060208284031215610f2057610f20600080fd5b6104138383610eb7565b60008060408385031215610f4057610f40600080fd5b610f4a8484610eb7565b9150610f028460208501610eb7565b60208101610daf8284610db5565b60008060408385031215610f7d57610f7d600080fd5b823567ffffffffffffffff811115610f9757610f97600080fd5b610fa385828601610e37565b925050610f028460208501610ec8565b63ffffffff8116610eac565b8035610daf81610fb3565b60008083601f840112610fdf57610fdf600080fd5b50813567ffffffffffffffff811115610ffa57610ffa600080fd5b60208301915083600182028301111561101557611015600080fd5b9250929050565b60ff8116610eac565b8035610daf8161101c565b60008060008060006080868803121561104b5761104b600080fd5b6110558787610fbf565b94506110648760208801610fbf565b9350604086013567ffffffffffffffff81111561108357611083600080fd5b61108f88828901610fca565b93509350506110a18760608801611025565b90509295509295909350565b67ffffffffffffffff8116610dbe565b60208101610daf82846110ad565b8051610daf81610ec2565b6000602082840312156110eb576110eb600080fd5b61041383836110cb565b506000610daf6020830183610eb7565b67ffffffffffffffff8116610eac565b8035610daf81611105565b506000610daf6020830183611115565b506000610daf6020830183610fbf565b63ffffffff8116610dbe565b6000808335601e193685900301811261116757611167600080fd5b830160208101925035905067ffffffffffffffff81111561118a5761118a600080fd5b3681900382131561101557611015600080fd5b82818337506000910152565b8183526020830192506111bd82848361119d565b50601f01601f19160190565b506000610daf6020830183611025565b60ff8116610dbe565b600060c083016111f283806110f5565b6111fc8582610db5565b5061120a6020840184611120565b61121760208601826110ad565b506112256040840184611130565b6112326040860182611140565b506112406060840184611130565b61124d6060860182611140565b5061125b608084018461114c565b858303608087015261126e8382846111a9565b9250505061127f60a08401846111c9565b61128c60a08601826111d9565b509392505050565b6020808252810161041381846111e2565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d697474656481527f2e00000000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b60208082528101610daf816112a5565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e6720457468657200000000000000000000000000000000602082015290506112f9565b60208082528101610daf8161130f565b60208082527f496e73756666696369656e742066756e647320746f2073656e642076616c75659101908152610e13565b60208082528101610daf81611377565b634e487b7160e01b600052601160045260246000fd5b81810381811115610daf57610daf6113b7565b60248152602081017f4661696c656420746f2073656e64206665657320746f206665657320636f6e7481527f7261637400000000000000000000000000000000000000000000000000000000602082015290506112f9565b60208082528101610daf816113e0565b604081016114568285610dc4565b61041360208301846110ad565b60148152602081017f6661696c65642073656e64696e672076616c756500000000000000000000000081529050610e13565b60208082528101610daf81611463565b6000610daf826114b3565b90565b67ffffffffffffffff1690565b610dbe816114a5565b60208101610daf82846114c0565b6001600160a01b03918216919081169082820390811115610daf57610daf6113b7565b60118152602081017f4e6f74206f776e6572206f722073656c6600000000000000000000000000000081529050610e13565b60208082528101610daf816114fa565b80820180821115610daf57610daf6113b7565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f2100000000000000000000000000000000000000000000000000000000000000602082015290506112f9565b60208082528101610daf8161154f565b6000602082840312156115cc576115cc600080fd5b6104138383610fbf565b60008135610daf81610ea3565b60006001600160a01b03835b81169019929092169190911792915050565b60006001600160a01b038216610daf565b6000610daf82611601565b6000610daf82611612565b6116318261161d565b61163c8183546115e3565b8255505050565b60008135610daf81611105565b60007bffffffffffffffff00000000000000000000000000000000000000006115ef8460a01b90565b6000610daf67ffffffffffffffff83166114b3565b61169782611679565b61163c818354611650565b60008135610daf81610fb3565b60007fffffffff000000000000000000000000000000000000000000000000000000006115ef8460e01b90565b600063ffffffff8216610daf565b6116f3826116dc565b61163c8183546116af565b600063ffffffff836115ef565b611714826116dc565b61163c8183546116fe565b6000808335601e193685900301811261173a5761173a600080fd5b8301915050803567ffffffffffffffff81111561175957611759600080fd5b60208201915060018102360382131561101557611015600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b6002810460018216806117b457607f821691505b602082108103610e4c57610e4c61178a565b6000610daf6114b08381565b6117db836117c6565b815460001960089490940293841b1916921b91909117905550565b60006109a08184846117d2565b81811015610636576118166000826117f6565b600101611803565b601f8211156109a0576000818152602090206020601f850104810160208510156118455750805b6118576020601f860104830182611803565b5050505050565b8267ffffffffffffffff81111561187757611877611774565b61188182546117a0565b61188c82828561181e565b506000601f8211600181146118c157600083156118a95750848201355b600019600885021c198116600285021785555061191b565b600084815260209020601f19841690835b828110156118f257878501358255602094850194600190920191016118d2565b508482101561190f576000196008601f8716021c19878501351681555b50506001600284020184555b505050505050565b6109a083838361185e565b60008135610daf8161101c565b600060ff8216610daf565b61194f8261193b565b815460ff191660ff82161761163c565b80828061196b816115d6565b90506119778184611628565b5050602083018061198782611643565b9050611993818461168e565b505060408301806119a3826116a2565b90506119af81846116ea565b50505060608201806119c0826116a2565b90506119cf816001850161170b565b50506119de608083018361171f565b6119ec818360028601611923565b505060a08201806119fc8261192e565b9050611a0b8160038501611946565b50505050565b610636828261195f565b60258152602081017f496e73756666696369656e742066756e647320746f207075626c697368206d6581527f7373616765000000000000000000000000000000000000000000000000000000602082015290506112f9565b60208082528101610daf81611a1b565b60c08101611a91828a610db5565b611a9e60208301896110ad565b611aab6040830188611140565b611ab86060830187611140565b8181036080830152611acb8185876111a9565b9050611ada60a08301846111d9565b98975050505050505050565b67ffffffffffffffff918216919081169082820190811115610daf57610daf6113b756fea2646970667358221220bead2f08222fa8050ef654f93b3b55289786509febf6aadea92d722d33fb188964736f6c634300081c0033", + Bin: "0x608060405234801561001057600080fd5b5061001a33610027565b610022610098565b61014a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100e85760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101475780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b611b60806101596000396000f3fe6080604052600436106100d55760003560e01c8063715018a61161007f57806399a3ad211161005957806399a3ad21146102af578063ab53bddc146102cf578063b1454caa146102ef578063f2fde38b1461030f57610149565b8063715018a6146102355780638da5cb5b1461024a5780639730886d1461028f57610149565b8063346633fb116100b0578063346633fb146101e257806336d2da90146101f5578063485cc9551461021557610149565b8062a1b8151461016a5780630fcfbd111461019557806333a88c72146101b557610149565b36610149576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb90349061011a9033908390600401610dea565b6000604051808303818588803b15801561013357600080fd5b505af1158015610147573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161016190610e39565b60405180910390fd5b34801561017657600080fd5b5061017f61032f565b60405161018c9190610e49565b60405180910390f35b3480156101a157600080fd5b5061017f6101b0366004610e72565b6103bb565b3480156101c157600080fd5b506101d56101d0366004610e72565b61041a565b60405161018c9190610eb5565b6101476101f0366004610ef3565b61046c565b34801561020157600080fd5b50610147610210366004610f2b565b6105bb565b34801561022157600080fd5b50610147610230366004610f4a565b61063a565b34801561024157600080fd5b506101476107a5565b34801561025657600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031660405161018c9190610f79565b34801561029b57600080fd5b506101476102aa366004610f87565b6107b9565b3480156102bb57600080fd5b506101476102ca366004610ef3565b610925565b3480156102db57600080fd5b506101476102ea366004610ef3565b6109c5565b6103026102fd366004611050565b610a8e565b60405161018c91906110dd565b34801561031b57600080fd5b5061014761032a366004610f2b565b610b9b565b600354604080517f1a90a21900000000000000000000000000000000000000000000000000000000815290516000926001600160a01b031691631a90a2199160048083019260209291908290030181865afa158015610392573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103b691906110f6565b905090565b600080826040516020016103cf91906112b4565b60408051601f198184030181529181528151602092830120600081815292839052912054909150806104135760405162461bcd60e51b81526004016101619061131f565b9392505050565b6000808260405160200161042e91906112b4565b60408051601f19818403018152918152815160209283012060008181529283905291205490915080158015906104645750428111155b949350505050565b60003411801561047b57508034145b6104975760405162461bcd60e51b815260040161016190611387565b60035434906001600160a01b03161561055b5760006104b461032f565b9050803410156104d65760405162461bcd60e51b8152600401610161906113c7565b6104e081346113ed565b6003546040519193506000916001600160a01b039091169083908381818185875af1925050503d8060008114610532576040519150601f19603f3d011682016040523d82523d6000602084013e610537565b606091505b50509050806105585760405162461bcd60e51b815260040161016190611458565b50505b600061056633610bf2565b9050836001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b684846040516105ad929190611468565b60405180910390a350505050565b6105c3610c50565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610610576040519150601f19603f3d011682016040523d82523d6000602084013e610615565b606091505b50509050806106365760405162461bcd60e51b8152600401610161906114b5565b5050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156106855750825b905060008267ffffffffffffffff1660011480156106a25750303b155b9050811580156106b0575080155b156106e7576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561071b57845468ff00000000000000001916680100000000000000001785555b61072487610cc4565b6003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038816179055831561079c57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290610793906001906114e9565b60405180910390a15b50505050505050565b6107ad610c50565b6107b76000610cd5565b565b60006107c66001306114f7565b90506107f97f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806108205750336001600160a01b038216145b61083c5760405162461bcd60e51b81526004016101619061154c565b6000610848834261155c565b905060008460405160200161085d91906112b4565b60408051601f198184030181529181528151602092830120600081815292839052912054909150156108a15760405162461bcd60e51b8152600401610161906115c7565b6000818152602081815260408220849055600191906108c290880188610f2b565b6001600160a01b0316815260208101919091526040016000908120906108ee60808801606089016115d7565b63ffffffff1681526020808201929092526040016000908120805460018101825590825291902086916004020161079c8282611a31565b61092d610c50565b8047101561094d5760405162461bcd60e51b8152600401610161906113c7565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461099a576040519150601f19603f3d011682016040523d82523d6000602084013e61099f565b606091505b50509050806109c05760405162461bcd60e51b8152600401610161906114b5565b505050565b60006109d26001306114f7565b9050610a057f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b03161480610a2c5750336001600160a01b038216145b610a485760405162461bcd60e51b81526004016101619061154c565b826001600160a01b03167fcd9850463422a7449c406a036e35e5edb6fbe35a64c9f12a2354be98a750c0d383604051610a819190610e49565b60405180910390a2505050565b6003546000906001600160a01b031615610b44576000610aac61032f565b905080341015610ace5760405162461bcd60e51b815260040161016190611a93565b6003546040516000916001600160a01b03169083908381818185875af1925050503d8060008114610b1b576040519150601f19603f3d011682016040523d82523d6000602084013e610b20565b606091505b5050905080610b415760405162461bcd60e51b815260040161016190611458565b50505b610b4d33610bf2565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef77593733828888888888604051610b8a9796959493929190611aa3565b60405180910390a195945050505050565b610ba3610c50565b6001600160a01b038116610be65760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016101619190610f79565b610bef81610cd5565b50565b6001600160a01b0381166000908152600260205260408120805467ffffffffffffffff169160019190610c258385611b06565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b33610c827f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146107b757336040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016101619190610f79565b610ccc610d53565b610bef81610dba565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166107b7576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ba3610d53565b60006001600160a01b0382165b92915050565b610dde81610dc2565b82525050565b80610dde565b60408101610df88285610dd5565b6104136020830184610de4565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b60208082528101610dcf81610e05565b60208101610dcf8284610de4565b600060c08284031215610e6c57610e6c600080fd5b50919050565b600060208284031215610e8757610e87600080fd5b813567ffffffffffffffff811115610ea157610ea1600080fd5b61046484828501610e57565b801515610dde565b60208101610dcf8284610ead565b610ecc81610dc2565b8114610bef57600080fd5b8035610dcf81610ec3565b80610ecc565b8035610dcf81610ee2565b60008060408385031215610f0957610f09600080fd5b610f138484610ed7565b9150610f228460208501610ee8565b90509250929050565b600060208284031215610f4057610f40600080fd5b6104138383610ed7565b60008060408385031215610f6057610f60600080fd5b610f6a8484610ed7565b9150610f228460208501610ed7565b60208101610dcf8284610dd5565b60008060408385031215610f9d57610f9d600080fd5b823567ffffffffffffffff811115610fb757610fb7600080fd5b610fc385828601610e57565b925050610f228460208501610ee8565b63ffffffff8116610ecc565b8035610dcf81610fd3565b60008083601f840112610fff57610fff600080fd5b50813567ffffffffffffffff81111561101a5761101a600080fd5b60208301915083600182028301111561103557611035600080fd5b9250929050565b60ff8116610ecc565b8035610dcf8161103c565b60008060008060006080868803121561106b5761106b600080fd5b6110758787610fdf565b94506110848760208801610fdf565b9350604086013567ffffffffffffffff8111156110a3576110a3600080fd5b6110af88828901610fea565b93509350506110c18760608801611045565b90509295509295909350565b67ffffffffffffffff8116610dde565b60208101610dcf82846110cd565b8051610dcf81610ee2565b60006020828403121561110b5761110b600080fd5b61041383836110eb565b506000610dcf6020830183610ed7565b67ffffffffffffffff8116610ecc565b8035610dcf81611125565b506000610dcf6020830183611135565b506000610dcf6020830183610fdf565b63ffffffff8116610dde565b6000808335601e193685900301811261118757611187600080fd5b830160208101925035905067ffffffffffffffff8111156111aa576111aa600080fd5b3681900382131561103557611035600080fd5b82818337506000910152565b8183526020830192506111dd8284836111bd565b50601f01601f19160190565b506000610dcf6020830183611045565b60ff8116610dde565b600060c083016112128380611115565b61121c8582610dd5565b5061122a6020840184611140565b61123760208601826110cd565b506112456040840184611150565b6112526040860182611160565b506112606060840184611150565b61126d6060860182611160565b5061127b608084018461116c565b858303608087015261128e8382846111c9565b9250505061129f60a08401846111e9565b6112ac60a08601826111f9565b509392505050565b602080825281016104138184611202565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d697474656481527f2e00000000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b60208082528101610dcf816112c5565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e672045746865720000000000000000000000000000000060208201529050611319565b60208082528101610dcf8161132f565b60208082527f496e73756666696369656e742066756e647320746f2073656e642076616c75659101908152610e33565b60208082528101610dcf81611397565b634e487b7160e01b600052601160045260246000fd5b81810381811115610dcf57610dcf6113d7565b60248152602081017f4661696c656420746f2073656e64206665657320746f206665657320636f6e7481527f726163740000000000000000000000000000000000000000000000000000000060208201529050611319565b60208082528101610dcf81611400565b604081016114768285610de4565b61041360208301846110cd565b60148152602081017f6661696c65642073656e64696e672076616c756500000000000000000000000081529050610e33565b60208082528101610dcf81611483565b6000610dcf826114d3565b90565b67ffffffffffffffff1690565b610dde816114c5565b60208101610dcf82846114e0565b6001600160a01b03918216919081169082820390811115610dcf57610dcf6113d7565b60118152602081017f4e6f74206f776e6572206f722073656c6600000000000000000000000000000081529050610e33565b60208082528101610dcf8161151a565b80820180821115610dcf57610dcf6113d7565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f210000000000000000000000000000000000000000000000000000000000000060208201529050611319565b60208082528101610dcf8161156f565b6000602082840312156115ec576115ec600080fd5b6104138383610fdf565b60008135610dcf81610ec3565b60006001600160a01b03835b81169019929092169190911792915050565b60006001600160a01b038216610dcf565b6000610dcf82611621565b6000610dcf82611632565b6116518261163d565b61165c818354611603565b8255505050565b60008135610dcf81611125565b60007bffffffffffffffff000000000000000000000000000000000000000061160f8460a01b90565b6000610dcf67ffffffffffffffff83166114d3565b6116b782611699565b61165c818354611670565b60008135610dcf81610fd3565b60007fffffffff0000000000000000000000000000000000000000000000000000000061160f8460e01b90565b600063ffffffff8216610dcf565b611713826116fc565b61165c8183546116cf565b600063ffffffff8361160f565b611734826116fc565b61165c81835461171e565b6000808335601e193685900301811261175a5761175a600080fd5b8301915050803567ffffffffffffffff81111561177957611779600080fd5b60208201915060018102360382131561103557611035600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b6002810460018216806117d457607f821691505b602082108103610e6c57610e6c6117aa565b6000610dcf6114d08381565b6117fb836117e6565b815460001960089490940293841b1916921b91909117905550565b60006109c08184846117f2565b8181101561063657611836600082611816565b600101611823565b601f8211156109c0576000818152602090206020601f850104810160208510156118655750805b6118776020601f860104830182611823565b5050505050565b8267ffffffffffffffff81111561189757611897611794565b6118a182546117c0565b6118ac82828561183e565b506000601f8211600181146118e157600083156118c95750848201355b600019600885021c198116600285021785555061193b565b600084815260209020601f19841690835b8281101561191257878501358255602094850194600190920191016118f2565b508482101561192f576000196008601f8716021c19878501351681555b50506001600284020184555b505050505050565b6109c083838361187e565b60008135610dcf8161103c565b600060ff8216610dcf565b61196f8261195b565b815460ff191660ff82161761165c565b80828061198b816115f6565b90506119978184611648565b505060208301806119a782611663565b90506119b381846116ae565b505060408301806119c3826116c2565b90506119cf818461170a565b50505060608201806119e0826116c2565b90506119ef816001850161172b565b50506119fe608083018361173f565b611a0c818360028601611943565b505060a0820180611a1c8261194e565b9050611a2b8160038501611966565b50505050565b610636828261197f565b60258152602081017f496e73756666696369656e742066756e647320746f207075626c697368206d6581527f737361676500000000000000000000000000000000000000000000000000000060208201529050611319565b60208082528101610dcf81611a3b565b60c08101611ab1828a610dd5565b611abe60208301896110cd565b611acb6040830188611160565b611ad86060830187611160565b8181036080830152611aeb8185876111c9565b9050611afa60a08301846111f9565b98975050505050505050565b67ffffffffffffffff918216919081169082820190811115610dcf57610dcf6113d756fea2646970667358221220f95f53578abddab4dbfcba4e38ed51470d4d4cbc31b23b532e46b0005f46de4b64736f6c634300081c0033", } // MessageBusABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/SystemDeployer/SystemDeployer.go b/contracts/generated/SystemDeployer/SystemDeployer.go index 1276aed35c..a9d13ad51e 100644 --- a/contracts/generated/SystemDeployer/SystemDeployer.go +++ b/contracts/generated/SystemDeployer/SystemDeployer.go @@ -32,7 +32,7 @@ var ( // SystemDeployerMetaData contains all meta data concerning the SystemDeployer contract. var SystemDeployerMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"eoaAdmin\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"SystemContractDeployed\",\"type\":\"event\"}]", - Bin: "0x608060405234801561001057600080fd5b50604051615bae380380615bae83398101604081905261002f916103e7565b61003881610060565b6000610044828261011d565b905061005082826101e2565b610059826102a2565b50506105c4565b600060405161006e90610373565b604051809103906000f08015801561008a573d6000803e3d6000fd5b509050600063c4d66de860e01b836040516024016100a8919061041c565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006100f083858461032f60201b60201c565b9050600080516020615b8e8339815191528160405161010f919061045e565b60405180910390a150505050565b60008060405161012c90610380565b604051809103906000f080158015610148573d6000803e3d6000fd5b509050600063da35a26f60e01b8486604051602401610168929190610483565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006101b083878461032f60201b60201c565b9050600080516020615b8e833981519152816040516101cf91906104b7565b60405180910390a1925050505b92915050565b60006040516101f09061038d565b604051809103906000f08015801561020c573d6000803e3d6000fd5b509050600063485cc95560e01b848460405160240161022c9291906104c7565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050509050600061027483868461032f60201b60201c565b9050600080516020615b8e8339815191528160405161029391906104f4565b60405180910390a15050505050565b60006040516102b09061039a565b604051809103906000f0801580156102cc573d6000803e3d6000fd5b506040805160048152602481019091526020810180516001600160e01b0390811663204a7f0760e21b17909152919250906000906103109084908690859061032f16565b9050600080516020615b8e8339815191528160405161010f9190610528565b600080848484604051610341906103a7565b61034d9392919061058e565b604051809103906000f080158015610369573d6000803e3d6000fd5b5095945050505050565b610dfe8061061183390190565b6107618061140f83390190565b611c9980611b7083390190565b6110fb8061380983390190565b61128a8061490483390190565b60006001600160a01b0382166101dc565b6103ce816103b4565b81146103d957600080fd5b50565b80516101dc816103c5565b6000602082840312156103fc576103fc600080fd5b61040683836103dc565b9392505050565b610416816103b4565b82525050565b602081016101dc828461040d565b60198152602081017f5472616e73616374696f6e73506f737450726f636573736f7200000000000000815290505b60200190565b6040808252810161046e8161042a565b90506101dc602083018461040d565b80610416565b60408101610491828561047d565b610406602083018461040d565b6004815260208101634665657360e01b81529050610458565b6040808252810161046e8161049e565b60408101610491828561040d565b600a815260208101694d65737361676542757360b01b81529050610458565b6040808252810161046e816104d5565b600f8152602081016e5075626c696343616c6c6261636b7360881b81529050610458565b6040808252810161046e81610504565b60005b8381101561055357818101518382015260200161053b565b50506000910152565b6000610566825190565b80845260208401935061057d818560208601610538565b601f01601f19169290920192915050565b6060810161059c828661040d565b6105a9602083018561040d565b81810360408301526105bb818461055c565b95945050505050565b603f806105d26000396000f3fe6080604052600080fdfea2646970667358221220e87774699bbfcaacb84c6fad7bba9168322ab7a17971e0a94ab90760c5a483f864736f6c634300081c00336080604052348015600f57600080fd5b50610ddf8061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806364c55a9d11610081578063c4d66de81161005b578063c4d66de8146101c8578063d547741f146101db578063ee546fd8146101ee57600080fd5b806364c55a9d1461017657806391d1485414610189578063a217fddf146101c057600080fd5b80632f2ff15d116100b25780632f2ff15d1461012757806336568abe1461013c578063508a50f41461014f57600080fd5b806301ffc9a7146100ce578063248a9ca3146100f7575b600080fd5b6100e16100dc3660046107fd565b610265565b6040516100ee919061082d565b60405180910390f35b61011a61010536600461084c565b60009081526020819052604090206001015490565b6040516100ee9190610871565b61013a6101353660046108a4565b6102fe565b005b61013a61014a3660046108a4565b610329565b61011a7ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59881565b61013a61018436600461092e565b61037a565b6100e16101973660046108a4565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b61011a600081565b61013a6101d6366004610976565b610492565b61013a6101e93660046108a4565b610602565b61013a6101fc366004610976565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806102f857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60008281526020819052604090206001015461031981610627565b6103238383610634565b50505050565b6001600160a01b038116331461036b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61037582826106de565b505050565b60006103876001306109ab565b9050336001600160a01b038216146103ba5760405162461bcd60e51b81526004016103b190610a02565b60405180910390fd5b60008290036103db5760405162461bcd60e51b81526004016103b190610a44565b60005b600154811015610323576000600182815481106103fd576103fd610a54565b6000918252602090912001546040517f9f9976af0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911691508190639f9976af906104549088908890600401610d4b565b600060405180830381600087803b15801561046e57600080fd5b505af1158015610482573d6000803e3d6000fd5b50505050508060010190506103de565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156104dd5750825b905060008267ffffffffffffffff1660011480156104fa5750303b155b905081158015610508575080155b1561053f576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561057357845468ff00000000000000001916680100000000000000001785555b61057e600087610634565b506105a97ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59887610634565b5083156105fa57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906105f190600190610d80565b60405180910390a15b505050505050565b60008281526020819052604090206001015461061d81610627565b61032383836106de565b6106318133610761565b50565b6000828152602081815260408083206001600160a01b038516845290915281205460ff166106d6576000838152602081815260408083206001600160a01b03861684529091529020805460ff1916600117905561068e3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016102f8565b5060006102f8565b6000828152602081815260408083206001600160a01b038516845290915281205460ff16156106d6576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016102f8565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166107bf5780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016103b1929190610d8e565b5050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b811461063157600080fd5b80356102f8816107c3565b60006020828403121561081257610812600080fd5b61081c83836107f2565b9392505050565b8015155b82525050565b602081016102f88284610823565b806107e7565b80356102f88161083b565b60006020828403121561086157610861600080fd5b61081c8383610841565b80610827565b602081016102f8828461086b565b60006001600160a01b0382166102f8565b6107e78161087f565b80356102f881610890565b600080604083850312156108ba576108ba600080fd5b6108c48484610841565b91506108d38460208501610899565b90509250929050565b60008083601f8401126108f1576108f1600080fd5b50813567ffffffffffffffff81111561090c5761090c600080fd5b60208301915083602082028301111561092757610927600080fd5b9250929050565b6000806020838503121561094457610944600080fd5b823567ffffffffffffffff81111561095e5761095e600080fd5b61096a858286016108dc565b92509250509250929050565b60006020828403121561098b5761098b600080fd5b61081c8383610899565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b039182169190811690828203908111156102f8576102f8610995565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b602080825281016102f8816109ce565b601a8152602081017f4e6f207472616e73616374696f6e7320746f20636f6e76657274000000000000815290506109fc565b602080825281016102f881610a12565b634e487b7160e01b600052603260045260246000fd5b60ff81166107e7565b80356102f881610a6a565b5060006102f86020830183610a73565b60ff8116610827565b5060006102f86020830183610841565b5060006102f86020830183610899565b6108278161087f565b6000808335601e1936859003018112610adb57610adb600080fd5b830160208101925035905067ffffffffffffffff811115610afe57610afe600080fd5b3681900382131561092757610927600080fd5b82818337506000910152565b818352602083019250610b31828483610b11565b50601f01601f19160190565b8015156107e7565b80356102f881610b3d565b5060006102f86020830183610b45565b67ffffffffffffffff81166107e7565b80356102f881610b60565b5060006102f86020830183610b70565b67ffffffffffffffff8116610827565b60006101408301610bac8380610a7e565b610bb68582610a8e565b50610bc46020840184610a97565b610bd1602086018261086b565b50610bdf6040840184610a97565b610bec604086018261086b565b50610bfa6060840184610a97565b610c07606086018261086b565b50610c156080840184610aa7565b610c226080860182610ab7565b50610c3060a0840184610a97565b610c3d60a086018261086b565b50610c4b60c0840184610ac0565b85830360c0870152610c5e838284610b1d565b92505050610c6f60e0840184610aa7565b610c7c60e0860182610ab7565b50610c8b610100840184610b50565b610c99610100860182610823565b50610ca8610120840184610b7b565b610cb6610120860182610b8b565b509392505050565b600061081c8383610b9b565b6000823561013e1936849003018112610ce557610ce5600080fd5b90910192915050565b818352602083019250600083602084028101838060005b87811015610d3e578484038952610d1c8284610cca565b610d268582610cbe565b94505060208201602099909901989150600101610d05565b5091979650505050505050565b60208082528101610d5d818486610cee565b949350505050565b600067ffffffffffffffff82166102f8565b61082781610d65565b602081016102f88284610d77565b60408101610d9c8285610ab7565b61081c602083018461086b56fea2646970667358221220000c7add8ef77f2ce3e54738e1a6216052e3c7d3dfd30f31adc394e073238b4d64736f6c634300081c00336080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610688806100d96000396000f3fe60806040526004361061007f5760003560e01c80639003adfe1161004e5780639003adfe1461012e578063afe997ea14610141578063da35a26f14610156578063f2fde38b1461017657600080fd5b80631a90a2191461008b57806323aa2a9d146100b2578063715018a6146100d45780638da5cb5b146100e957600080fd5b3661008657005b600080fd5b34801561009757600080fd5b506000545b6040516100a99190610544565b60405180910390f35b3480156100be57600080fd5b506100d26100cd366004610570565b610196565b005b3480156100e057600080fd5b506100d26101a3565b3480156100f557600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166040516100a991906105b0565b34801561013a57600080fd5b504761009c565b34801561014d57600080fd5b506100d26101b7565b34801561016257600080fd5b506100d26101713660046105d2565b61021a565b34801561018257600080fd5b506100d261019136600461060a565b610362565b61019e6103bf565b600055565b6101ab6103bf565b6101b56000610433565b565b6101bf6103bf565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015610217573d6000803e3d6000fd5b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156102655750825b905060008267ffffffffffffffff1660011480156102825750303b155b905081158015610290575080155b156102c7576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156102fb57845468ff00000000000000001916680100000000000000001785555b610304866104bc565b6000879055831561035957845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061035090600190610644565b60405180910390a15b50505050505050565b61036a6103bf565b6001600160a01b0381166103b65760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016103ad91906105b0565b60405180910390fd5b61021781610433565b336103f17f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146101b557336040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016103ad91906105b0565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff000000000000000000000000000000000000000081166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6104c46104cd565b61021781610534565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166101b5576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61036a6104cd565b805b82525050565b60208101610552828461053c565b92915050565b805b811461021757600080fd5b803561055281610558565b60006020828403121561058557610585600080fd5b61058f8383610565565b9392505050565b60006001600160a01b038216610552565b61053e81610596565b6020810161055282846105a7565b61055a81610596565b8035610552816105be565b600080604083850312156105e8576105e8600080fd5b6105f28484610565565b915061060184602085016105c7565b90509250929050565b60006020828403121561061f5761061f600080fd5b61058f83836105c7565b600067ffffffffffffffff8216610552565b61053e81610629565b60208101610552828461063b56fea264697066735822122080f0c01e34a6bfd9ed27e9c05c50a018ef9cc6e669f767856b4c30e98b70567764736f6c634300081c0033608060405234801561001057600080fd5b5061001a33610027565b610022610098565b61014a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100e85760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101475780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b611b40806101596000396000f3fe6080604052600436106100d55760003560e01c8063715018a61161007f57806399a3ad211161005957806399a3ad21146102af578063ab53bddc146102cf578063b1454caa146102ef578063f2fde38b1461030f57610149565b8063715018a6146102355780638da5cb5b1461024a5780639730886d1461028f57610149565b8063346633fb116100b0578063346633fb146101e257806336d2da90146101f5578063485cc9551461021557610149565b8062a1b8151461016a5780630fcfbd111461019557806333a88c72146101b557610149565b36610149576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb90349061011a9033908390600401610dca565b6000604051808303818588803b15801561013357600080fd5b505af1158015610147573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161016190610e19565b60405180910390fd5b34801561017657600080fd5b5061017f61032f565b60405161018c9190610e29565b60405180910390f35b3480156101a157600080fd5b5061017f6101b0366004610e52565b6103bb565b3480156101c157600080fd5b506101d56101d0366004610e52565b61041a565b60405161018c9190610e95565b6101476101f0366004610ed3565b61046c565b34801561020157600080fd5b50610147610210366004610f0b565b6105bb565b34801561022157600080fd5b50610147610230366004610f2a565b61063a565b34801561024157600080fd5b506101476107a5565b34801561025657600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031660405161018c9190610f59565b34801561029b57600080fd5b506101476102aa366004610f67565b6107b9565b3480156102bb57600080fd5b506101476102ca366004610ed3565b610925565b3480156102db57600080fd5b506101476102ea366004610ed3565b6109a5565b6103026102fd366004611030565b610a6e565b60405161018c91906110bd565b34801561031b57600080fd5b5061014761032a366004610f0b565b610b7b565b600354604080517f1a90a21900000000000000000000000000000000000000000000000000000000815290516000926001600160a01b031691631a90a2199160048083019260209291908290030181865afa158015610392573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103b691906110d6565b905090565b600080826040516020016103cf9190611294565b60408051601f198184030181529181528151602092830120600081815292839052912054909150806104135760405162461bcd60e51b8152600401610161906112ff565b9392505050565b6000808260405160200161042e9190611294565b60408051601f19818403018152918152815160209283012060008181529283905291205490915080158015906104645750428111155b949350505050565b60003411801561047b57508034145b6104975760405162461bcd60e51b815260040161016190611367565b60035434906001600160a01b03161561055b5760006104b461032f565b9050803410156104d65760405162461bcd60e51b8152600401610161906113a7565b6104e081346113cd565b6003546040519193506000916001600160a01b039091169083908381818185875af1925050503d8060008114610532576040519150601f19603f3d011682016040523d82523d6000602084013e610537565b606091505b50509050806105585760405162461bcd60e51b815260040161016190611438565b50505b600061056633610bd2565b9050836001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b684846040516105ad929190611448565b60405180910390a350505050565b6105c3610c30565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610610576040519150601f19603f3d011682016040523d82523d6000602084013e610615565b606091505b50509050806106365760405162461bcd60e51b815260040161016190611495565b5050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156106855750825b905060008267ffffffffffffffff1660011480156106a25750303b155b9050811580156106b0575080155b156106e7576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561071b57845468ff00000000000000001916680100000000000000001785555b61072487610ca4565b6003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038816179055831561079c57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290610793906001906114c9565b60405180910390a15b50505050505050565b6107ad610c30565b6107b76000610cb5565b565b60006107c66001306114d7565b90506107f97f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806108205750336001600160a01b038216145b61083c5760405162461bcd60e51b81526004016101619061152c565b6000610848834261153c565b905060008460405160200161085d9190611294565b60408051601f198184030181529181528151602092830120600081815292839052912054909150156108a15760405162461bcd60e51b8152600401610161906115a7565b6000818152602081815260408220849055600191906108c290880188610f0b565b6001600160a01b0316815260208101919091526040016000908120906108ee60808801606089016115b7565b63ffffffff1681526020808201929092526040016000908120805460018101825590825291902086916004020161079c8282611a11565b61092d610c30565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461097a576040519150601f19603f3d011682016040523d82523d6000602084013e61097f565b606091505b50509050806109a05760405162461bcd60e51b815260040161016190611495565b505050565b60006109b26001306114d7565b90506109e57f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b03161480610a0c5750336001600160a01b038216145b610a285760405162461bcd60e51b81526004016101619061152c565b826001600160a01b03167fcd9850463422a7449c406a036e35e5edb6fbe35a64c9f12a2354be98a750c0d383604051610a619190610e29565b60405180910390a2505050565b6003546000906001600160a01b031615610b24576000610a8c61032f565b905080341015610aae5760405162461bcd60e51b815260040161016190611a73565b6003546040516000916001600160a01b03169083908381818185875af1925050503d8060008114610afb576040519150601f19603f3d011682016040523d82523d6000602084013e610b00565b606091505b5050905080610b215760405162461bcd60e51b815260040161016190611438565b50505b610b2d33610bd2565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef77593733828888888888604051610b6a9796959493929190611a83565b60405180910390a195945050505050565b610b83610c30565b6001600160a01b038116610bc65760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016101619190610f59565b610bcf81610cb5565b50565b6001600160a01b0381166000908152600260205260408120805467ffffffffffffffff169160019190610c058385611ae6565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b33610c627f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146107b757336040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016101619190610f59565b610cac610d33565b610bcf81610d9a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166107b7576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b83610d33565b60006001600160a01b0382165b92915050565b610dbe81610da2565b82525050565b80610dbe565b60408101610dd88285610db5565b6104136020830184610dc4565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b60208082528101610daf81610de5565b60208101610daf8284610dc4565b600060c08284031215610e4c57610e4c600080fd5b50919050565b600060208284031215610e6757610e67600080fd5b813567ffffffffffffffff811115610e8157610e81600080fd5b61046484828501610e37565b801515610dbe565b60208101610daf8284610e8d565b610eac81610da2565b8114610bcf57600080fd5b8035610daf81610ea3565b80610eac565b8035610daf81610ec2565b60008060408385031215610ee957610ee9600080fd5b610ef38484610eb7565b9150610f028460208501610ec8565b90509250929050565b600060208284031215610f2057610f20600080fd5b6104138383610eb7565b60008060408385031215610f4057610f40600080fd5b610f4a8484610eb7565b9150610f028460208501610eb7565b60208101610daf8284610db5565b60008060408385031215610f7d57610f7d600080fd5b823567ffffffffffffffff811115610f9757610f97600080fd5b610fa385828601610e37565b925050610f028460208501610ec8565b63ffffffff8116610eac565b8035610daf81610fb3565b60008083601f840112610fdf57610fdf600080fd5b50813567ffffffffffffffff811115610ffa57610ffa600080fd5b60208301915083600182028301111561101557611015600080fd5b9250929050565b60ff8116610eac565b8035610daf8161101c565b60008060008060006080868803121561104b5761104b600080fd5b6110558787610fbf565b94506110648760208801610fbf565b9350604086013567ffffffffffffffff81111561108357611083600080fd5b61108f88828901610fca565b93509350506110a18760608801611025565b90509295509295909350565b67ffffffffffffffff8116610dbe565b60208101610daf82846110ad565b8051610daf81610ec2565b6000602082840312156110eb576110eb600080fd5b61041383836110cb565b506000610daf6020830183610eb7565b67ffffffffffffffff8116610eac565b8035610daf81611105565b506000610daf6020830183611115565b506000610daf6020830183610fbf565b63ffffffff8116610dbe565b6000808335601e193685900301811261116757611167600080fd5b830160208101925035905067ffffffffffffffff81111561118a5761118a600080fd5b3681900382131561101557611015600080fd5b82818337506000910152565b8183526020830192506111bd82848361119d565b50601f01601f19160190565b506000610daf6020830183611025565b60ff8116610dbe565b600060c083016111f283806110f5565b6111fc8582610db5565b5061120a6020840184611120565b61121760208601826110ad565b506112256040840184611130565b6112326040860182611140565b506112406060840184611130565b61124d6060860182611140565b5061125b608084018461114c565b858303608087015261126e8382846111a9565b9250505061127f60a08401846111c9565b61128c60a08601826111d9565b509392505050565b6020808252810161041381846111e2565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d697474656481527f2e00000000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b60208082528101610daf816112a5565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e6720457468657200000000000000000000000000000000602082015290506112f9565b60208082528101610daf8161130f565b60208082527f496e73756666696369656e742066756e647320746f2073656e642076616c75659101908152610e13565b60208082528101610daf81611377565b634e487b7160e01b600052601160045260246000fd5b81810381811115610daf57610daf6113b7565b60248152602081017f4661696c656420746f2073656e64206665657320746f206665657320636f6e7481527f7261637400000000000000000000000000000000000000000000000000000000602082015290506112f9565b60208082528101610daf816113e0565b604081016114568285610dc4565b61041360208301846110ad565b60148152602081017f6661696c65642073656e64696e672076616c756500000000000000000000000081529050610e13565b60208082528101610daf81611463565b6000610daf826114b3565b90565b67ffffffffffffffff1690565b610dbe816114a5565b60208101610daf82846114c0565b6001600160a01b03918216919081169082820390811115610daf57610daf6113b7565b60118152602081017f4e6f74206f776e6572206f722073656c6600000000000000000000000000000081529050610e13565b60208082528101610daf816114fa565b80820180821115610daf57610daf6113b7565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f2100000000000000000000000000000000000000000000000000000000000000602082015290506112f9565b60208082528101610daf8161154f565b6000602082840312156115cc576115cc600080fd5b6104138383610fbf565b60008135610daf81610ea3565b60006001600160a01b03835b81169019929092169190911792915050565b60006001600160a01b038216610daf565b6000610daf82611601565b6000610daf82611612565b6116318261161d565b61163c8183546115e3565b8255505050565b60008135610daf81611105565b60007bffffffffffffffff00000000000000000000000000000000000000006115ef8460a01b90565b6000610daf67ffffffffffffffff83166114b3565b61169782611679565b61163c818354611650565b60008135610daf81610fb3565b60007fffffffff000000000000000000000000000000000000000000000000000000006115ef8460e01b90565b600063ffffffff8216610daf565b6116f3826116dc565b61163c8183546116af565b600063ffffffff836115ef565b611714826116dc565b61163c8183546116fe565b6000808335601e193685900301811261173a5761173a600080fd5b8301915050803567ffffffffffffffff81111561175957611759600080fd5b60208201915060018102360382131561101557611015600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b6002810460018216806117b457607f821691505b602082108103610e4c57610e4c61178a565b6000610daf6114b08381565b6117db836117c6565b815460001960089490940293841b1916921b91909117905550565b60006109a08184846117d2565b81811015610636576118166000826117f6565b600101611803565b601f8211156109a0576000818152602090206020601f850104810160208510156118455750805b6118576020601f860104830182611803565b5050505050565b8267ffffffffffffffff81111561187757611877611774565b61188182546117a0565b61188c82828561181e565b506000601f8211600181146118c157600083156118a95750848201355b600019600885021c198116600285021785555061191b565b600084815260209020601f19841690835b828110156118f257878501358255602094850194600190920191016118d2565b508482101561190f576000196008601f8716021c19878501351681555b50506001600284020184555b505050505050565b6109a083838361185e565b60008135610daf8161101c565b600060ff8216610daf565b61194f8261193b565b815460ff191660ff82161761163c565b80828061196b816115d6565b90506119778184611628565b5050602083018061198782611643565b9050611993818461168e565b505060408301806119a3826116a2565b90506119af81846116ea565b50505060608201806119c0826116a2565b90506119cf816001850161170b565b50506119de608083018361171f565b6119ec818360028601611923565b505060a08201806119fc8261192e565b9050611a0b8160038501611946565b50505050565b610636828261195f565b60258152602081017f496e73756666696369656e742066756e647320746f207075626c697368206d6581527f7373616765000000000000000000000000000000000000000000000000000000602082015290506112f9565b60208082528101610daf81611a1b565b60c08101611a91828a610db5565b611a9e60208301896110ad565b611aab6040830188611140565b611ab86060830187611140565b8181036080830152611acb8185876111a9565b9050611ada60a08301846111d9565b98975050505050505050565b67ffffffffffffffff918216919081169082820190811115610daf57610daf6113b756fea2646970667358221220bead2f08222fa8050ef654f93b3b55289786509febf6aadea92d722d33fb188964736f6c634300081c00336080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b611022806100d96000396000f3fe6080604052600436106100595760003560e01c806382fbdc9c1161004357806382fbdc9c146100ae578063929d34e9146100ce578063a67e1760146100ee57600080fd5b8062e0d3b51461005e5780638129fc1c14610097575b600080fd5b34801561006a57600080fd5b5061007e610079366004610a85565b610103565b60405161008e9493929190610b20565b60405180910390f35b3480156100a357600080fd5b506100ac6101be565b005b6100c16100bc366004610bb7565b610300565b60405161008e9190610bff565b3480156100da57600080fd5b506100ac6100e9366004610a85565b610368565b3480156100fa57600080fd5b506100ac61050d565b600060208190529081526040902080546001820180546001600160a01b03909216929161012f90610c23565b80601f016020809104026020016040519081016040528092919081815260200182805461015b90610c23565b80156101a85780601f1061017d576101008083540402835291602001916101a8565b820191906000526020600020905b81548152906001019060200180831161018b57829003601f168201915b5050505050908060020154908060030154905084565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156102095750825b905060008267ffffffffffffffff1660011480156102265750303b155b905081158015610234575080155b1561026b576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561029f57845468ff00000000000000001916680100000000000000001785555b6000600181905560025583156102f957845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906102f090600190610c73565b60405180910390a15b5050505050565b600080341161032a5760405162461bcd60e51b815260040161032190610cb5565b60405180910390fd5b6152086103363461055f565b116103535760405162461bcd60e51b815260040161032190610cc5565b61035f3384843461056b565b90505b92915050565b60008181526020818152604080832081516080810190925280546001600160a01b0316825260018101805492939192918401916103a490610c23565b80601f01602080910402602001604051908101604052809291908181526020018280546103d090610c23565b801561041d5780601f106103f25761010080835404028352916020019161041d565b820191906000526020600020905b81548152906001019060200180831161040057829003601f168201915b50505050508152602001600282015481526020016003820154815250509050600081600001516001600160a01b0316826020015160405161045e9190610d48565b6000604051808303816000865af19150503d806000811461049b576040519150601f19603f3d011682016040523d82523d6000602084013e6104a0565b606091505b50509050806104c15760405162461bcd60e51b815260040161032190610d84565b6000838152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff19168155906104f86001830182610a30565b50600060028201819055600390910155505050565b600061051a600130610daa565b9050336001600160a01b038216146105445760405162461bcd60e51b815260040161032190610dff565b6002546001541461055c57610557610655565b610544565b50565b60006103624883610e25565b600060015490506040518060800160405280866001600160a01b0316815260200185858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509385525050506020820185905248604090920191909152600180548291826105e583610e39565b9091555081526020808201929092526040016000208251815473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039091161781559082015160018201906106369082610f02565b5060408201516002820155606090910151600390910155949350505050565b6002546001540361066257565b60008061066d610780565b91509150600082606001519050600081846040015161068c9190610e25565b905060005a9050600085600001516001600160a01b03168387602001516040516106b69190610d48565b60006040518083038160008787f1925050503d80600081146106f4576040519150601f19603f3d011682016040523d82523d6000602084013e6106f9565b606091505b5050905060005a9050600061070e8285610fc2565b905060008186111561073257866107258388610fc2565b61072f9190610fd5565b90505b6000818a604001516107449190610fc2565b8a51909150851561075757610757610898565b61075f6108e4565b61076a83828c6108fb565b610773826109da565b5050505050505050505050565b6107b4604051806080016040528060006001600160a01b031681526020016060815260200160008152602001600081525090565b60025460008181526020818152604080832081516080810190925280546001600160a01b03168252600181018054949591949193859290840191906107f890610c23565b80601f016020809104026020016040519081016040528092919081815260200182805461082490610c23565b80156108715780601f1061084657610100808354040283529160200191610871565b820191906000526020600020905b81548152906001019060200180831161085457829003601f168201915b50505050508152602001600282015481526020016003820154815250509150915091509091565b6002546000908152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff19168155906108d26001830182610a30565b50600060028201819055600390910155565b600280549060006108f483610e39565b9190505550565b60008160405160240161090e9190610bff565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f5ea3955800000000000000000000000000000000000000000000000000000000179052519091506000906001600160a01b0385169061afc8908790610989908690610d48565b600060405180830381858888f193505050503d80600081146109c7576040519150601f19603f3d011682016040523d82523d6000602084013e6109cc565b606091505b50509050806102f9576102f9855b806000036109e55750565b60405141908290600081818185875af1925050503d8060008114610a25576040519150601f19603f3d011682016040523d82523d6000602084013e610a2a565b606091505b50505050565b508054610a3c90610c23565b6000825580601f10610a4c575050565b601f01602090049060005260206000209081019061055c91905b80821115610a7a5760008155600101610a66565b5090565b8035610362565b600060208284031215610a9a57610a9a600080fd5b61035f8383610a7e565b60006001600160a01b038216610362565b610abe81610aa4565b82525050565b60005b83811015610adf578181015183820152602001610ac7565b50506000910152565b6000610af2825190565b808452602084019350610b09818560208601610ac4565b601f01601f19169290920192915050565b80610abe565b60808101610b2e8287610ab5565b8181036020830152610b408186610ae8565b9050610b4f6040830185610b1a565b610b5c6060830184610b1a565b95945050505050565b60008083601f840112610b7a57610b7a600080fd5b50813567ffffffffffffffff811115610b9557610b95600080fd5b602083019150836001820283011115610bb057610bb0600080fd5b9250929050565b60008060208385031215610bcd57610bcd600080fd5b823567ffffffffffffffff811115610be757610be7600080fd5b610bf385828601610b65565b92509250509250929050565b602081016103628284610b1a565b634e487b7160e01b600052602260045260246000fd5b600281046001821680610c3757607f821691505b602082108103610c4957610c49610c0d565b50919050565b600061036282610c5d565b90565b67ffffffffffffffff1690565b610abe81610c4f565b602081016103628284610c6a565b600d8152602081017f4e6f2076616c75652073656e7400000000000000000000000000000000000000815290505b60200190565b6020808252810161036281610c81565b6020808252810161036281602481527f47617320746f6f206c6f7720636f6d706172656420746f20636f7374206f662060208201527f63616c6c00000000000000000000000000000000000000000000000000000000604082015260600190565b6000610d30825190565b610d3e818560208601610ac4565b9290920192915050565b6103628183610d26565b60198152602081017f43616c6c6261636b20657865637574696f6e206661696c65640000000000000081529050610caf565b6020808252810161036281610d52565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0391821691908116908282039081111561036257610362610d94565b60088152602081017f4e6f742073656c6600000000000000000000000000000000000000000000000081529050610caf565b6020808252810161036281610dcd565b634e487b7160e01b600052601260045260246000fd5b600082610e3457610e34610e0f565b500490565b600060018201610e4b57610e4b610d94565b5060010190565b634e487b7160e01b600052604160045260246000fd5b6000610362610c5a8381565b610e7d83610e68565b815460001960089490940293841b1916921b91909117905550565b6000610ea5818484610e74565b505050565b81811015610ec557610ebd600082610e98565b600101610eaa565b5050565b601f821115610ea5576000818152602090206020601f85010481016020851015610ef05750805b6102f96020601f860104830182610eaa565b815167ffffffffffffffff811115610f1c57610f1c610e52565b610f268254610c23565b610f31828285610ec9565b506020601f821160018114610f665760008315610f4e5750848201515b600019600885021c19811660028502178555506102f9565b600084815260208120601f198516915b82811015610f965787850151825560209485019460019092019101610f76565b5084821015610fb35783870151600019601f87166008021c191681555b50505050600202600101905550565b8181038181111561036257610362610d94565b818102811582820484141761036257610362610d9456fea2646970667358221220a7b27c0c1863d6c0b2486c73ffa2a4592563ec57aeb866a59c97b817f532293064736f6c634300081c003360a060405260405161128a38038061128a8339810160408190526100229161046a565b828161002e8282610089565b50508160405161003d9061031d565b61004791906104df565b604051809103906000f080158015610063573d6000803e3d6000fd5b506001600160a01b031660805261008161007c60805190565b6100e8565b505050610534565b6100928261014b565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156100dc576100d782826101c5565b505050565b6100e461023e565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61012860008051602061126a833981519152546001600160a01b031690565b826040516101379291906104ed565b60405180910390a16101488161025f565b50565b806001600160a01b03163b6000036101815780604051634c9c8ce360e01b815260040161017891906104df565b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b0316846040516101e2919061052a565b600060405180830381855af49150503d806000811461021d576040519150601f19603f3d011682016040523d82523d6000602084013e610222565b606091505b50909250905061023385838361029e565b925050505b92915050565b341561025d5760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116610289576000604051633173bdd160e11b815260040161017891906104df565b8060008051602061126a8339815191526101a4565b6060826102b3576102ae826102f4565b6102ed565b81511580156102ca57506001600160a01b0384163b155b156102ea5783604051639996b31560e01b815260040161017891906104df565b50805b9392505050565b8051156103045780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6106eb80610b7f83390190565b60006001600160a01b038216610238565b6103448161032a565b811461014857600080fd5b80516102388161033b565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b03811182821017156103955761039561035a565b6040525050565b60006103a760405190565b90506103b38282610370565b919050565b60006001600160401b038211156103d1576103d161035a565b601f19601f83011660200192915050565b60005b838110156103fd5781810151838201526020016103e5565b50506000910152565b6000610419610414846103b8565b61039c565b905082815283838301111561043057610430600080fd5b6102ed8360208301846103e2565b600082601f83011261045257610452600080fd5b8151610462848260208601610406565b949350505050565b60008060006060848603121561048257610482600080fd5b61048c858561034f565b925061049b856020860161034f565b60408501519092506001600160401b038111156104ba576104ba600080fd5b6104c68682870161043e565b9150509250925092565b6104d98161032a565b82525050565b6020810161023882846104d0565b604081016104fb82856104d0565b6102ed60208301846104d0565b6000610512825190565b6105208185602086016103e2565b9290920192915050565b6102388183610508565b60805161063161054e6000396000601001526106316000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100c5576000357fffffffff00000000000000000000000000000000000000000000000000000000167f4f1ef28600000000000000000000000000000000000000000000000000000000146100bb576040517fd2b576ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6100c36100cd565b565b6100c36100fc565b6000806100dd36600481846103cf565b8101906100ea9190610539565b915091506100f8828261010c565b5050565b6100c3610107610167565b61019f565b610115826101c3565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561015f5761015a828261026b565b505050565b6100f86102e3565b600061019a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156101be573d6000f35b3d6000fd5b806001600160a01b03163b60000361021257806040517f4c9c8ce3000000000000000000000000000000000000000000000000000000008152600401610209919061059d565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161028891906105f1565b600060405180830381855af49150503d80600081146102c3576040519150601f19603f3d011682016040523d82523d6000602084013e6102c8565b606091505b50915091506102d885838361031b565b925050505b92915050565b34156100c3576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826103305761032b8261038a565b610383565b815115801561034757506001600160a01b0384163b155b1561038057836040517f9996b315000000000000000000000000000000000000000000000000000000008152600401610209919061059d565b50805b9392505050565b80511561039a5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600080858511156103e2576103e2600080fd5b838611156103f2576103f2600080fd5b5050820193919092039150565b60006001600160a01b0382166102dd565b610419816103ff565b81146103cc57600080fd5b80356102dd81610410565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff821117156104845761048461042f565b6040525050565b600061049660405190565b90506104a2828261045e565b919050565b600067ffffffffffffffff8211156104c1576104c161042f565b601f19601f83011660200192915050565b82818337506000910152565b60006104f16104ec846104a7565b61048b565b905082815283838301111561050857610508600080fd5b6103838360208301846104d2565b600082601f83011261052a5761052a600080fd5b610383838335602085016104de565b6000806040838503121561054f5761054f600080fd5b6105598484610424565b9150602083013567ffffffffffffffff81111561057857610578600080fd5b61058485828601610516565b9150509250929050565b610597816103ff565b82525050565b602081016102dd828461058e565b60005b838110156105c65781810151838201526020016105ae565b50506000910152565b60006105d9825190565b6105e78185602086016105ab565b9290920192915050565b6102dd81836105cf56fea264697066735822122010d1880687d5a44f0a558c272f84fabbd9bf65d697170ee3f6681c2467feb26164736f6c634300081c0033608060405234801561001057600080fd5b506040516106eb3803806106eb83398101604081905261002f916100f8565b806001600160a01b038116610063576000604051631e4fbdf760e01b815260040161005a919061012d565b60405180910390fd5b61006c81610073565b505061013b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6100df816100c3565b81146100ea57600080fd5b50565b80516100d0816100d6565b60006020828403121561010d5761010d600080fd5b61011783836100ed565b9392505050565b610127816100c3565b82525050565b602081016100d0828461011e565b6105a18061014a6000396000f3fe60806040526004361061005a5760003560e01c80639623609d116100435780639623609d146100a5578063ad3cb1cc146100b8578063f2fde38b1461010e57600080fd5b8063715018a61461005f5780638da5cb5b14610076575b600080fd5b34801561006b57600080fd5b5061007461012e565b005b34801561008257600080fd5b506000546001600160a01b031660405161009c91906102fa565b60405180910390f35b6100746100b3366004610457565b610142565b3480156100c457600080fd5b506101016040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161009c9190610513565b34801561011a57600080fd5b50610074610129366004610524565b6101ca565b61013661022a565b6101406000610270565b565b61014a61022a565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef2869034906101939086908690600401610543565b6000604051808303818588803b1580156101ac57600080fd5b505af11580156101c0573d6000803e3d6000fd5b5050505050505050565b6101d261022a565b6001600160a01b03811661021e5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b60405180910390fd5b61022781610270565b50565b6000546001600160a01b0316331461014057336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6102f4816102d8565b82525050565b602081016102e582846102eb565b60006102e5826102d8565b61031c81610308565b811461022757600080fd5b80356102e581610313565b61031c816102d8565b80356102e581610332565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff8211171561039b5761039b610346565b6040525050565b60006103ad60405190565b90506103b98282610375565b919050565b600067ffffffffffffffff8211156103d8576103d8610346565b601f19601f83011660200192915050565b82818337506000910152565b6000610408610403846103be565b6103a2565b905082815283838301111561041f5761041f600080fd5b61042d8360208301846103e9565b9392505050565b600082601f83011261044857610448600080fd5b61042d838335602085016103f5565b60008060006060848603121561046f5761046f600080fd5b6104798585610327565b9250610488856020860161033b565b9150604084013567ffffffffffffffff8111156104a7576104a7600080fd5b6104b386828701610434565b9150509250925092565b60005b838110156104d85781810151838201526020016104c0565b50506000910152565b60006104eb825190565b8084526020840193506105028185602086016104bd565b601f01601f19169290920192915050565b6020808252810161042d81846104e1565b60006020828403121561053957610539600080fd5b61042d838361033b565b6040810161055182856102eb565b818103602083015261056381846104e1565b94935050505056fea264697066735822122096c3a562b6861bd964d97d99d95931f7343ac03c64bc04aeab6287f6e42e45eb64736f6c634300081c0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103bd64e14789a915ea657e42f2dbf0b973227708fa64b58766287637985d1ade69", + Bin: "0x608060405234801561001057600080fd5b50604051615bce380380615bce83398101604081905261002f916103e7565b61003881610060565b6000610044828261011d565b905061005082826101e2565b610059826102a2565b50506105c4565b600060405161006e90610373565b604051809103906000f08015801561008a573d6000803e3d6000fd5b509050600063c4d66de860e01b836040516024016100a8919061041c565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006100f083858461032f60201b60201c565b9050600080516020615bae8339815191528160405161010f919061045e565b60405180910390a150505050565b60008060405161012c90610380565b604051809103906000f080158015610148573d6000803e3d6000fd5b509050600063da35a26f60e01b8486604051602401610168929190610483565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006101b083878461032f60201b60201c565b9050600080516020615bae833981519152816040516101cf91906104b7565b60405180910390a1925050505b92915050565b60006040516101f09061038d565b604051809103906000f08015801561020c573d6000803e3d6000fd5b509050600063485cc95560e01b848460405160240161022c9291906104c7565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050509050600061027483868461032f60201b60201c565b9050600080516020615bae8339815191528160405161029391906104f4565b60405180910390a15050505050565b60006040516102b09061039a565b604051809103906000f0801580156102cc573d6000803e3d6000fd5b506040805160048152602481019091526020810180516001600160e01b0390811663204a7f0760e21b17909152919250906000906103109084908690859061032f16565b9050600080516020615bae8339815191528160405161010f9190610528565b600080848484604051610341906103a7565b61034d9392919061058e565b604051809103906000f080158015610369573d6000803e3d6000fd5b5095945050505050565b610dfe8061061183390190565b6107618061140f83390190565b611cb980611b7083390190565b6110fb8061382983390190565b61128a8061492483390190565b60006001600160a01b0382166101dc565b6103ce816103b4565b81146103d957600080fd5b50565b80516101dc816103c5565b6000602082840312156103fc576103fc600080fd5b61040683836103dc565b9392505050565b610416816103b4565b82525050565b602081016101dc828461040d565b60198152602081017f5472616e73616374696f6e73506f737450726f636573736f7200000000000000815290505b60200190565b6040808252810161046e8161042a565b90506101dc602083018461040d565b80610416565b60408101610491828561047d565b610406602083018461040d565b6004815260208101634665657360e01b81529050610458565b6040808252810161046e8161049e565b60408101610491828561040d565b600a815260208101694d65737361676542757360b01b81529050610458565b6040808252810161046e816104d5565b600f8152602081016e5075626c696343616c6c6261636b7360881b81529050610458565b6040808252810161046e81610504565b60005b8381101561055357818101518382015260200161053b565b50506000910152565b6000610566825190565b80845260208401935061057d818560208601610538565b601f01601f19169290920192915050565b6060810161059c828661040d565b6105a9602083018561040d565b81810360408301526105bb818461055c565b95945050505050565b603f806105d26000396000f3fe6080604052600080fdfea2646970667358221220ac80c45973952c735f7d2a4ae4778a1bafbeaa456d3a44c3cef27f595706b91864736f6c634300081c00336080604052348015600f57600080fd5b50610ddf8061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806364c55a9d11610081578063c4d66de81161005b578063c4d66de8146101c8578063d547741f146101db578063ee546fd8146101ee57600080fd5b806364c55a9d1461017657806391d1485414610189578063a217fddf146101c057600080fd5b80632f2ff15d116100b25780632f2ff15d1461012757806336568abe1461013c578063508a50f41461014f57600080fd5b806301ffc9a7146100ce578063248a9ca3146100f7575b600080fd5b6100e16100dc3660046107fd565b610265565b6040516100ee919061082d565b60405180910390f35b61011a61010536600461084c565b60009081526020819052604090206001015490565b6040516100ee9190610871565b61013a6101353660046108a4565b6102fe565b005b61013a61014a3660046108a4565b610329565b61011a7ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59881565b61013a61018436600461092e565b61037a565b6100e16101973660046108a4565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b61011a600081565b61013a6101d6366004610976565b610492565b61013a6101e93660046108a4565b610602565b61013a6101fc366004610976565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806102f857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60008281526020819052604090206001015461031981610627565b6103238383610634565b50505050565b6001600160a01b038116331461036b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61037582826106de565b505050565b60006103876001306109ab565b9050336001600160a01b038216146103ba5760405162461bcd60e51b81526004016103b190610a02565b60405180910390fd5b60008290036103db5760405162461bcd60e51b81526004016103b190610a44565b60005b600154811015610323576000600182815481106103fd576103fd610a54565b6000918252602090912001546040517f9f9976af0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911691508190639f9976af906104549088908890600401610d4b565b600060405180830381600087803b15801561046e57600080fd5b505af1158015610482573d6000803e3d6000fd5b50505050508060010190506103de565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156104dd5750825b905060008267ffffffffffffffff1660011480156104fa5750303b155b905081158015610508575080155b1561053f576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561057357845468ff00000000000000001916680100000000000000001785555b61057e600087610634565b506105a97ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59887610634565b5083156105fa57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906105f190600190610d80565b60405180910390a15b505050505050565b60008281526020819052604090206001015461061d81610627565b61032383836106de565b6106318133610761565b50565b6000828152602081815260408083206001600160a01b038516845290915281205460ff166106d6576000838152602081815260408083206001600160a01b03861684529091529020805460ff1916600117905561068e3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016102f8565b5060006102f8565b6000828152602081815260408083206001600160a01b038516845290915281205460ff16156106d6576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016102f8565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166107bf5780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016103b1929190610d8e565b5050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b811461063157600080fd5b80356102f8816107c3565b60006020828403121561081257610812600080fd5b61081c83836107f2565b9392505050565b8015155b82525050565b602081016102f88284610823565b806107e7565b80356102f88161083b565b60006020828403121561086157610861600080fd5b61081c8383610841565b80610827565b602081016102f8828461086b565b60006001600160a01b0382166102f8565b6107e78161087f565b80356102f881610890565b600080604083850312156108ba576108ba600080fd5b6108c48484610841565b91506108d38460208501610899565b90509250929050565b60008083601f8401126108f1576108f1600080fd5b50813567ffffffffffffffff81111561090c5761090c600080fd5b60208301915083602082028301111561092757610927600080fd5b9250929050565b6000806020838503121561094457610944600080fd5b823567ffffffffffffffff81111561095e5761095e600080fd5b61096a858286016108dc565b92509250509250929050565b60006020828403121561098b5761098b600080fd5b61081c8383610899565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b039182169190811690828203908111156102f8576102f8610995565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b602080825281016102f8816109ce565b601a8152602081017f4e6f207472616e73616374696f6e7320746f20636f6e76657274000000000000815290506109fc565b602080825281016102f881610a12565b634e487b7160e01b600052603260045260246000fd5b60ff81166107e7565b80356102f881610a6a565b5060006102f86020830183610a73565b60ff8116610827565b5060006102f86020830183610841565b5060006102f86020830183610899565b6108278161087f565b6000808335601e1936859003018112610adb57610adb600080fd5b830160208101925035905067ffffffffffffffff811115610afe57610afe600080fd5b3681900382131561092757610927600080fd5b82818337506000910152565b818352602083019250610b31828483610b11565b50601f01601f19160190565b8015156107e7565b80356102f881610b3d565b5060006102f86020830183610b45565b67ffffffffffffffff81166107e7565b80356102f881610b60565b5060006102f86020830183610b70565b67ffffffffffffffff8116610827565b60006101408301610bac8380610a7e565b610bb68582610a8e565b50610bc46020840184610a97565b610bd1602086018261086b565b50610bdf6040840184610a97565b610bec604086018261086b565b50610bfa6060840184610a97565b610c07606086018261086b565b50610c156080840184610aa7565b610c226080860182610ab7565b50610c3060a0840184610a97565b610c3d60a086018261086b565b50610c4b60c0840184610ac0565b85830360c0870152610c5e838284610b1d565b92505050610c6f60e0840184610aa7565b610c7c60e0860182610ab7565b50610c8b610100840184610b50565b610c99610100860182610823565b50610ca8610120840184610b7b565b610cb6610120860182610b8b565b509392505050565b600061081c8383610b9b565b6000823561013e1936849003018112610ce557610ce5600080fd5b90910192915050565b818352602083019250600083602084028101838060005b87811015610d3e578484038952610d1c8284610cca565b610d268582610cbe565b94505060208201602099909901989150600101610d05565b5091979650505050505050565b60208082528101610d5d818486610cee565b949350505050565b600067ffffffffffffffff82166102f8565b61082781610d65565b602081016102f88284610d77565b60408101610d9c8285610ab7565b61081c602083018461086b56fea2646970667358221220000c7add8ef77f2ce3e54738e1a6216052e3c7d3dfd30f31adc394e073238b4d64736f6c634300081c00336080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610688806100d96000396000f3fe60806040526004361061007f5760003560e01c80639003adfe1161004e5780639003adfe1461012e578063afe997ea14610141578063da35a26f14610156578063f2fde38b1461017657600080fd5b80631a90a2191461008b57806323aa2a9d146100b2578063715018a6146100d45780638da5cb5b146100e957600080fd5b3661008657005b600080fd5b34801561009757600080fd5b506000545b6040516100a99190610544565b60405180910390f35b3480156100be57600080fd5b506100d26100cd366004610570565b610196565b005b3480156100e057600080fd5b506100d26101a3565b3480156100f557600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166040516100a991906105b0565b34801561013a57600080fd5b504761009c565b34801561014d57600080fd5b506100d26101b7565b34801561016257600080fd5b506100d26101713660046105d2565b61021a565b34801561018257600080fd5b506100d261019136600461060a565b610362565b61019e6103bf565b600055565b6101ab6103bf565b6101b56000610433565b565b6101bf6103bf565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015610217573d6000803e3d6000fd5b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156102655750825b905060008267ffffffffffffffff1660011480156102825750303b155b905081158015610290575080155b156102c7576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156102fb57845468ff00000000000000001916680100000000000000001785555b610304866104bc565b6000879055831561035957845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061035090600190610644565b60405180910390a15b50505050505050565b61036a6103bf565b6001600160a01b0381166103b65760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016103ad91906105b0565b60405180910390fd5b61021781610433565b336103f17f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146101b557336040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016103ad91906105b0565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff000000000000000000000000000000000000000081166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6104c46104cd565b61021781610534565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166101b5576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61036a6104cd565b805b82525050565b60208101610552828461053c565b92915050565b805b811461021757600080fd5b803561055281610558565b60006020828403121561058557610585600080fd5b61058f8383610565565b9392505050565b60006001600160a01b038216610552565b61053e81610596565b6020810161055282846105a7565b61055a81610596565b8035610552816105be565b600080604083850312156105e8576105e8600080fd5b6105f28484610565565b915061060184602085016105c7565b90509250929050565b60006020828403121561061f5761061f600080fd5b61058f83836105c7565b600067ffffffffffffffff8216610552565b61053e81610629565b60208101610552828461063b56fea264697066735822122080f0c01e34a6bfd9ed27e9c05c50a018ef9cc6e669f767856b4c30e98b70567764736f6c634300081c0033608060405234801561001057600080fd5b5061001a33610027565b610022610098565b61014a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100e85760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101475780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b611b60806101596000396000f3fe6080604052600436106100d55760003560e01c8063715018a61161007f57806399a3ad211161005957806399a3ad21146102af578063ab53bddc146102cf578063b1454caa146102ef578063f2fde38b1461030f57610149565b8063715018a6146102355780638da5cb5b1461024a5780639730886d1461028f57610149565b8063346633fb116100b0578063346633fb146101e257806336d2da90146101f5578063485cc9551461021557610149565b8062a1b8151461016a5780630fcfbd111461019557806333a88c72146101b557610149565b36610149576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb90349061011a9033908390600401610dea565b6000604051808303818588803b15801561013357600080fd5b505af1158015610147573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161016190610e39565b60405180910390fd5b34801561017657600080fd5b5061017f61032f565b60405161018c9190610e49565b60405180910390f35b3480156101a157600080fd5b5061017f6101b0366004610e72565b6103bb565b3480156101c157600080fd5b506101d56101d0366004610e72565b61041a565b60405161018c9190610eb5565b6101476101f0366004610ef3565b61046c565b34801561020157600080fd5b50610147610210366004610f2b565b6105bb565b34801561022157600080fd5b50610147610230366004610f4a565b61063a565b34801561024157600080fd5b506101476107a5565b34801561025657600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031660405161018c9190610f79565b34801561029b57600080fd5b506101476102aa366004610f87565b6107b9565b3480156102bb57600080fd5b506101476102ca366004610ef3565b610925565b3480156102db57600080fd5b506101476102ea366004610ef3565b6109c5565b6103026102fd366004611050565b610a8e565b60405161018c91906110dd565b34801561031b57600080fd5b5061014761032a366004610f2b565b610b9b565b600354604080517f1a90a21900000000000000000000000000000000000000000000000000000000815290516000926001600160a01b031691631a90a2199160048083019260209291908290030181865afa158015610392573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103b691906110f6565b905090565b600080826040516020016103cf91906112b4565b60408051601f198184030181529181528151602092830120600081815292839052912054909150806104135760405162461bcd60e51b81526004016101619061131f565b9392505050565b6000808260405160200161042e91906112b4565b60408051601f19818403018152918152815160209283012060008181529283905291205490915080158015906104645750428111155b949350505050565b60003411801561047b57508034145b6104975760405162461bcd60e51b815260040161016190611387565b60035434906001600160a01b03161561055b5760006104b461032f565b9050803410156104d65760405162461bcd60e51b8152600401610161906113c7565b6104e081346113ed565b6003546040519193506000916001600160a01b039091169083908381818185875af1925050503d8060008114610532576040519150601f19603f3d011682016040523d82523d6000602084013e610537565b606091505b50509050806105585760405162461bcd60e51b815260040161016190611458565b50505b600061056633610bf2565b9050836001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b684846040516105ad929190611468565b60405180910390a350505050565b6105c3610c50565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610610576040519150601f19603f3d011682016040523d82523d6000602084013e610615565b606091505b50509050806106365760405162461bcd60e51b8152600401610161906114b5565b5050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156106855750825b905060008267ffffffffffffffff1660011480156106a25750303b155b9050811580156106b0575080155b156106e7576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561071b57845468ff00000000000000001916680100000000000000001785555b61072487610cc4565b6003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038816179055831561079c57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290610793906001906114e9565b60405180910390a15b50505050505050565b6107ad610c50565b6107b76000610cd5565b565b60006107c66001306114f7565b90506107f97f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806108205750336001600160a01b038216145b61083c5760405162461bcd60e51b81526004016101619061154c565b6000610848834261155c565b905060008460405160200161085d91906112b4565b60408051601f198184030181529181528151602092830120600081815292839052912054909150156108a15760405162461bcd60e51b8152600401610161906115c7565b6000818152602081815260408220849055600191906108c290880188610f2b565b6001600160a01b0316815260208101919091526040016000908120906108ee60808801606089016115d7565b63ffffffff1681526020808201929092526040016000908120805460018101825590825291902086916004020161079c8282611a31565b61092d610c50565b8047101561094d5760405162461bcd60e51b8152600401610161906113c7565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461099a576040519150601f19603f3d011682016040523d82523d6000602084013e61099f565b606091505b50509050806109c05760405162461bcd60e51b8152600401610161906114b5565b505050565b60006109d26001306114f7565b9050610a057f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b03161480610a2c5750336001600160a01b038216145b610a485760405162461bcd60e51b81526004016101619061154c565b826001600160a01b03167fcd9850463422a7449c406a036e35e5edb6fbe35a64c9f12a2354be98a750c0d383604051610a819190610e49565b60405180910390a2505050565b6003546000906001600160a01b031615610b44576000610aac61032f565b905080341015610ace5760405162461bcd60e51b815260040161016190611a93565b6003546040516000916001600160a01b03169083908381818185875af1925050503d8060008114610b1b576040519150601f19603f3d011682016040523d82523d6000602084013e610b20565b606091505b5050905080610b415760405162461bcd60e51b815260040161016190611458565b50505b610b4d33610bf2565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef77593733828888888888604051610b8a9796959493929190611aa3565b60405180910390a195945050505050565b610ba3610c50565b6001600160a01b038116610be65760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016101619190610f79565b610bef81610cd5565b50565b6001600160a01b0381166000908152600260205260408120805467ffffffffffffffff169160019190610c258385611b06565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b33610c827f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146107b757336040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016101619190610f79565b610ccc610d53565b610bef81610dba565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166107b7576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ba3610d53565b60006001600160a01b0382165b92915050565b610dde81610dc2565b82525050565b80610dde565b60408101610df88285610dd5565b6104136020830184610de4565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b60208082528101610dcf81610e05565b60208101610dcf8284610de4565b600060c08284031215610e6c57610e6c600080fd5b50919050565b600060208284031215610e8757610e87600080fd5b813567ffffffffffffffff811115610ea157610ea1600080fd5b61046484828501610e57565b801515610dde565b60208101610dcf8284610ead565b610ecc81610dc2565b8114610bef57600080fd5b8035610dcf81610ec3565b80610ecc565b8035610dcf81610ee2565b60008060408385031215610f0957610f09600080fd5b610f138484610ed7565b9150610f228460208501610ee8565b90509250929050565b600060208284031215610f4057610f40600080fd5b6104138383610ed7565b60008060408385031215610f6057610f60600080fd5b610f6a8484610ed7565b9150610f228460208501610ed7565b60208101610dcf8284610dd5565b60008060408385031215610f9d57610f9d600080fd5b823567ffffffffffffffff811115610fb757610fb7600080fd5b610fc385828601610e57565b925050610f228460208501610ee8565b63ffffffff8116610ecc565b8035610dcf81610fd3565b60008083601f840112610fff57610fff600080fd5b50813567ffffffffffffffff81111561101a5761101a600080fd5b60208301915083600182028301111561103557611035600080fd5b9250929050565b60ff8116610ecc565b8035610dcf8161103c565b60008060008060006080868803121561106b5761106b600080fd5b6110758787610fdf565b94506110848760208801610fdf565b9350604086013567ffffffffffffffff8111156110a3576110a3600080fd5b6110af88828901610fea565b93509350506110c18760608801611045565b90509295509295909350565b67ffffffffffffffff8116610dde565b60208101610dcf82846110cd565b8051610dcf81610ee2565b60006020828403121561110b5761110b600080fd5b61041383836110eb565b506000610dcf6020830183610ed7565b67ffffffffffffffff8116610ecc565b8035610dcf81611125565b506000610dcf6020830183611135565b506000610dcf6020830183610fdf565b63ffffffff8116610dde565b6000808335601e193685900301811261118757611187600080fd5b830160208101925035905067ffffffffffffffff8111156111aa576111aa600080fd5b3681900382131561103557611035600080fd5b82818337506000910152565b8183526020830192506111dd8284836111bd565b50601f01601f19160190565b506000610dcf6020830183611045565b60ff8116610dde565b600060c083016112128380611115565b61121c8582610dd5565b5061122a6020840184611140565b61123760208601826110cd565b506112456040840184611150565b6112526040860182611160565b506112606060840184611150565b61126d6060860182611160565b5061127b608084018461116c565b858303608087015261128e8382846111c9565b9250505061129f60a08401846111e9565b6112ac60a08601826111f9565b509392505050565b602080825281016104138184611202565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d697474656481527f2e00000000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b60208082528101610dcf816112c5565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e672045746865720000000000000000000000000000000060208201529050611319565b60208082528101610dcf8161132f565b60208082527f496e73756666696369656e742066756e647320746f2073656e642076616c75659101908152610e33565b60208082528101610dcf81611397565b634e487b7160e01b600052601160045260246000fd5b81810381811115610dcf57610dcf6113d7565b60248152602081017f4661696c656420746f2073656e64206665657320746f206665657320636f6e7481527f726163740000000000000000000000000000000000000000000000000000000060208201529050611319565b60208082528101610dcf81611400565b604081016114768285610de4565b61041360208301846110cd565b60148152602081017f6661696c65642073656e64696e672076616c756500000000000000000000000081529050610e33565b60208082528101610dcf81611483565b6000610dcf826114d3565b90565b67ffffffffffffffff1690565b610dde816114c5565b60208101610dcf82846114e0565b6001600160a01b03918216919081169082820390811115610dcf57610dcf6113d7565b60118152602081017f4e6f74206f776e6572206f722073656c6600000000000000000000000000000081529050610e33565b60208082528101610dcf8161151a565b80820180821115610dcf57610dcf6113d7565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f210000000000000000000000000000000000000000000000000000000000000060208201529050611319565b60208082528101610dcf8161156f565b6000602082840312156115ec576115ec600080fd5b6104138383610fdf565b60008135610dcf81610ec3565b60006001600160a01b03835b81169019929092169190911792915050565b60006001600160a01b038216610dcf565b6000610dcf82611621565b6000610dcf82611632565b6116518261163d565b61165c818354611603565b8255505050565b60008135610dcf81611125565b60007bffffffffffffffff000000000000000000000000000000000000000061160f8460a01b90565b6000610dcf67ffffffffffffffff83166114d3565b6116b782611699565b61165c818354611670565b60008135610dcf81610fd3565b60007fffffffff0000000000000000000000000000000000000000000000000000000061160f8460e01b90565b600063ffffffff8216610dcf565b611713826116fc565b61165c8183546116cf565b600063ffffffff8361160f565b611734826116fc565b61165c81835461171e565b6000808335601e193685900301811261175a5761175a600080fd5b8301915050803567ffffffffffffffff81111561177957611779600080fd5b60208201915060018102360382131561103557611035600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b6002810460018216806117d457607f821691505b602082108103610e6c57610e6c6117aa565b6000610dcf6114d08381565b6117fb836117e6565b815460001960089490940293841b1916921b91909117905550565b60006109c08184846117f2565b8181101561063657611836600082611816565b600101611823565b601f8211156109c0576000818152602090206020601f850104810160208510156118655750805b6118776020601f860104830182611823565b5050505050565b8267ffffffffffffffff81111561189757611897611794565b6118a182546117c0565b6118ac82828561183e565b506000601f8211600181146118e157600083156118c95750848201355b600019600885021c198116600285021785555061193b565b600084815260209020601f19841690835b8281101561191257878501358255602094850194600190920191016118f2565b508482101561192f576000196008601f8716021c19878501351681555b50506001600284020184555b505050505050565b6109c083838361187e565b60008135610dcf8161103c565b600060ff8216610dcf565b61196f8261195b565b815460ff191660ff82161761165c565b80828061198b816115f6565b90506119978184611648565b505060208301806119a782611663565b90506119b381846116ae565b505060408301806119c3826116c2565b90506119cf818461170a565b50505060608201806119e0826116c2565b90506119ef816001850161172b565b50506119fe608083018361173f565b611a0c818360028601611943565b505060a0820180611a1c8261194e565b9050611a2b8160038501611966565b50505050565b610636828261197f565b60258152602081017f496e73756666696369656e742066756e647320746f207075626c697368206d6581527f737361676500000000000000000000000000000000000000000000000000000060208201529050611319565b60208082528101610dcf81611a3b565b60c08101611ab1828a610dd5565b611abe60208301896110cd565b611acb6040830188611160565b611ad86060830187611160565b8181036080830152611aeb8185876111c9565b9050611afa60a08301846111f9565b98975050505050505050565b67ffffffffffffffff918216919081169082820190811115610dcf57610dcf6113d756fea2646970667358221220f95f53578abddab4dbfcba4e38ed51470d4d4cbc31b23b532e46b0005f46de4b64736f6c634300081c00336080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b611022806100d96000396000f3fe6080604052600436106100595760003560e01c806382fbdc9c1161004357806382fbdc9c146100ae578063929d34e9146100ce578063a67e1760146100ee57600080fd5b8062e0d3b51461005e5780638129fc1c14610097575b600080fd5b34801561006a57600080fd5b5061007e610079366004610a85565b610103565b60405161008e9493929190610b20565b60405180910390f35b3480156100a357600080fd5b506100ac6101be565b005b6100c16100bc366004610bb7565b610300565b60405161008e9190610bff565b3480156100da57600080fd5b506100ac6100e9366004610a85565b610368565b3480156100fa57600080fd5b506100ac61050d565b600060208190529081526040902080546001820180546001600160a01b03909216929161012f90610c23565b80601f016020809104026020016040519081016040528092919081815260200182805461015b90610c23565b80156101a85780601f1061017d576101008083540402835291602001916101a8565b820191906000526020600020905b81548152906001019060200180831161018b57829003601f168201915b5050505050908060020154908060030154905084565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156102095750825b905060008267ffffffffffffffff1660011480156102265750303b155b905081158015610234575080155b1561026b576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561029f57845468ff00000000000000001916680100000000000000001785555b6000600181905560025583156102f957845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906102f090600190610c73565b60405180910390a15b5050505050565b600080341161032a5760405162461bcd60e51b815260040161032190610cb5565b60405180910390fd5b6152086103363461055f565b116103535760405162461bcd60e51b815260040161032190610cc5565b61035f3384843461056b565b90505b92915050565b60008181526020818152604080832081516080810190925280546001600160a01b0316825260018101805492939192918401916103a490610c23565b80601f01602080910402602001604051908101604052809291908181526020018280546103d090610c23565b801561041d5780601f106103f25761010080835404028352916020019161041d565b820191906000526020600020905b81548152906001019060200180831161040057829003601f168201915b50505050508152602001600282015481526020016003820154815250509050600081600001516001600160a01b0316826020015160405161045e9190610d48565b6000604051808303816000865af19150503d806000811461049b576040519150601f19603f3d011682016040523d82523d6000602084013e6104a0565b606091505b50509050806104c15760405162461bcd60e51b815260040161032190610d84565b6000838152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff19168155906104f86001830182610a30565b50600060028201819055600390910155505050565b600061051a600130610daa565b9050336001600160a01b038216146105445760405162461bcd60e51b815260040161032190610dff565b6002546001541461055c57610557610655565b610544565b50565b60006103624883610e25565b600060015490506040518060800160405280866001600160a01b0316815260200185858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509385525050506020820185905248604090920191909152600180548291826105e583610e39565b9091555081526020808201929092526040016000208251815473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039091161781559082015160018201906106369082610f02565b5060408201516002820155606090910151600390910155949350505050565b6002546001540361066257565b60008061066d610780565b91509150600082606001519050600081846040015161068c9190610e25565b905060005a9050600085600001516001600160a01b03168387602001516040516106b69190610d48565b60006040518083038160008787f1925050503d80600081146106f4576040519150601f19603f3d011682016040523d82523d6000602084013e6106f9565b606091505b5050905060005a9050600061070e8285610fc2565b905060008186111561073257866107258388610fc2565b61072f9190610fd5565b90505b6000818a604001516107449190610fc2565b8a51909150851561075757610757610898565b61075f6108e4565b61076a83828c6108fb565b610773826109da565b5050505050505050505050565b6107b4604051806080016040528060006001600160a01b031681526020016060815260200160008152602001600081525090565b60025460008181526020818152604080832081516080810190925280546001600160a01b03168252600181018054949591949193859290840191906107f890610c23565b80601f016020809104026020016040519081016040528092919081815260200182805461082490610c23565b80156108715780601f1061084657610100808354040283529160200191610871565b820191906000526020600020905b81548152906001019060200180831161085457829003601f168201915b50505050508152602001600282015481526020016003820154815250509150915091509091565b6002546000908152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff19168155906108d26001830182610a30565b50600060028201819055600390910155565b600280549060006108f483610e39565b9190505550565b60008160405160240161090e9190610bff565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f5ea3955800000000000000000000000000000000000000000000000000000000179052519091506000906001600160a01b0385169061afc8908790610989908690610d48565b600060405180830381858888f193505050503d80600081146109c7576040519150601f19603f3d011682016040523d82523d6000602084013e6109cc565b606091505b50509050806102f9576102f9855b806000036109e55750565b60405141908290600081818185875af1925050503d8060008114610a25576040519150601f19603f3d011682016040523d82523d6000602084013e610a2a565b606091505b50505050565b508054610a3c90610c23565b6000825580601f10610a4c575050565b601f01602090049060005260206000209081019061055c91905b80821115610a7a5760008155600101610a66565b5090565b8035610362565b600060208284031215610a9a57610a9a600080fd5b61035f8383610a7e565b60006001600160a01b038216610362565b610abe81610aa4565b82525050565b60005b83811015610adf578181015183820152602001610ac7565b50506000910152565b6000610af2825190565b808452602084019350610b09818560208601610ac4565b601f01601f19169290920192915050565b80610abe565b60808101610b2e8287610ab5565b8181036020830152610b408186610ae8565b9050610b4f6040830185610b1a565b610b5c6060830184610b1a565b95945050505050565b60008083601f840112610b7a57610b7a600080fd5b50813567ffffffffffffffff811115610b9557610b95600080fd5b602083019150836001820283011115610bb057610bb0600080fd5b9250929050565b60008060208385031215610bcd57610bcd600080fd5b823567ffffffffffffffff811115610be757610be7600080fd5b610bf385828601610b65565b92509250509250929050565b602081016103628284610b1a565b634e487b7160e01b600052602260045260246000fd5b600281046001821680610c3757607f821691505b602082108103610c4957610c49610c0d565b50919050565b600061036282610c5d565b90565b67ffffffffffffffff1690565b610abe81610c4f565b602081016103628284610c6a565b600d8152602081017f4e6f2076616c75652073656e7400000000000000000000000000000000000000815290505b60200190565b6020808252810161036281610c81565b6020808252810161036281602481527f47617320746f6f206c6f7720636f6d706172656420746f20636f7374206f662060208201527f63616c6c00000000000000000000000000000000000000000000000000000000604082015260600190565b6000610d30825190565b610d3e818560208601610ac4565b9290920192915050565b6103628183610d26565b60198152602081017f43616c6c6261636b20657865637574696f6e206661696c65640000000000000081529050610caf565b6020808252810161036281610d52565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0391821691908116908282039081111561036257610362610d94565b60088152602081017f4e6f742073656c6600000000000000000000000000000000000000000000000081529050610caf565b6020808252810161036281610dcd565b634e487b7160e01b600052601260045260246000fd5b600082610e3457610e34610e0f565b500490565b600060018201610e4b57610e4b610d94565b5060010190565b634e487b7160e01b600052604160045260246000fd5b6000610362610c5a8381565b610e7d83610e68565b815460001960089490940293841b1916921b91909117905550565b6000610ea5818484610e74565b505050565b81811015610ec557610ebd600082610e98565b600101610eaa565b5050565b601f821115610ea5576000818152602090206020601f85010481016020851015610ef05750805b6102f96020601f860104830182610eaa565b815167ffffffffffffffff811115610f1c57610f1c610e52565b610f268254610c23565b610f31828285610ec9565b506020601f821160018114610f665760008315610f4e5750848201515b600019600885021c19811660028502178555506102f9565b600084815260208120601f198516915b82811015610f965787850151825560209485019460019092019101610f76565b5084821015610fb35783870151600019601f87166008021c191681555b50505050600202600101905550565b8181038181111561036257610362610d94565b818102811582820484141761036257610362610d9456fea2646970667358221220a7b27c0c1863d6c0b2486c73ffa2a4592563ec57aeb866a59c97b817f532293064736f6c634300081c003360a060405260405161128a38038061128a8339810160408190526100229161046a565b828161002e8282610089565b50508160405161003d9061031d565b61004791906104df565b604051809103906000f080158015610063573d6000803e3d6000fd5b506001600160a01b031660805261008161007c60805190565b6100e8565b505050610534565b6100928261014b565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156100dc576100d782826101c5565b505050565b6100e461023e565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61012860008051602061126a833981519152546001600160a01b031690565b826040516101379291906104ed565b60405180910390a16101488161025f565b50565b806001600160a01b03163b6000036101815780604051634c9c8ce360e01b815260040161017891906104df565b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b0316846040516101e2919061052a565b600060405180830381855af49150503d806000811461021d576040519150601f19603f3d011682016040523d82523d6000602084013e610222565b606091505b50909250905061023385838361029e565b925050505b92915050565b341561025d5760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116610289576000604051633173bdd160e11b815260040161017891906104df565b8060008051602061126a8339815191526101a4565b6060826102b3576102ae826102f4565b6102ed565b81511580156102ca57506001600160a01b0384163b155b156102ea5783604051639996b31560e01b815260040161017891906104df565b50805b9392505050565b8051156103045780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6106eb80610b7f83390190565b60006001600160a01b038216610238565b6103448161032a565b811461014857600080fd5b80516102388161033b565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b03811182821017156103955761039561035a565b6040525050565b60006103a760405190565b90506103b38282610370565b919050565b60006001600160401b038211156103d1576103d161035a565b601f19601f83011660200192915050565b60005b838110156103fd5781810151838201526020016103e5565b50506000910152565b6000610419610414846103b8565b61039c565b905082815283838301111561043057610430600080fd5b6102ed8360208301846103e2565b600082601f83011261045257610452600080fd5b8151610462848260208601610406565b949350505050565b60008060006060848603121561048257610482600080fd5b61048c858561034f565b925061049b856020860161034f565b60408501519092506001600160401b038111156104ba576104ba600080fd5b6104c68682870161043e565b9150509250925092565b6104d98161032a565b82525050565b6020810161023882846104d0565b604081016104fb82856104d0565b6102ed60208301846104d0565b6000610512825190565b6105208185602086016103e2565b9290920192915050565b6102388183610508565b60805161063161054e6000396000601001526106316000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100c5576000357fffffffff00000000000000000000000000000000000000000000000000000000167f4f1ef28600000000000000000000000000000000000000000000000000000000146100bb576040517fd2b576ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6100c36100cd565b565b6100c36100fc565b6000806100dd36600481846103cf565b8101906100ea9190610539565b915091506100f8828261010c565b5050565b6100c3610107610167565b61019f565b610115826101c3565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561015f5761015a828261026b565b505050565b6100f86102e3565b600061019a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156101be573d6000f35b3d6000fd5b806001600160a01b03163b60000361021257806040517f4c9c8ce3000000000000000000000000000000000000000000000000000000008152600401610209919061059d565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161028891906105f1565b600060405180830381855af49150503d80600081146102c3576040519150601f19603f3d011682016040523d82523d6000602084013e6102c8565b606091505b50915091506102d885838361031b565b925050505b92915050565b34156100c3576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826103305761032b8261038a565b610383565b815115801561034757506001600160a01b0384163b155b1561038057836040517f9996b315000000000000000000000000000000000000000000000000000000008152600401610209919061059d565b50805b9392505050565b80511561039a5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600080858511156103e2576103e2600080fd5b838611156103f2576103f2600080fd5b5050820193919092039150565b60006001600160a01b0382166102dd565b610419816103ff565b81146103cc57600080fd5b80356102dd81610410565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff821117156104845761048461042f565b6040525050565b600061049660405190565b90506104a2828261045e565b919050565b600067ffffffffffffffff8211156104c1576104c161042f565b601f19601f83011660200192915050565b82818337506000910152565b60006104f16104ec846104a7565b61048b565b905082815283838301111561050857610508600080fd5b6103838360208301846104d2565b600082601f83011261052a5761052a600080fd5b610383838335602085016104de565b6000806040838503121561054f5761054f600080fd5b6105598484610424565b9150602083013567ffffffffffffffff81111561057857610578600080fd5b61058485828601610516565b9150509250929050565b610597816103ff565b82525050565b602081016102dd828461058e565b60005b838110156105c65781810151838201526020016105ae565b50506000910152565b60006105d9825190565b6105e78185602086016105ab565b9290920192915050565b6102dd81836105cf56fea264697066735822122010d1880687d5a44f0a558c272f84fabbd9bf65d697170ee3f6681c2467feb26164736f6c634300081c0033608060405234801561001057600080fd5b506040516106eb3803806106eb83398101604081905261002f916100f8565b806001600160a01b038116610063576000604051631e4fbdf760e01b815260040161005a919061012d565b60405180910390fd5b61006c81610073565b505061013b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6100df816100c3565b81146100ea57600080fd5b50565b80516100d0816100d6565b60006020828403121561010d5761010d600080fd5b61011783836100ed565b9392505050565b610127816100c3565b82525050565b602081016100d0828461011e565b6105a18061014a6000396000f3fe60806040526004361061005a5760003560e01c80639623609d116100435780639623609d146100a5578063ad3cb1cc146100b8578063f2fde38b1461010e57600080fd5b8063715018a61461005f5780638da5cb5b14610076575b600080fd5b34801561006b57600080fd5b5061007461012e565b005b34801561008257600080fd5b506000546001600160a01b031660405161009c91906102fa565b60405180910390f35b6100746100b3366004610457565b610142565b3480156100c457600080fd5b506101016040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161009c9190610513565b34801561011a57600080fd5b50610074610129366004610524565b6101ca565b61013661022a565b6101406000610270565b565b61014a61022a565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef2869034906101939086908690600401610543565b6000604051808303818588803b1580156101ac57600080fd5b505af11580156101c0573d6000803e3d6000fd5b5050505050505050565b6101d261022a565b6001600160a01b03811661021e5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b60405180910390fd5b61022781610270565b50565b6000546001600160a01b0316331461014057336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6102f4816102d8565b82525050565b602081016102e582846102eb565b60006102e5826102d8565b61031c81610308565b811461022757600080fd5b80356102e581610313565b61031c816102d8565b80356102e581610332565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff8211171561039b5761039b610346565b6040525050565b60006103ad60405190565b90506103b98282610375565b919050565b600067ffffffffffffffff8211156103d8576103d8610346565b601f19601f83011660200192915050565b82818337506000910152565b6000610408610403846103be565b6103a2565b905082815283838301111561041f5761041f600080fd5b61042d8360208301846103e9565b9392505050565b600082601f83011261044857610448600080fd5b61042d838335602085016103f5565b60008060006060848603121561046f5761046f600080fd5b6104798585610327565b9250610488856020860161033b565b9150604084013567ffffffffffffffff8111156104a7576104a7600080fd5b6104b386828701610434565b9150509250925092565b60005b838110156104d85781810151838201526020016104c0565b50506000910152565b60006104eb825190565b8084526020840193506105028185602086016104bd565b601f01601f19169290920192915050565b6020808252810161042d81846104e1565b60006020828403121561053957610539600080fd5b61042d838361033b565b6040810161055182856102eb565b818103602083015261056381846104e1565b94935050505056fea264697066735822122096c3a562b6861bd964d97d99d95931f7343ac03c64bc04aeab6287f6e42e45eb64736f6c634300081c0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103bd64e14789a915ea657e42f2dbf0b973227708fa64b58766287637985d1ade69", } // SystemDeployerABI is the input ABI used to generate the binding from. diff --git a/contracts/src/management/ManagementContract.sol b/contracts/src/management/ManagementContract.sol index f22751fed0..beec461ccb 100644 --- a/contracts/src/management/ManagementContract.sol +++ b/contracts/src/management/ManagementContract.sol @@ -65,7 +65,6 @@ contract ManagementContract is Initializable, OwnableUpgradeable { function initialize() public initializer { __Ownable_init(msg.sender); lastBatchSeqNo = 0; - rollups.nextFreeSequenceNumber = 1; // rollup 0 == nil hash merkleMessageBus = new MerkleTreeMessageBus.MerkleTreeMessageBus(); messageBus = MessageBus.IMessageBus(address(merkleMessageBus)); @@ -77,30 +76,9 @@ contract ManagementContract is Initializable, OwnableUpgradeable { return (rol.Hash == rollupHash , rol); } - function GetRollupByNumber(uint256 number) view public returns(bool, Structs.MetaRollup memory) { - bytes32 hash = rollups.byOrder[number]; - if (hash == 0x0) { // ensure we don't try to get rollup for hash zero as that would not pull anything, but the hash would match and return true - return (false, Structs.MetaRollup(0x0, "", 0)); - } - - return GetRollupByHash(hash); - } - - function GetUniqueForkID(uint256 number) view public returns(bytes32, Structs.MetaRollup memory) { - (bool success, Structs.MetaRollup memory rollup) = GetRollupByNumber(number); - if (!success) { - return (0x0, rollup); - } - - return (rollups.toUniqueForkID[number], rollup); - } - function AppendRollup(Structs.MetaRollup calldata _r) internal { rollups.byHash[_r.Hash] = _r; - rollups.byOrder[rollups.nextFreeSequenceNumber] = _r.Hash; - rollups.toUniqueForkID[rollups.nextFreeSequenceNumber] = keccak256(abi.encode(_r.Hash, blockhash(block.number-1))); - rollups.nextFreeSequenceNumber++; - + if (_r.LastSequenceNumber > lastBatchSeqNo) { lastBatchSeqNo = _r.LastSequenceNumber; } @@ -116,32 +94,6 @@ contract ManagementContract is Initializable, OwnableUpgradeable { return isBundleSaved[bundleHash]; } - function addCrossChainMessagesRoot(bytes32 _lastBatchHash, bytes32 providedBlockHash, uint256 blockNum, bytes[] memory crossChainHashes, bytes calldata signature, uint256 rollupNumber, bytes32 forkID) external { - require(block.number < (blockNum + 255), "Block binding too old"); - require(block.number != blockNum, "Cannot bind to the block that is being currently mined"); - - bytes32 knownBlockHash = blockhash(blockNum); - require(knownBlockHash != 0x0, "Unknown block hash"); - require(knownBlockHash == providedBlockHash, "Block binding mismatch"); - require(rollups.toUniqueForkID[rollupNumber] == forkID, "Invalid forkID"); - - address enclaveID = ECDSA.recover(keccak256(abi.encode(_lastBatchHash, providedBlockHash, blockNum, crossChainHashes)), signature); - require(sequencerEnclave[enclaveID], "address not a sequencer"); - - lastBatchHash = _lastBatchHash; - - bytes32 bundleHash = bytes32(0); - - for(uint256 i = 0; i < crossChainHashes.length; i++) { - merkleMessageBus.addStateRoot( - bytes32(crossChainHashes[i]), block.timestamp + challengePeriod - ); - bundleHash = keccak256(abi.encode(bundleHash, bytes32(crossChainHashes[i]))); - } - - isBundleSaved[bundleHash] = true; - } - function pushCrossChainMessages(Structs.HeaderCrossChainData calldata crossChainData) internal { uint256 messagesLength = crossChainData.messages.length; for (uint256 i = 0; i < messagesLength; ++i) { @@ -149,15 +101,23 @@ contract ManagementContract is Initializable, OwnableUpgradeable { } } - // solc-ignore-next-line unused-param - function AddRollup(Structs.MetaRollup calldata r) public { + modifier signedBySequencerEnclave(Structs.MetaRollup calldata r) { + //todo - handle the cross chain root in the signature address enclaveID = ECDSA.recover(r.Hash, r.Signature); // revert if the EnclaveID is not attested require(attested[enclaveID], "enclaveID not attested"); // revert if the EnclaveID is not permissioned as a sequencer require(sequencerEnclave[enclaveID], "enclaveID not a sequencer"); + _; + } + // solc-ignore-next-line unused-param + function AddRollup(Structs.MetaRollup calldata r) public signedBySequencerEnclave(r) { AppendRollup(r); + + if (r.crossChainRoot != bytes32(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)) { + merkleMessageBus.addStateRoot(r.crossChainRoot, block.timestamp); + } emit RollupAdded(r.Hash); } diff --git a/contracts/src/management/Structs.sol b/contracts/src/management/Structs.sol index 336fed12a1..0d7931acb6 100644 --- a/contracts/src/management/Structs.sol +++ b/contracts/src/management/Structs.sol @@ -8,12 +8,14 @@ interface Structs { bytes32 Hash; bytes Signature; uint256 LastSequenceNumber; + + bytes32 BlockBindingHash; + uint256 BlockBindingNumber; + bytes32 crossChainRoot; } struct RollupStorage { mapping(bytes32=>MetaRollup) byHash; - mapping(uint256=>bytes32) byOrder; - mapping(uint256=>bytes32) toUniqueForkID; uint256 nextFreeSequenceNumber; } diff --git a/contracts/src/messaging/MessageBus.sol b/contracts/src/messaging/MessageBus.sol index ff36bc7399..2a25ceab6d 100644 --- a/contracts/src/messaging/MessageBus.sol +++ b/contracts/src/messaging/MessageBus.sol @@ -71,6 +71,7 @@ contract MessageBus is IMessageBus, Initializable, OwnableUpgradeable { address receiver, uint256 amount ) external onlyOwner { + require(address(this).balance >= amount, "Insufficient funds to send value"); (bool ok, ) = receiver.call{value: amount}(""); require(ok, "failed sending value"); } diff --git a/go/common/enclave.go b/go/common/enclave.go index 2cb340fd4c..9548a3d50e 100644 --- a/go/common/enclave.go +++ b/go/common/enclave.go @@ -146,6 +146,7 @@ type Enclave interface { type BlockSubmissionResponse struct { ProducedSecretResponses []*ProducedSecretResponse // The responses to any secret requests in the ingested L1 block. RejectError *errutil.BlockRejectError // If block was rejected, contains information about what block to submit next. + RollupMetadata []ExtRollupMetadata // Metadata for each rollup that the host needs to prepare APIs } // ProducedSecretResponse contains the data to publish to L1 in response to a secret request discovered while processing an L1 block diff --git a/go/common/errutil/errors_util.go b/go/common/errutil/errors_util.go index df88448282..0307637637 100644 --- a/go/common/errutil/errors_util.go +++ b/go/common/errutil/errors_util.go @@ -29,6 +29,7 @@ var ( ErrRollupForkMismatch = errors.New("rollup fork mismatch") ErrNoBundleToPublish = errors.New("no bundle to publish") ErrBlockBindingMismatch = errors.New("Block binding mismatch") + ErrCrossChainRootMismatch = errors.New("cross chain root mismatch") ) // BlockRejectError is used as a standard format for error response from enclave for block submission errors diff --git a/go/common/headers.go b/go/common/headers.go index 9cc5940e3b..05480edf3c 100644 --- a/go/common/headers.go +++ b/go/common/headers.go @@ -161,12 +161,15 @@ func (b *BatchHeader) UnmarshalJSON(data []byte) error { // RollupHeader is a public / plaintext struct that holds common properties of rollups. // All these fields are processed by the Management contract type RollupHeader struct { - CompressionL1Head L1BlockHash // the l1 block that the sequencer considers canonical at the time when this rollup is created - - PayloadHash common.Hash // The hash of the compressed batches. TODO - Signature []byte // The signature of the sequencer enclave on the payload hash + // CompressionL1Head is the reference L1 block. If a rollup is published in a fork where it does not exist, the rollup will not be decomperssible + // by validators who only use the L1 as a DA, thus upon submission if this block is not found the rollup should be invalid. + CompressionL1Head L1BlockHash + CompressionL1Number *big.Int + CrossChainRoot common.Hash // The root hash of the cross chain tree. LastBatchSeqNo uint64 + + Signature []byte // The signature of the sequencer enclave on the payload hash } // CalldataRollupHeader contains all information necessary to reconstruct the batches included in the rollup. diff --git a/go/common/host/services.go b/go/common/host/services.go index f0464d2b9e..863fc3083b 100644 --- a/go/common/host/services.go +++ b/go/common/host/services.go @@ -117,9 +117,6 @@ type L1Publisher interface { GetImportantContracts() map[string]gethcommon.Address // ResyncImportantContracts will fetch the latest important contracts from the management contract, update the cache ResyncImportantContracts() error - - // GetBundleRangeFromManagementContract returns the range of batches for which to build a bundle - GetBundleRangeFromManagementContract(lastRollupNumber *big.Int, lastRollupUID gethcommon.Hash) (*gethcommon.Hash, *big.Int, *big.Int, error) } // L2BatchRepository provides an interface for the host to request L2 batch data (live-streaming and historical) diff --git a/go/common/merkle/merkle.go b/go/common/merkle/merkle.go new file mode 100644 index 0000000000..7724542439 --- /dev/null +++ b/go/common/merkle/merkle.go @@ -0,0 +1,55 @@ +package merkle + +import ( + "encoding/json" + "fmt" + + smt "github.com/FantasyJony/openzeppelin-merkle-tree-go/standard_merkle_tree" + gethcommon "github.com/ethereum/go-ethereum/common" + "github.com/ten-protocol/go-ten/go/common" + "github.com/ten-protocol/go-ten/go/enclave/crosschain" +) + +func UnmarshalCrossChainTree(serializedTree common.SerializedCrossChainTree) ([][]interface{}, error) { + xchainTree := make([][]interface{}, 0) // ["v", "0xblablablabla"] + err := json.Unmarshal(serializedTree, &xchainTree) + if err != nil { + return nil, err + } + + for k, value := range xchainTree { + xchainTree[k][1] = gethcommon.HexToHash(value[1].(string)) + } + return xchainTree, nil +} + +func ComputeCrossChainRootFromBatches(batches []*common.BatchHeader) (gethcommon.Hash, common.SerializedCrossChainTree, error) { + xchainTrees := make([][]interface{}, 0) + for _, batch := range batches { + if len(batch.CrossChainTree) == 0 { + // Batch with no outbound messages; nothing to do. + continue + } + xchainTree, err := UnmarshalCrossChainTree(batch.CrossChainTree) + if err != nil { + return gethcommon.MaxHash, nil, fmt.Errorf("failed to unmarshal cross chain tree: %w", err) + } + xchainTrees = append(xchainTrees, xchainTree...) + } + + if len(xchainTrees) == 0 { + return gethcommon.MaxHash, nil, nil + } + + tree, err := smt.Of(xchainTrees, crosschain.CrossChainEncodings) + if err != nil { + return gethcommon.MaxHash, nil, fmt.Errorf("failed to create tree: %w", err) + } + + serializedTree, err := json.Marshal(xchainTrees) + if err != nil { + return gethcommon.MaxHash, nil, err + } + + return gethcommon.Hash(tree.GetRoot()), serializedTree, nil +} diff --git a/go/common/rollups.go b/go/common/rollups.go index 73d64458ee..933b79f6b8 100644 --- a/go/common/rollups.go +++ b/go/common/rollups.go @@ -12,6 +12,13 @@ type ExtRollup struct { hash atomic.Value } +// ExtRollupMetadata metadata that should not be in the rollup, but rather is derived from one. +// This should all be public information as it is passed back to the host! +type ExtRollupMetadata struct { + CrossChainTree []byte //All the elements of the cross chain tree when building the rollup; Host uses this for serving cross chain proofs; + //todo: Move signature here maybe? +} + // Hash returns the keccak256 hash of the rollup's header. // The hash is computed on the first call and cached thereafter. func (r *ExtRollup) Hash() L2RollupHash { diff --git a/go/common/rpc/converters.go b/go/common/rpc/converters.go index 0e8750aebb..eb2b854ff6 100644 --- a/go/common/rpc/converters.go +++ b/go/common/rpc/converters.go @@ -27,18 +27,6 @@ func FromAttestationReportMsg(msg *generated.AttestationReportMsg) *common.Attes } } -func ToBlockSubmissionResponseMsg(response *common.BlockSubmissionResponse) (*generated.BlockSubmissionResponseMsg, error) { - if response == nil { - return nil, fmt.Errorf("no response that could be converted to a message") - } - - msg := &generated.BlockSubmissionResponseMsg{ - ProducedSecretResponses: ToSecretRespMsg(response.ProducedSecretResponses), - } - - return msg, nil -} - func ToSecretRespMsg(responses []*common.ProducedSecretResponse) []*generated.SecretResponseMsg { respMsgs := make([]*generated.SecretResponseMsg, len(responses)) @@ -70,9 +58,33 @@ func FromSecretRespMsg(secretResponses []*generated.SecretResponseMsg) []*common return respList } +func ToBlockSubmissionResponseMsg(response *common.BlockSubmissionResponse) (*generated.BlockSubmissionResponseMsg, error) { + if response == nil { + return nil, fmt.Errorf("no response that could be converted to a message") + } + + msg := &generated.BlockSubmissionResponseMsg{ + ProducedSecretResponses: ToSecretRespMsg(response.ProducedSecretResponses), + } + for _, metadata := range response.RollupMetadata { + msg.RollupMetadata = append(msg.RollupMetadata, &generated.ExtRollupMetadataResponseMsg{ + CrossChainTree: metadata.CrossChainTree, + }) + } + + return msg, nil +} + func FromBlockSubmissionResponseMsg(msg *generated.BlockSubmissionResponseMsg) (*common.BlockSubmissionResponse, error) { + rollupMetadata := make([]common.ExtRollupMetadata, len(msg.RollupMetadata)) + for i, metadata := range msg.RollupMetadata { + rollupMetadata[i] = common.ExtRollupMetadata{ + CrossChainTree: metadata.CrossChainTree, + } + } return &common.BlockSubmissionResponse{ ProducedSecretResponses: FromSecretRespMsg(msg.ProducedSecretResponses), + RollupMetadata: rollupMetadata, }, nil } @@ -129,7 +141,7 @@ func ToBatchHeaderMsg(header *common.BatchHeader) *generated.BatchHeaderMsg { GasUsed: header.GasUsed, Time: header.Time, BaseFee: baseFee, - TransferTree: header.CrossChainRoot.Bytes(), + CrossChainRoot: header.CrossChainRoot.Bytes(), Coinbase: header.Coinbase.Bytes(), CrossChainTree: header.CrossChainTree, } @@ -175,7 +187,7 @@ func FromBatchHeaderMsg(header *generated.BatchHeaderMsg) *common.BatchHeader { GasLimit: header.GasLimit, GasUsed: header.GasUsed, Time: header.Time, - CrossChainRoot: gethcommon.BytesToHash(header.TransferTree), + CrossChainRoot: gethcommon.BytesToHash(header.CrossChainRoot), BaseFee: big.NewInt(0).SetUint64(header.BaseFee), Coinbase: gethcommon.BytesToAddress(header.Coinbase), CrossChainTree: header.CrossChainTree, @@ -195,9 +207,11 @@ func ToRollupHeaderMsg(header *common.RollupHeader) *generated.RollupHeaderMsg { return nil } headerMsg := generated.RollupHeaderMsg{ - CompressionL1Head: header.CompressionL1Head.Bytes(), - Signature: header.Signature, - LastBatchSeqNo: header.LastBatchSeqNo, + CompressionL1Head: header.CompressionL1Head.Bytes(), + Signature: header.Signature, + LastBatchSeqNo: header.LastBatchSeqNo, + CrossChainRoot: header.CrossChainRoot.Bytes(), + CompressionL1Number: header.CompressionL1Number.Bytes(), } return &headerMsg @@ -223,9 +237,11 @@ func FromRollupHeaderMsg(header *generated.RollupHeaderMsg) *common.RollupHeader } return &common.RollupHeader{ - CompressionL1Head: gethcommon.BytesToHash(header.CompressionL1Head), - Signature: header.Signature, - LastBatchSeqNo: header.LastBatchSeqNo, + CompressionL1Head: gethcommon.BytesToHash(header.CompressionL1Head), + CompressionL1Number: big.NewInt(0).SetBytes(header.CompressionL1Number), + CrossChainRoot: gethcommon.BytesToHash(header.CrossChainRoot), + LastBatchSeqNo: header.LastBatchSeqNo, + Signature: header.Signature, } } diff --git a/go/common/rpc/generated/enclave.pb.go b/go/common/rpc/generated/enclave.pb.go index 8ede44855e..a9a3afb068 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.36.2 +// protoc v3.21.12 // source: enclave.proto package generated @@ -21,18 +21,16 @@ const ( ) type EnclavePublicConfigRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *EnclavePublicConfigRequest) Reset() { *x = EnclavePublicConfigRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_enclave_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *EnclavePublicConfigRequest) String() string { @@ -43,7 +41,7 @@ func (*EnclavePublicConfigRequest) ProtoMessage() {} func (x *EnclavePublicConfigRequest) ProtoReflect() protoreflect.Message { mi := &file_enclave_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -59,23 +57,20 @@ func (*EnclavePublicConfigRequest) Descriptor() ([]byte, []int) { } type EnclavePublicConfigResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - L2MessageBusAddress []byte `protobuf:"bytes,1,opt,name=l2MessageBusAddress,proto3" json:"l2MessageBusAddress,omitempty"` - TransactionPostProcessorAddress []byte `protobuf:"bytes,2,opt,name=transactionPostProcessorAddress,proto3" json:"transactionPostProcessorAddress,omitempty"` - PublicSystemContracts map[string][]byte `protobuf:"bytes,3,rep,name=publicSystemContracts,proto3" json:"publicSystemContracts,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - SystemError *SystemError `protobuf:"bytes,4,opt,name=systemError,proto3" json:"systemError,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + L2MessageBusAddress []byte `protobuf:"bytes,1,opt,name=l2MessageBusAddress,proto3" json:"l2MessageBusAddress,omitempty"` + TransactionPostProcessorAddress []byte `protobuf:"bytes,2,opt,name=transactionPostProcessorAddress,proto3" json:"transactionPostProcessorAddress,omitempty"` + PublicSystemContracts map[string][]byte `protobuf:"bytes,3,rep,name=publicSystemContracts,proto3" json:"publicSystemContracts,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + SystemError *SystemError `protobuf:"bytes,4,opt,name=systemError,proto3" json:"systemError,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *EnclavePublicConfigResponse) Reset() { *x = EnclavePublicConfigResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_enclave_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *EnclavePublicConfigResponse) String() string { @@ -86,7 +81,7 @@ func (*EnclavePublicConfigResponse) ProtoMessage() {} func (x *EnclavePublicConfigResponse) ProtoReflect() protoreflect.Message { mi := &file_enclave_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -130,20 +125,17 @@ func (x *EnclavePublicConfigResponse) GetSystemError() *SystemError { } type GetBatchRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + KnownHead []byte `protobuf:"bytes,1,opt,name=knownHead,proto3" json:"knownHead,omitempty"` unknownFields protoimpl.UnknownFields - - KnownHead []byte `protobuf:"bytes,1,opt,name=knownHead,proto3" json:"knownHead,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetBatchRequest) Reset() { *x = GetBatchRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_enclave_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetBatchRequest) String() string { @@ -154,7 +146,7 @@ func (*GetBatchRequest) ProtoMessage() {} func (x *GetBatchRequest) ProtoReflect() protoreflect.Message { mi := &file_enclave_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -177,20 +169,17 @@ func (x *GetBatchRequest) GetKnownHead() []byte { } type GetBatchBySeqNoRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + SeqNo uint64 `protobuf:"varint,1,opt,name=seqNo,proto3" json:"seqNo,omitempty"` unknownFields protoimpl.UnknownFields - - SeqNo uint64 `protobuf:"varint,1,opt,name=seqNo,proto3" json:"seqNo,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetBatchBySeqNoRequest) Reset() { *x = GetBatchBySeqNoRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_enclave_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetBatchBySeqNoRequest) String() string { @@ -201,7 +190,7 @@ func (*GetBatchBySeqNoRequest) ProtoMessage() {} func (x *GetBatchBySeqNoRequest) ProtoReflect() protoreflect.Message { mi := &file_enclave_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -224,21 +213,18 @@ func (x *GetBatchBySeqNoRequest) GetSeqNo() uint64 { } type GetBatchResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Batch []byte `protobuf:"bytes,1,opt,name=batch,proto3" json:"batch,omitempty"` + SystemError *SystemError `protobuf:"bytes,2,opt,name=systemError,proto3" json:"systemError,omitempty"` unknownFields protoimpl.UnknownFields - - Batch []byte `protobuf:"bytes,1,opt,name=batch,proto3" json:"batch,omitempty"` - SystemError *SystemError `protobuf:"bytes,2,opt,name=systemError,proto3" json:"systemError,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetBatchResponse) Reset() { *x = GetBatchResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_enclave_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetBatchResponse) String() string { @@ -249,7 +235,7 @@ func (*GetBatchResponse) ProtoMessage() {} func (x *GetBatchResponse) ProtoReflect() protoreflect.Message { mi := &file_enclave_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -279,20 +265,17 @@ func (x *GetBatchResponse) GetSystemError() *SystemError { } type GetRollupDataRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Hash []byte `protobuf:"bytes,1,opt,name=hash,proto3" json:"hash,omitempty"` unknownFields protoimpl.UnknownFields - - Hash []byte `protobuf:"bytes,1,opt,name=hash,proto3" json:"hash,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetRollupDataRequest) Reset() { *x = GetRollupDataRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_enclave_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetRollupDataRequest) String() string { @@ -303,7 +286,7 @@ func (*GetRollupDataRequest) ProtoMessage() {} func (x *GetRollupDataRequest) ProtoReflect() protoreflect.Message { mi := &file_enclave_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -326,21 +309,18 @@ func (x *GetRollupDataRequest) GetHash() []byte { } type GetRollupDataResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Msg *PublicRollupDataMsg `protobuf:"bytes,1,opt,name=msg,proto3" json:"msg,omitempty"` + SystemError *SystemError `protobuf:"bytes,2,opt,name=systemError,proto3" json:"systemError,omitempty"` unknownFields protoimpl.UnknownFields - - Msg *PublicRollupDataMsg `protobuf:"bytes,1,opt,name=msg,proto3" json:"msg,omitempty"` - SystemError *SystemError `protobuf:"bytes,2,opt,name=systemError,proto3" json:"systemError,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetRollupDataResponse) Reset() { *x = GetRollupDataResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_enclave_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetRollupDataResponse) String() string { @@ -351,7 +331,7 @@ func (*GetRollupDataResponse) ProtoMessage() {} func (x *GetRollupDataResponse) ProtoReflect() protoreflect.Message { mi := &file_enclave_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -381,21 +361,18 @@ func (x *GetRollupDataResponse) GetSystemError() *SystemError { } type PublicRollupDataMsg struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + StartSeq uint64 `protobuf:"varint,1,opt,name=startSeq,proto3" json:"startSeq,omitempty"` + Timestamp uint64 `protobuf:"varint,2,opt,name=timestamp,proto3" json:"timestamp,omitempty"` unknownFields protoimpl.UnknownFields - - StartSeq uint64 `protobuf:"varint,1,opt,name=startSeq,proto3" json:"startSeq,omitempty"` - Timestamp uint64 `protobuf:"varint,2,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + sizeCache protoimpl.SizeCache } func (x *PublicRollupDataMsg) Reset() { *x = PublicRollupDataMsg{} - if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_enclave_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *PublicRollupDataMsg) String() string { @@ -406,7 +383,7 @@ func (*PublicRollupDataMsg) ProtoMessage() {} func (x *PublicRollupDataMsg) ProtoReflect() protoreflect.Message { mi := &file_enclave_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -436,18 +413,16 @@ func (x *PublicRollupDataMsg) GetTimestamp() uint64 { } type StreamL2UpdatesRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *StreamL2UpdatesRequest) Reset() { *x = StreamL2UpdatesRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_enclave_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *StreamL2UpdatesRequest) String() string { @@ -458,7 +433,7 @@ func (*StreamL2UpdatesRequest) ProtoMessage() {} func (x *StreamL2UpdatesRequest) ProtoReflect() protoreflect.Message { mi := &file_enclave_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -474,20 +449,17 @@ func (*StreamL2UpdatesRequest) Descriptor() ([]byte, []int) { } type EncodedUpdateResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Batch []byte `protobuf:"bytes,1,opt,name=batch,proto3" json:"batch,omitempty"` unknownFields protoimpl.UnknownFields - - Batch []byte `protobuf:"bytes,1,opt,name=batch,proto3" json:"batch,omitempty"` + sizeCache protoimpl.SizeCache } func (x *EncodedUpdateResponse) Reset() { *x = EncodedUpdateResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_enclave_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *EncodedUpdateResponse) String() string { @@ -498,7 +470,7 @@ func (*EncodedUpdateResponse) ProtoMessage() {} func (x *EncodedUpdateResponse) ProtoReflect() protoreflect.Message { mi := &file_enclave_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -521,21 +493,18 @@ func (x *EncodedUpdateResponse) GetBatch() []byte { } type Pagination struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Offset int32 `protobuf:"varint,1,opt,name=offset,proto3" json:"offset,omitempty"` + Size int32 `protobuf:"varint,2,opt,name=size,proto3" json:"size,omitempty"` unknownFields protoimpl.UnknownFields - - Offset int32 `protobuf:"varint,1,opt,name=offset,proto3" json:"offset,omitempty"` - Size int32 `protobuf:"varint,2,opt,name=size,proto3" json:"size,omitempty"` + sizeCache protoimpl.SizeCache } func (x *Pagination) Reset() { *x = Pagination{} - if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_enclave_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Pagination) String() string { @@ -546,7 +515,7 @@ func (*Pagination) ProtoMessage() {} func (x *Pagination) ProtoReflect() protoreflect.Message { mi := &file_enclave_proto_msgTypes[10] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -576,21 +545,18 @@ func (x *Pagination) GetSize() int32 { } type SystemError struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + ErrorCode int32 `protobuf:"varint,1,opt,name=errorCode,proto3" json:"errorCode,omitempty"` + ErrorString string `protobuf:"bytes,2,opt,name=errorString,proto3" json:"errorString,omitempty"` unknownFields protoimpl.UnknownFields - - ErrorCode int32 `protobuf:"varint,1,opt,name=errorCode,proto3" json:"errorCode,omitempty"` - ErrorString string `protobuf:"bytes,2,opt,name=errorString,proto3" json:"errorString,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SystemError) Reset() { *x = SystemError{} - if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_enclave_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *SystemError) String() string { @@ -601,7 +567,7 @@ func (*SystemError) ProtoMessage() {} func (x *SystemError) ProtoReflect() protoreflect.Message { mi := &file_enclave_proto_msgTypes[11] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -631,18 +597,16 @@ func (x *SystemError) GetErrorString() string { } type GetTotalContractCountRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *GetTotalContractCountRequest) Reset() { *x = GetTotalContractCountRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_enclave_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetTotalContractCountRequest) String() string { @@ -653,7 +617,7 @@ func (*GetTotalContractCountRequest) ProtoMessage() {} func (x *GetTotalContractCountRequest) ProtoReflect() protoreflect.Message { mi := &file_enclave_proto_msgTypes[12] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -669,21 +633,18 @@ func (*GetTotalContractCountRequest) Descriptor() ([]byte, []int) { } type GetTotalContractCountResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Count int64 `protobuf:"varint,1,opt,name=count,proto3" json:"count,omitempty"` + SystemError *SystemError `protobuf:"bytes,2,opt,name=systemError,proto3" json:"systemError,omitempty"` unknownFields protoimpl.UnknownFields - - Count int64 `protobuf:"varint,1,opt,name=count,proto3" json:"count,omitempty"` - SystemError *SystemError `protobuf:"bytes,2,opt,name=systemError,proto3" json:"systemError,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetTotalContractCountResponse) Reset() { *x = GetTotalContractCountResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[13] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_enclave_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetTotalContractCountResponse) String() string { @@ -694,7 +655,7 @@ func (*GetTotalContractCountResponse) ProtoMessage() {} func (x *GetTotalContractCountResponse) ProtoReflect() protoreflect.Message { mi := &file_enclave_proto_msgTypes[13] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -724,21 +685,18 @@ func (x *GetTotalContractCountResponse) GetSystemError() *SystemError { } type DebugTraceTransactionRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + TxHash []byte `protobuf:"bytes,1,opt,name=txHash,proto3" json:"txHash,omitempty"` + Config []byte `protobuf:"bytes,2,opt,name=config,proto3" json:"config,omitempty"` unknownFields protoimpl.UnknownFields - - TxHash []byte `protobuf:"bytes,1,opt,name=txHash,proto3" json:"txHash,omitempty"` - Config []byte `protobuf:"bytes,2,opt,name=config,proto3" json:"config,omitempty"` + sizeCache protoimpl.SizeCache } func (x *DebugTraceTransactionRequest) Reset() { *x = DebugTraceTransactionRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[14] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_enclave_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *DebugTraceTransactionRequest) String() string { @@ -749,7 +707,7 @@ func (*DebugTraceTransactionRequest) ProtoMessage() {} func (x *DebugTraceTransactionRequest) ProtoReflect() protoreflect.Message { mi := &file_enclave_proto_msgTypes[14] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -779,21 +737,18 @@ func (x *DebugTraceTransactionRequest) GetConfig() []byte { } type DebugTraceTransactionResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Msg string `protobuf:"bytes,1,opt,name=msg,proto3" json:"msg,omitempty"` + SystemError *SystemError `protobuf:"bytes,2,opt,name=systemError,proto3" json:"systemError,omitempty"` unknownFields protoimpl.UnknownFields - - Msg string `protobuf:"bytes,1,opt,name=msg,proto3" json:"msg,omitempty"` - SystemError *SystemError `protobuf:"bytes,2,opt,name=systemError,proto3" json:"systemError,omitempty"` + sizeCache protoimpl.SizeCache } func (x *DebugTraceTransactionResponse) Reset() { *x = DebugTraceTransactionResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[15] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_enclave_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *DebugTraceTransactionResponse) String() string { @@ -804,7 +759,7 @@ func (*DebugTraceTransactionResponse) ProtoMessage() {} func (x *DebugTraceTransactionResponse) ProtoReflect() protoreflect.Message { mi := &file_enclave_proto_msgTypes[15] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -834,20 +789,17 @@ func (x *DebugTraceTransactionResponse) GetSystemError() *SystemError { } type CreateBatchRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + SkipIfEmpty bool `protobuf:"varint,1,opt,name=skipIfEmpty,proto3" json:"skipIfEmpty,omitempty"` unknownFields protoimpl.UnknownFields - - SkipIfEmpty bool `protobuf:"varint,1,opt,name=skipIfEmpty,proto3" json:"skipIfEmpty,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CreateBatchRequest) Reset() { *x = CreateBatchRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[16] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_enclave_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *CreateBatchRequest) String() string { @@ -858,7 +810,7 @@ func (*CreateBatchRequest) ProtoMessage() {} func (x *CreateBatchRequest) ProtoReflect() protoreflect.Message { mi := &file_enclave_proto_msgTypes[16] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -881,20 +833,17 @@ func (x *CreateBatchRequest) GetSkipIfEmpty() bool { } type CreateBatchResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Error string `protobuf:"bytes,2,opt,name=error,proto3" json:"error,omitempty"` unknownFields protoimpl.UnknownFields - - Error string `protobuf:"bytes,2,opt,name=error,proto3" json:"error,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CreateBatchResponse) Reset() { *x = CreateBatchResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[17] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_enclave_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *CreateBatchResponse) String() string { @@ -905,7 +854,7 @@ func (*CreateBatchResponse) ProtoMessage() {} func (x *CreateBatchResponse) ProtoReflect() protoreflect.Message { mi := &file_enclave_proto_msgTypes[17] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -928,20 +877,17 @@ func (x *CreateBatchResponse) GetError() string { } type CreateRollupRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - FromSequenceNumber *uint64 `protobuf:"varint,1,opt,name=fromSequenceNumber,proto3,oneof" json:"fromSequenceNumber,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + FromSequenceNumber *uint64 `protobuf:"varint,1,opt,name=fromSequenceNumber,proto3,oneof" json:"fromSequenceNumber,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *CreateRollupRequest) Reset() { *x = CreateRollupRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[18] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_enclave_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *CreateRollupRequest) String() string { @@ -952,7 +898,7 @@ func (*CreateRollupRequest) ProtoMessage() {} func (x *CreateRollupRequest) ProtoReflect() protoreflect.Message { mi := &file_enclave_proto_msgTypes[18] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -975,21 +921,18 @@ func (x *CreateRollupRequest) GetFromSequenceNumber() uint64 { } type CreateRollupResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Msg *ExtRollupMsg `protobuf:"bytes,1,opt,name=msg,proto3" json:"msg,omitempty"` + SystemError *SystemError `protobuf:"bytes,2,opt,name=systemError,proto3" json:"systemError,omitempty"` unknownFields protoimpl.UnknownFields - - Msg *ExtRollupMsg `protobuf:"bytes,1,opt,name=msg,proto3" json:"msg,omitempty"` - SystemError *SystemError `protobuf:"bytes,2,opt,name=systemError,proto3" json:"systemError,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CreateRollupResponse) Reset() { *x = CreateRollupResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[19] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_enclave_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *CreateRollupResponse) String() string { @@ -1000,7 +943,7 @@ func (*CreateRollupResponse) ProtoMessage() {} func (x *CreateRollupResponse) ProtoReflect() protoreflect.Message { mi := &file_enclave_proto_msgTypes[19] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1030,21 +973,18 @@ func (x *CreateRollupResponse) GetSystemError() *SystemError { } type ExportCrossChainDataRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + FromSeqNo uint64 `protobuf:"varint,1,opt,name=fromSeqNo,proto3" json:"fromSeqNo,omitempty"` + ToSeqNo uint64 `protobuf:"varint,2,opt,name=toSeqNo,proto3" json:"toSeqNo,omitempty"` unknownFields protoimpl.UnknownFields - - FromSeqNo uint64 `protobuf:"varint,1,opt,name=fromSeqNo,proto3" json:"fromSeqNo,omitempty"` - ToSeqNo uint64 `protobuf:"varint,2,opt,name=toSeqNo,proto3" json:"toSeqNo,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ExportCrossChainDataRequest) Reset() { *x = ExportCrossChainDataRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[20] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_enclave_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ExportCrossChainDataRequest) String() string { @@ -1055,7 +995,7 @@ func (*ExportCrossChainDataRequest) ProtoMessage() {} func (x *ExportCrossChainDataRequest) ProtoReflect() protoreflect.Message { mi := &file_enclave_proto_msgTypes[20] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1085,20 +1025,17 @@ func (x *ExportCrossChainDataRequest) GetToSeqNo() uint64 { } type ExportCrossChainDataResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Msg []byte `protobuf:"bytes,1,opt,name=msg,proto3" json:"msg,omitempty"` unknownFields protoimpl.UnknownFields - - Msg []byte `protobuf:"bytes,1,opt,name=msg,proto3" json:"msg,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ExportCrossChainDataResponse) Reset() { *x = ExportCrossChainDataResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[21] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_enclave_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ExportCrossChainDataResponse) String() string { @@ -1109,7 +1046,7 @@ func (*ExportCrossChainDataResponse) ProtoMessage() {} func (x *ExportCrossChainDataResponse) ProtoReflect() protoreflect.Message { mi := &file_enclave_proto_msgTypes[21] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1132,18 +1069,16 @@ func (x *ExportCrossChainDataResponse) GetMsg() []byte { } type StatusRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *StatusRequest) Reset() { *x = StatusRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[22] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_enclave_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *StatusRequest) String() string { @@ -1154,7 +1089,7 @@ func (*StatusRequest) ProtoMessage() {} func (x *StatusRequest) ProtoReflect() protoreflect.Message { mi := &file_enclave_proto_msgTypes[22] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1170,24 +1105,21 @@ func (*StatusRequest) Descriptor() ([]byte, []int) { } type StatusResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + StatusCode int32 `protobuf:"varint,1,opt,name=statusCode,proto3" json:"statusCode,omitempty"` + L1Head []byte `protobuf:"bytes,2,opt,name=l1Head,proto3" json:"l1Head,omitempty"` // hash for the L1 head block in enclave's view of the canonical chain + L2Head []byte `protobuf:"bytes,3,opt,name=l2Head,proto3" json:"l2Head,omitempty"` // seq number (big.Int) for the L2 head batch that the enclave has seen + EnclaveID []byte `protobuf:"bytes,4,opt,name=enclaveID,proto3" json:"enclaveID,omitempty"` // enclave ID derived from the public key + SystemError *SystemError `protobuf:"bytes,5,opt,name=systemError,proto3" json:"systemError,omitempty"` unknownFields protoimpl.UnknownFields - - StatusCode int32 `protobuf:"varint,1,opt,name=statusCode,proto3" json:"statusCode,omitempty"` - L1Head []byte `protobuf:"bytes,2,opt,name=l1Head,proto3" json:"l1Head,omitempty"` // hash for the L1 head block in enclave's view of the canonical chain - L2Head []byte `protobuf:"bytes,3,opt,name=l2Head,proto3" json:"l2Head,omitempty"` // seq number (big.Int) for the L2 head batch that the enclave has seen - EnclaveID []byte `protobuf:"bytes,4,opt,name=enclaveID,proto3" json:"enclaveID,omitempty"` // enclave ID derived from the public key - SystemError *SystemError `protobuf:"bytes,5,opt,name=systemError,proto3" json:"systemError,omitempty"` + sizeCache protoimpl.SizeCache } func (x *StatusResponse) Reset() { *x = StatusResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[23] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_enclave_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *StatusResponse) String() string { @@ -1198,7 +1130,7 @@ func (*StatusResponse) ProtoMessage() {} func (x *StatusResponse) ProtoReflect() protoreflect.Message { mi := &file_enclave_proto_msgTypes[23] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1249,18 +1181,16 @@ func (x *StatusResponse) GetSystemError() *SystemError { } type MakeActiveRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *MakeActiveRequest) Reset() { *x = MakeActiveRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[24] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_enclave_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *MakeActiveRequest) String() string { @@ -1271,7 +1201,7 @@ func (*MakeActiveRequest) ProtoMessage() {} func (x *MakeActiveRequest) ProtoReflect() protoreflect.Message { mi := &file_enclave_proto_msgTypes[24] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1287,20 +1217,17 @@ func (*MakeActiveRequest) Descriptor() ([]byte, []int) { } type MakeActiveResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + SystemError *SystemError `protobuf:"bytes,1,opt,name=systemError,proto3" json:"systemError,omitempty"` unknownFields protoimpl.UnknownFields - - SystemError *SystemError `protobuf:"bytes,1,opt,name=systemError,proto3" json:"systemError,omitempty"` + sizeCache protoimpl.SizeCache } func (x *MakeActiveResponse) Reset() { *x = MakeActiveResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[25] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_enclave_proto_msgTypes[25] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *MakeActiveResponse) String() string { @@ -1311,7 +1238,7 @@ func (*MakeActiveResponse) ProtoMessage() {} func (x *MakeActiveResponse) ProtoReflect() protoreflect.Message { mi := &file_enclave_proto_msgTypes[25] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1334,18 +1261,16 @@ func (x *MakeActiveResponse) GetSystemError() *SystemError { } type AttestationRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AttestationRequest) Reset() { *x = AttestationRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[26] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_enclave_proto_msgTypes[26] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *AttestationRequest) String() string { @@ -1356,7 +1281,7 @@ func (*AttestationRequest) ProtoMessage() {} func (x *AttestationRequest) ProtoReflect() protoreflect.Message { mi := &file_enclave_proto_msgTypes[26] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1372,21 +1297,18 @@ func (*AttestationRequest) Descriptor() ([]byte, []int) { } type AttestationResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - AttestationReportMsg *AttestationReportMsg `protobuf:"bytes,1,opt,name=attestationReportMsg,proto3" json:"attestationReportMsg,omitempty"` - SystemError *SystemError `protobuf:"bytes,2,opt,name=systemError,proto3" json:"systemError,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + AttestationReportMsg *AttestationReportMsg `protobuf:"bytes,1,opt,name=attestationReportMsg,proto3" json:"attestationReportMsg,omitempty"` + SystemError *SystemError `protobuf:"bytes,2,opt,name=systemError,proto3" json:"systemError,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AttestationResponse) Reset() { *x = AttestationResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[27] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_enclave_proto_msgTypes[27] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *AttestationResponse) String() string { @@ -1397,7 +1319,7 @@ func (*AttestationResponse) ProtoMessage() {} func (x *AttestationResponse) ProtoReflect() protoreflect.Message { mi := &file_enclave_proto_msgTypes[27] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1427,18 +1349,16 @@ func (x *AttestationResponse) GetSystemError() *SystemError { } type GenerateSecretRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *GenerateSecretRequest) Reset() { *x = GenerateSecretRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[28] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_enclave_proto_msgTypes[28] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GenerateSecretRequest) String() string { @@ -1449,7 +1369,7 @@ func (*GenerateSecretRequest) ProtoMessage() {} func (x *GenerateSecretRequest) ProtoReflect() protoreflect.Message { mi := &file_enclave_proto_msgTypes[28] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1465,21 +1385,18 @@ func (*GenerateSecretRequest) Descriptor() ([]byte, []int) { } type GenerateSecretResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - EncryptedSharedEnclaveSecret []byte `protobuf:"bytes,1,opt,name=encryptedSharedEnclaveSecret,proto3" json:"encryptedSharedEnclaveSecret,omitempty"` - SystemError *SystemError `protobuf:"bytes,2,opt,name=systemError,proto3" json:"systemError,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + EncryptedSharedEnclaveSecret []byte `protobuf:"bytes,1,opt,name=encryptedSharedEnclaveSecret,proto3" json:"encryptedSharedEnclaveSecret,omitempty"` + SystemError *SystemError `protobuf:"bytes,2,opt,name=systemError,proto3" json:"systemError,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *GenerateSecretResponse) Reset() { *x = GenerateSecretResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[29] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_enclave_proto_msgTypes[29] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GenerateSecretResponse) String() string { @@ -1490,7 +1407,7 @@ func (*GenerateSecretResponse) ProtoMessage() {} func (x *GenerateSecretResponse) ProtoReflect() protoreflect.Message { mi := &file_enclave_proto_msgTypes[29] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1520,20 +1437,17 @@ func (x *GenerateSecretResponse) GetSystemError() *SystemError { } type InitEnclaveRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - EncryptedSharedEnclaveSecret []byte `protobuf:"bytes,1,opt,name=encryptedSharedEnclaveSecret,proto3" json:"encryptedSharedEnclaveSecret,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + EncryptedSharedEnclaveSecret []byte `protobuf:"bytes,1,opt,name=encryptedSharedEnclaveSecret,proto3" json:"encryptedSharedEnclaveSecret,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *InitEnclaveRequest) Reset() { *x = InitEnclaveRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[30] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_enclave_proto_msgTypes[30] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *InitEnclaveRequest) String() string { @@ -1544,7 +1458,7 @@ func (*InitEnclaveRequest) ProtoMessage() {} func (x *InitEnclaveRequest) ProtoReflect() protoreflect.Message { mi := &file_enclave_proto_msgTypes[30] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1567,20 +1481,17 @@ func (x *InitEnclaveRequest) GetEncryptedSharedEnclaveSecret() []byte { } type InitEnclaveResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + SystemError *SystemError `protobuf:"bytes,1,opt,name=systemError,proto3" json:"systemError,omitempty"` unknownFields protoimpl.UnknownFields - - SystemError *SystemError `protobuf:"bytes,1,opt,name=systemError,proto3" json:"systemError,omitempty"` + sizeCache protoimpl.SizeCache } func (x *InitEnclaveResponse) Reset() { *x = InitEnclaveResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[31] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_enclave_proto_msgTypes[31] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *InitEnclaveResponse) String() string { @@ -1591,7 +1502,7 @@ func (*InitEnclaveResponse) ProtoMessage() {} func (x *InitEnclaveResponse) ProtoReflect() protoreflect.Message { mi := &file_enclave_proto_msgTypes[31] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1614,18 +1525,16 @@ func (x *InitEnclaveResponse) GetSystemError() *SystemError { } type EnclaveIDRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *EnclaveIDRequest) Reset() { *x = EnclaveIDRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[32] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_enclave_proto_msgTypes[32] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *EnclaveIDRequest) String() string { @@ -1636,7 +1545,7 @@ func (*EnclaveIDRequest) ProtoMessage() {} func (x *EnclaveIDRequest) ProtoReflect() protoreflect.Message { mi := &file_enclave_proto_msgTypes[32] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1652,21 +1561,18 @@ func (*EnclaveIDRequest) Descriptor() ([]byte, []int) { } type EnclaveIDResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + EnclaveID []byte `protobuf:"bytes,1,opt,name=enclaveID,proto3" json:"enclaveID,omitempty"` + SystemError *SystemError `protobuf:"bytes,2,opt,name=systemError,proto3" json:"systemError,omitempty"` unknownFields protoimpl.UnknownFields - - EnclaveID []byte `protobuf:"bytes,1,opt,name=enclaveID,proto3" json:"enclaveID,omitempty"` - SystemError *SystemError `protobuf:"bytes,2,opt,name=systemError,proto3" json:"systemError,omitempty"` + sizeCache protoimpl.SizeCache } func (x *EnclaveIDResponse) Reset() { *x = EnclaveIDResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[33] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_enclave_proto_msgTypes[33] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *EnclaveIDResponse) String() string { @@ -1677,7 +1583,7 @@ func (*EnclaveIDResponse) ProtoMessage() {} func (x *EnclaveIDResponse) ProtoReflect() protoreflect.Message { mi := &file_enclave_proto_msgTypes[33] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1707,18 +1613,16 @@ func (x *EnclaveIDResponse) GetSystemError() *SystemError { } type RPCEncryptionKeyRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RPCEncryptionKeyRequest) Reset() { *x = RPCEncryptionKeyRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[34] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_enclave_proto_msgTypes[34] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *RPCEncryptionKeyRequest) String() string { @@ -1729,7 +1633,7 @@ func (*RPCEncryptionKeyRequest) ProtoMessage() {} func (x *RPCEncryptionKeyRequest) ProtoReflect() protoreflect.Message { mi := &file_enclave_proto_msgTypes[34] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1745,21 +1649,18 @@ func (*RPCEncryptionKeyRequest) Descriptor() ([]byte, []int) { } type RPCEncryptionKeyResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + RpcPubKey []byte `protobuf:"bytes,1,opt,name=rpcPubKey,proto3" json:"rpcPubKey,omitempty"` + SystemError *SystemError `protobuf:"bytes,2,opt,name=systemError,proto3" json:"systemError,omitempty"` unknownFields protoimpl.UnknownFields - - RpcPubKey []byte `protobuf:"bytes,1,opt,name=rpcPubKey,proto3" json:"rpcPubKey,omitempty"` - SystemError *SystemError `protobuf:"bytes,2,opt,name=systemError,proto3" json:"systemError,omitempty"` + sizeCache protoimpl.SizeCache } func (x *RPCEncryptionKeyResponse) Reset() { *x = RPCEncryptionKeyResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[35] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_enclave_proto_msgTypes[35] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *RPCEncryptionKeyResponse) String() string { @@ -1770,7 +1671,7 @@ func (*RPCEncryptionKeyResponse) ProtoMessage() {} func (x *RPCEncryptionKeyResponse) ProtoReflect() protoreflect.Message { mi := &file_enclave_proto_msgTypes[35] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1800,20 +1701,17 @@ func (x *RPCEncryptionKeyResponse) GetSystemError() *SystemError { } type StartRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + EncodedBlock []byte `protobuf:"bytes,1,opt,name=encodedBlock,proto3" json:"encodedBlock,omitempty"` unknownFields protoimpl.UnknownFields - - EncodedBlock []byte `protobuf:"bytes,1,opt,name=encodedBlock,proto3" json:"encodedBlock,omitempty"` + sizeCache protoimpl.SizeCache } func (x *StartRequest) Reset() { *x = StartRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[36] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_enclave_proto_msgTypes[36] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *StartRequest) String() string { @@ -1824,7 +1722,7 @@ func (*StartRequest) ProtoMessage() {} func (x *StartRequest) ProtoReflect() protoreflect.Message { mi := &file_enclave_proto_msgTypes[36] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1847,20 +1745,17 @@ func (x *StartRequest) GetEncodedBlock() []byte { } type StartResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + SystemError *SystemError `protobuf:"bytes,1,opt,name=systemError,proto3" json:"systemError,omitempty"` unknownFields protoimpl.UnknownFields - - SystemError *SystemError `protobuf:"bytes,1,opt,name=systemError,proto3" json:"systemError,omitempty"` + sizeCache protoimpl.SizeCache } func (x *StartResponse) Reset() { *x = StartResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[37] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_enclave_proto_msgTypes[37] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *StartResponse) String() string { @@ -1871,7 +1766,7 @@ func (*StartResponse) ProtoMessage() {} func (x *StartResponse) ProtoReflect() protoreflect.Message { mi := &file_enclave_proto_msgTypes[37] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1894,21 +1789,18 @@ func (x *StartResponse) GetSystemError() *SystemError { } type SubmitBlockRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - EncodedBlock []byte `protobuf:"bytes,1,opt,name=encodedBlock,proto3" json:"encodedBlock,omitempty"` - EncodedProcessedData []byte `protobuf:"bytes,2,opt,name=encodedProcessedData,proto3" json:"encodedProcessedData,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + EncodedBlock []byte `protobuf:"bytes,1,opt,name=encodedBlock,proto3" json:"encodedBlock,omitempty"` + EncodedProcessedData []byte `protobuf:"bytes,2,opt,name=encodedProcessedData,proto3" json:"encodedProcessedData,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *SubmitBlockRequest) Reset() { *x = SubmitBlockRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[38] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_enclave_proto_msgTypes[38] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *SubmitBlockRequest) String() string { @@ -1919,7 +1811,7 @@ func (*SubmitBlockRequest) ProtoMessage() {} func (x *SubmitBlockRequest) ProtoReflect() protoreflect.Message { mi := &file_enclave_proto_msgTypes[38] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1949,21 +1841,18 @@ func (x *SubmitBlockRequest) GetEncodedProcessedData() []byte { } type SubmitBlockResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` BlockSubmissionResponse *BlockSubmissionResponseMsg `protobuf:"bytes,1,opt,name=blockSubmissionResponse,proto3" json:"blockSubmissionResponse,omitempty"` SystemError *SystemError `protobuf:"bytes,2,opt,name=systemError,proto3" json:"systemError,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *SubmitBlockResponse) Reset() { *x = SubmitBlockResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[39] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_enclave_proto_msgTypes[39] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *SubmitBlockResponse) String() string { @@ -1974,7 +1863,7 @@ func (*SubmitBlockResponse) ProtoMessage() {} func (x *SubmitBlockResponse) ProtoReflect() protoreflect.Message { mi := &file_enclave_proto_msgTypes[39] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2004,20 +1893,17 @@ func (x *SubmitBlockResponse) GetSystemError() *SystemError { } type EncCallRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - EncryptedParams []byte `protobuf:"bytes,1,opt,name=encryptedParams,proto3" json:"encryptedParams,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + EncryptedParams []byte `protobuf:"bytes,1,opt,name=encryptedParams,proto3" json:"encryptedParams,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *EncCallRequest) Reset() { *x = EncCallRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[40] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_enclave_proto_msgTypes[40] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *EncCallRequest) String() string { @@ -2028,7 +1914,7 @@ func (*EncCallRequest) ProtoMessage() {} func (x *EncCallRequest) ProtoReflect() protoreflect.Message { mi := &file_enclave_proto_msgTypes[40] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2051,21 +1937,18 @@ func (x *EncCallRequest) GetEncryptedParams() []byte { } type EncCallResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - EncodedEnclaveResponse []byte `protobuf:"bytes,1,opt,name=encodedEnclaveResponse,proto3" json:"encodedEnclaveResponse,omitempty"` - SystemError *SystemError `protobuf:"bytes,2,opt,name=systemError,proto3" json:"systemError,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + EncodedEnclaveResponse []byte `protobuf:"bytes,1,opt,name=encodedEnclaveResponse,proto3" json:"encodedEnclaveResponse,omitempty"` + SystemError *SystemError `protobuf:"bytes,2,opt,name=systemError,proto3" json:"systemError,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *EncCallResponse) Reset() { *x = EncCallResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[41] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_enclave_proto_msgTypes[41] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *EncCallResponse) String() string { @@ -2076,7 +1959,7 @@ func (*EncCallResponse) ProtoMessage() {} func (x *EncCallResponse) ProtoReflect() protoreflect.Message { mi := &file_enclave_proto_msgTypes[41] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2106,20 +1989,17 @@ func (x *EncCallResponse) GetSystemError() *SystemError { } type SubmitBatchRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Batch *ExtBatchMsg `protobuf:"bytes,1,opt,name=batch,proto3" json:"batch,omitempty"` unknownFields protoimpl.UnknownFields - - Batch *ExtBatchMsg `protobuf:"bytes,1,opt,name=batch,proto3" json:"batch,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SubmitBatchRequest) Reset() { *x = SubmitBatchRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[42] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_enclave_proto_msgTypes[42] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *SubmitBatchRequest) String() string { @@ -2130,7 +2010,7 @@ func (*SubmitBatchRequest) ProtoMessage() {} func (x *SubmitBatchRequest) ProtoReflect() protoreflect.Message { mi := &file_enclave_proto_msgTypes[42] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2153,20 +2033,17 @@ func (x *SubmitBatchRequest) GetBatch() *ExtBatchMsg { } type SubmitBatchResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + SystemError *SystemError `protobuf:"bytes,1,opt,name=systemError,proto3" json:"systemError,omitempty"` unknownFields protoimpl.UnknownFields - - SystemError *SystemError `protobuf:"bytes,1,opt,name=systemError,proto3" json:"systemError,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SubmitBatchResponse) Reset() { *x = SubmitBatchResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[43] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_enclave_proto_msgTypes[43] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *SubmitBatchResponse) String() string { @@ -2177,7 +2054,7 @@ func (*SubmitBatchResponse) ProtoMessage() {} func (x *SubmitBatchResponse) ProtoReflect() protoreflect.Message { mi := &file_enclave_proto_msgTypes[43] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2200,18 +2077,16 @@ func (x *SubmitBatchResponse) GetSystemError() *SystemError { } type StopRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *StopRequest) Reset() { *x = StopRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[44] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_enclave_proto_msgTypes[44] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *StopRequest) String() string { @@ -2222,7 +2097,7 @@ func (*StopRequest) ProtoMessage() {} func (x *StopRequest) ProtoReflect() protoreflect.Message { mi := &file_enclave_proto_msgTypes[44] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2238,20 +2113,17 @@ func (*StopRequest) Descriptor() ([]byte, []int) { } type StopResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + SystemError *SystemError `protobuf:"bytes,1,opt,name=systemError,proto3" json:"systemError,omitempty"` unknownFields protoimpl.UnknownFields - - SystemError *SystemError `protobuf:"bytes,1,opt,name=systemError,proto3" json:"systemError,omitempty"` + sizeCache protoimpl.SizeCache } func (x *StopResponse) Reset() { *x = StopResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[45] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_enclave_proto_msgTypes[45] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *StopResponse) String() string { @@ -2262,7 +2134,7 @@ func (*StopResponse) ProtoMessage() {} func (x *StopResponse) ProtoReflect() protoreflect.Message { mi := &file_enclave_proto_msgTypes[45] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2285,21 +2157,18 @@ func (x *StopResponse) GetSystemError() *SystemError { } type GetCodeRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Address []byte `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` + BlockNrOrHash []byte `protobuf:"bytes,2,opt,name=blockNrOrHash,proto3" json:"blockNrOrHash,omitempty"` unknownFields protoimpl.UnknownFields - - Address []byte `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` - BlockNrOrHash []byte `protobuf:"bytes,2,opt,name=blockNrOrHash,proto3" json:"blockNrOrHash,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetCodeRequest) Reset() { *x = GetCodeRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[46] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_enclave_proto_msgTypes[46] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetCodeRequest) String() string { @@ -2310,7 +2179,7 @@ func (*GetCodeRequest) ProtoMessage() {} func (x *GetCodeRequest) ProtoReflect() protoreflect.Message { mi := &file_enclave_proto_msgTypes[46] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2340,21 +2209,18 @@ func (x *GetCodeRequest) GetBlockNrOrHash() []byte { } type GetCodeResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Code []byte `protobuf:"bytes,1,opt,name=code,proto3" json:"code,omitempty"` + SystemError *SystemError `protobuf:"bytes,2,opt,name=systemError,proto3" json:"systemError,omitempty"` unknownFields protoimpl.UnknownFields - - Code []byte `protobuf:"bytes,1,opt,name=code,proto3" json:"code,omitempty"` - SystemError *SystemError `protobuf:"bytes,2,opt,name=systemError,proto3" json:"systemError,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetCodeResponse) Reset() { *x = GetCodeResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[47] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_enclave_proto_msgTypes[47] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetCodeResponse) String() string { @@ -2365,7 +2231,7 @@ func (*GetCodeResponse) ProtoMessage() {} func (x *GetCodeResponse) ProtoReflect() protoreflect.Message { mi := &file_enclave_proto_msgTypes[47] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2395,21 +2261,18 @@ func (x *GetCodeResponse) GetSystemError() *SystemError { } type SubscribeRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id []byte `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - EncryptedSubscription []byte `protobuf:"bytes,2,opt,name=encryptedSubscription,proto3" json:"encryptedSubscription,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Id []byte `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + EncryptedSubscription []byte `protobuf:"bytes,2,opt,name=encryptedSubscription,proto3" json:"encryptedSubscription,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *SubscribeRequest) Reset() { *x = SubscribeRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[48] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_enclave_proto_msgTypes[48] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *SubscribeRequest) String() string { @@ -2420,7 +2283,7 @@ func (*SubscribeRequest) ProtoMessage() {} func (x *SubscribeRequest) ProtoReflect() protoreflect.Message { mi := &file_enclave_proto_msgTypes[48] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2450,20 +2313,17 @@ func (x *SubscribeRequest) GetEncryptedSubscription() []byte { } type SubscribeResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + SystemError *SystemError `protobuf:"bytes,2,opt,name=systemError,proto3" json:"systemError,omitempty"` unknownFields protoimpl.UnknownFields - - SystemError *SystemError `protobuf:"bytes,2,opt,name=systemError,proto3" json:"systemError,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SubscribeResponse) Reset() { *x = SubscribeResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[49] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_enclave_proto_msgTypes[49] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *SubscribeResponse) String() string { @@ -2474,7 +2334,7 @@ func (*SubscribeResponse) ProtoMessage() {} func (x *SubscribeResponse) ProtoReflect() protoreflect.Message { mi := &file_enclave_proto_msgTypes[49] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2497,20 +2357,17 @@ func (x *SubscribeResponse) GetSystemError() *SystemError { } type UnsubscribeRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Id []byte `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` unknownFields protoimpl.UnknownFields - - Id []byte `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *UnsubscribeRequest) Reset() { *x = UnsubscribeRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[50] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_enclave_proto_msgTypes[50] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *UnsubscribeRequest) String() string { @@ -2521,7 +2378,7 @@ func (*UnsubscribeRequest) ProtoMessage() {} func (x *UnsubscribeRequest) ProtoReflect() protoreflect.Message { mi := &file_enclave_proto_msgTypes[50] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2544,20 +2401,17 @@ func (x *UnsubscribeRequest) GetId() []byte { } type UnsubscribeResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + SystemError *SystemError `protobuf:"bytes,2,opt,name=systemError,proto3" json:"systemError,omitempty"` unknownFields protoimpl.UnknownFields - - SystemError *SystemError `protobuf:"bytes,2,opt,name=systemError,proto3" json:"systemError,omitempty"` + sizeCache protoimpl.SizeCache } func (x *UnsubscribeResponse) Reset() { *x = UnsubscribeResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[51] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_enclave_proto_msgTypes[51] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *UnsubscribeResponse) String() string { @@ -2568,7 +2422,7 @@ func (*UnsubscribeResponse) ProtoMessage() {} func (x *UnsubscribeResponse) ProtoReflect() protoreflect.Message { mi := &file_enclave_proto_msgTypes[51] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2591,21 +2445,18 @@ func (x *UnsubscribeResponse) GetSystemError() *SystemError { } type HealthCheckResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Status bool `protobuf:"varint,1,opt,name=status,proto3" json:"status,omitempty"` + SystemError *SystemError `protobuf:"bytes,2,opt,name=systemError,proto3" json:"systemError,omitempty"` unknownFields protoimpl.UnknownFields - - Status bool `protobuf:"varint,1,opt,name=status,proto3" json:"status,omitempty"` - SystemError *SystemError `protobuf:"bytes,2,opt,name=systemError,proto3" json:"systemError,omitempty"` + sizeCache protoimpl.SizeCache } func (x *HealthCheckResponse) Reset() { *x = HealthCheckResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[52] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_enclave_proto_msgTypes[52] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *HealthCheckResponse) String() string { @@ -2616,7 +2467,7 @@ func (*HealthCheckResponse) ProtoMessage() {} func (x *HealthCheckResponse) ProtoReflect() protoreflect.Message { mi := &file_enclave_proto_msgTypes[52] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2646,18 +2497,16 @@ func (x *HealthCheckResponse) GetSystemError() *SystemError { } type EmptyArgs struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *EmptyArgs) Reset() { *x = EmptyArgs{} - if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[53] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_enclave_proto_msgTypes[53] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *EmptyArgs) String() string { @@ -2668,7 +2517,7 @@ func (*EmptyArgs) ProtoMessage() {} func (x *EmptyArgs) ProtoReflect() protoreflect.Message { mi := &file_enclave_proto_msgTypes[53] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2684,24 +2533,21 @@ func (*EmptyArgs) Descriptor() ([]byte, []int) { } type AttestationReportMsg struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Report []byte `protobuf:"bytes,1,opt,name=Report,proto3" json:"Report,omitempty"` // The actual report bytes so it can be shared and verified by other nodes + PubKey []byte `protobuf:"bytes,2,opt,name=PubKey,proto3" json:"PubKey,omitempty"` // Public key to encrypt traffic back to this enclave + EnclaveID []byte `protobuf:"bytes,3,opt,name=EnclaveID,proto3" json:"EnclaveID,omitempty"` + HostAddress string `protobuf:"bytes,4,opt,name=HostAddress,proto3" json:"HostAddress,omitempty"` // The IP address on which the host can be contacted by other Obscuro hosts for peer-to-peer communication + SystemError *SystemError `protobuf:"bytes,5,opt,name=systemError,proto3" json:"systemError,omitempty"` unknownFields protoimpl.UnknownFields - - Report []byte `protobuf:"bytes,1,opt,name=Report,proto3" json:"Report,omitempty"` // The actual report bytes so it can be shared and verified by other nodes - PubKey []byte `protobuf:"bytes,2,opt,name=PubKey,proto3" json:"PubKey,omitempty"` // Public key to encrypt traffic back to this enclave - EnclaveID []byte `protobuf:"bytes,3,opt,name=EnclaveID,proto3" json:"EnclaveID,omitempty"` - HostAddress string `protobuf:"bytes,4,opt,name=HostAddress,proto3" json:"HostAddress,omitempty"` // The IP address on which the host can be contacted by other Obscuro hosts for peer-to-peer communication - SystemError *SystemError `protobuf:"bytes,5,opt,name=systemError,proto3" json:"systemError,omitempty"` + sizeCache protoimpl.SizeCache } func (x *AttestationReportMsg) Reset() { *x = AttestationReportMsg{} - if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[54] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_enclave_proto_msgTypes[54] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *AttestationReportMsg) String() string { @@ -2712,7 +2558,7 @@ func (*AttestationReportMsg) ProtoMessage() {} func (x *AttestationReportMsg) ProtoReflect() protoreflect.Message { mi := &file_enclave_proto_msgTypes[54] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2762,22 +2608,64 @@ func (x *AttestationReportMsg) GetSystemError() *SystemError { return nil } -type BlockSubmissionResponseMsg struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +type ExtRollupMetadataResponseMsg struct { + state protoimpl.MessageState `protogen:"open.v1"` + CrossChainTree []byte `protobuf:"bytes,1,opt,name=CrossChainTree,proto3" json:"CrossChainTree,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} - ProducedSecretResponses []*SecretResponseMsg `protobuf:"bytes,1,rep,name=producedSecretResponses,proto3" json:"producedSecretResponses,omitempty"` - Error *BlockSubmissionErrorMsg `protobuf:"bytes,2,opt,name=error,proto3" json:"error,omitempty"` // todo (@matt) - remove this BlockSubmissionError field once we are using the Status() to update host view of enclave state +func (x *ExtRollupMetadataResponseMsg) Reset() { + *x = ExtRollupMetadataResponseMsg{} + mi := &file_enclave_proto_msgTypes[55] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *BlockSubmissionResponseMsg) Reset() { - *x = BlockSubmissionResponseMsg{} - if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[55] +func (x *ExtRollupMetadataResponseMsg) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ExtRollupMetadataResponseMsg) ProtoMessage() {} + +func (x *ExtRollupMetadataResponseMsg) ProtoReflect() protoreflect.Message { + mi := &file_enclave_proto_msgTypes[55] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } + return mi.MessageOf(x) +} + +// Deprecated: Use ExtRollupMetadataResponseMsg.ProtoReflect.Descriptor instead. +func (*ExtRollupMetadataResponseMsg) Descriptor() ([]byte, []int) { + return file_enclave_proto_rawDescGZIP(), []int{55} +} + +func (x *ExtRollupMetadataResponseMsg) GetCrossChainTree() []byte { + if x != nil { + return x.CrossChainTree + } + return nil +} + +type BlockSubmissionResponseMsg struct { + state protoimpl.MessageState `protogen:"open.v1"` + ProducedSecretResponses []*SecretResponseMsg `protobuf:"bytes,1,rep,name=producedSecretResponses,proto3" json:"producedSecretResponses,omitempty"` + Error *BlockSubmissionErrorMsg `protobuf:"bytes,2,opt,name=error,proto3" json:"error,omitempty"` // todo (@matt) - remove this BlockSubmissionError field once we are using the Status() to update host view of enclave state + RollupMetadata []*ExtRollupMetadataResponseMsg `protobuf:"bytes,3,rep,name=rollupMetadata,proto3" json:"rollupMetadata,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BlockSubmissionResponseMsg) Reset() { + *x = BlockSubmissionResponseMsg{} + mi := &file_enclave_proto_msgTypes[56] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *BlockSubmissionResponseMsg) String() string { @@ -2787,8 +2675,8 @@ func (x *BlockSubmissionResponseMsg) String() string { func (*BlockSubmissionResponseMsg) ProtoMessage() {} func (x *BlockSubmissionResponseMsg) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[55] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_enclave_proto_msgTypes[56] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2800,7 +2688,7 @@ func (x *BlockSubmissionResponseMsg) ProtoReflect() protoreflect.Message { // Deprecated: Use BlockSubmissionResponseMsg.ProtoReflect.Descriptor instead. func (*BlockSubmissionResponseMsg) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{55} + return file_enclave_proto_rawDescGZIP(), []int{56} } func (x *BlockSubmissionResponseMsg) GetProducedSecretResponses() []*SecretResponseMsg { @@ -2817,22 +2705,26 @@ func (x *BlockSubmissionResponseMsg) GetError() *BlockSubmissionErrorMsg { return nil } +func (x *BlockSubmissionResponseMsg) GetRollupMetadata() []*ExtRollupMetadataResponseMsg { + if x != nil { + return x.RollupMetadata + } + return nil +} + type BlockSubmissionErrorMsg struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Cause string `protobuf:"bytes,1,opt,name=cause,proto3" json:"cause,omitempty"` // error cause description + L1Head []byte `protobuf:"bytes,2,opt,name=l1Head,proto3" json:"l1Head,omitempty"` // hash for the L1 head block in enclave's view of the canonical chain unknownFields protoimpl.UnknownFields - - Cause string `protobuf:"bytes,1,opt,name=cause,proto3" json:"cause,omitempty"` // error cause description - L1Head []byte `protobuf:"bytes,2,opt,name=l1Head,proto3" json:"l1Head,omitempty"` // hash for the L1 head block in enclave's view of the canonical chain + sizeCache protoimpl.SizeCache } func (x *BlockSubmissionErrorMsg) Reset() { *x = BlockSubmissionErrorMsg{} - if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[56] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_enclave_proto_msgTypes[57] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *BlockSubmissionErrorMsg) String() string { @@ -2842,8 +2734,8 @@ func (x *BlockSubmissionErrorMsg) String() string { func (*BlockSubmissionErrorMsg) ProtoMessage() {} func (x *BlockSubmissionErrorMsg) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[56] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_enclave_proto_msgTypes[57] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2855,7 +2747,7 @@ func (x *BlockSubmissionErrorMsg) ProtoReflect() protoreflect.Message { // Deprecated: Use BlockSubmissionErrorMsg.ProtoReflect.Descriptor instead. func (*BlockSubmissionErrorMsg) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{56} + return file_enclave_proto_rawDescGZIP(), []int{57} } func (x *BlockSubmissionErrorMsg) GetCause() string { @@ -2873,24 +2765,21 @@ func (x *BlockSubmissionErrorMsg) GetL1Head() []byte { } type CrossChainMsg struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Sender []byte `protobuf:"bytes,1,opt,name=Sender,proto3" json:"Sender,omitempty"` + Sequence uint64 `protobuf:"varint,2,opt,name=Sequence,proto3" json:"Sequence,omitempty"` + Nonce uint32 `protobuf:"varint,3,opt,name=Nonce,proto3" json:"Nonce,omitempty"` + Topic uint32 `protobuf:"varint,4,opt,name=Topic,proto3" json:"Topic,omitempty"` + Payload []byte `protobuf:"bytes,5,opt,name=Payload,proto3" json:"Payload,omitempty"` unknownFields protoimpl.UnknownFields - - Sender []byte `protobuf:"bytes,1,opt,name=Sender,proto3" json:"Sender,omitempty"` - Sequence uint64 `protobuf:"varint,2,opt,name=Sequence,proto3" json:"Sequence,omitempty"` - Nonce uint32 `protobuf:"varint,3,opt,name=Nonce,proto3" json:"Nonce,omitempty"` - Topic uint32 `protobuf:"varint,4,opt,name=Topic,proto3" json:"Topic,omitempty"` - Payload []byte `protobuf:"bytes,5,opt,name=Payload,proto3" json:"Payload,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CrossChainMsg) Reset() { *x = CrossChainMsg{} - if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[57] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_enclave_proto_msgTypes[58] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *CrossChainMsg) String() string { @@ -2900,8 +2789,8 @@ func (x *CrossChainMsg) String() string { func (*CrossChainMsg) ProtoMessage() {} func (x *CrossChainMsg) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[57] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_enclave_proto_msgTypes[58] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2913,7 +2802,7 @@ func (x *CrossChainMsg) ProtoReflect() protoreflect.Message { // Deprecated: Use CrossChainMsg.ProtoReflect.Descriptor instead. func (*CrossChainMsg) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{57} + return file_enclave_proto_rawDescGZIP(), []int{58} } func (x *CrossChainMsg) GetSender() []byte { @@ -2952,22 +2841,19 @@ func (x *CrossChainMsg) GetPayload() []byte { } type ExtBatchMsg struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Header *BatchHeaderMsg `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"` + TxHashes [][]byte `protobuf:"bytes,2,rep,name=txHashes,proto3" json:"txHashes,omitempty"` + Txs []byte `protobuf:"bytes,3,opt,name=txs,proto3" json:"txs,omitempty"` unknownFields protoimpl.UnknownFields - - Header *BatchHeaderMsg `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"` - TxHashes [][]byte `protobuf:"bytes,2,rep,name=txHashes,proto3" json:"txHashes,omitempty"` - Txs []byte `protobuf:"bytes,3,opt,name=txs,proto3" json:"txs,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ExtBatchMsg) Reset() { *x = ExtBatchMsg{} - if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[58] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_enclave_proto_msgTypes[59] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ExtBatchMsg) String() string { @@ -2977,8 +2863,8 @@ func (x *ExtBatchMsg) String() string { func (*ExtBatchMsg) ProtoMessage() {} func (x *ExtBatchMsg) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[58] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_enclave_proto_msgTypes[59] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2990,7 +2876,7 @@ func (x *ExtBatchMsg) ProtoReflect() protoreflect.Message { // Deprecated: Use ExtBatchMsg.ProtoReflect.Descriptor instead. func (*ExtBatchMsg) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{58} + return file_enclave_proto_rawDescGZIP(), []int{59} } func (x *ExtBatchMsg) GetHeader() *BatchHeaderMsg { @@ -3015,35 +2901,32 @@ func (x *ExtBatchMsg) GetTxs() []byte { } type BatchHeaderMsg struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ParentHash []byte `protobuf:"bytes,1,opt,name=ParentHash,proto3" json:"ParentHash,omitempty"` - Proof []byte `protobuf:"bytes,2,opt,name=Proof,proto3" json:"Proof,omitempty"` - Root []byte `protobuf:"bytes,3,opt,name=Root,proto3" json:"Root,omitempty"` - TxHash []byte `protobuf:"bytes,4,opt,name=TxHash,proto3" json:"TxHash,omitempty"` - Number uint64 `protobuf:"varint,5,opt,name=Number,proto3" json:"Number,omitempty"` - SequencerOrderNo uint64 `protobuf:"varint,6,opt,name=SequencerOrderNo,proto3" json:"SequencerOrderNo,omitempty"` - ReceiptHash []byte `protobuf:"bytes,7,opt,name=ReceiptHash,proto3" json:"ReceiptHash,omitempty"` - Extra []byte `protobuf:"bytes,8,opt,name=Extra,proto3" json:"Extra,omitempty"` - Signature []byte `protobuf:"bytes,9,opt,name=Signature,proto3" json:"Signature,omitempty"` - GasLimit uint64 `protobuf:"varint,10,opt,name=GasLimit,proto3" json:"GasLimit,omitempty"` - GasUsed uint64 `protobuf:"varint,11,opt,name=GasUsed,proto3" json:"GasUsed,omitempty"` - Time uint64 `protobuf:"varint,12,opt,name=Time,proto3" json:"Time,omitempty"` - BaseFee uint64 `protobuf:"varint,13,opt,name=BaseFee,proto3" json:"BaseFee,omitempty"` - TransferTree []byte `protobuf:"bytes,17,opt,name=TransferTree,proto3" json:"TransferTree,omitempty"` - Coinbase []byte `protobuf:"bytes,18,opt,name=Coinbase,proto3" json:"Coinbase,omitempty"` - CrossChainTree []byte `protobuf:"bytes,19,opt,name=CrossChainTree,proto3" json:"CrossChainTree,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + ParentHash []byte `protobuf:"bytes,1,opt,name=ParentHash,proto3" json:"ParentHash,omitempty"` + Proof []byte `protobuf:"bytes,2,opt,name=Proof,proto3" json:"Proof,omitempty"` + Root []byte `protobuf:"bytes,3,opt,name=Root,proto3" json:"Root,omitempty"` + TxHash []byte `protobuf:"bytes,4,opt,name=TxHash,proto3" json:"TxHash,omitempty"` + Number uint64 `protobuf:"varint,5,opt,name=Number,proto3" json:"Number,omitempty"` + SequencerOrderNo uint64 `protobuf:"varint,6,opt,name=SequencerOrderNo,proto3" json:"SequencerOrderNo,omitempty"` + ReceiptHash []byte `protobuf:"bytes,7,opt,name=ReceiptHash,proto3" json:"ReceiptHash,omitempty"` + Extra []byte `protobuf:"bytes,8,opt,name=Extra,proto3" json:"Extra,omitempty"` + Signature []byte `protobuf:"bytes,9,opt,name=Signature,proto3" json:"Signature,omitempty"` + GasLimit uint64 `protobuf:"varint,10,opt,name=GasLimit,proto3" json:"GasLimit,omitempty"` + GasUsed uint64 `protobuf:"varint,11,opt,name=GasUsed,proto3" json:"GasUsed,omitempty"` + Time uint64 `protobuf:"varint,12,opt,name=Time,proto3" json:"Time,omitempty"` + BaseFee uint64 `protobuf:"varint,13,opt,name=BaseFee,proto3" json:"BaseFee,omitempty"` + CrossChainRoot []byte `protobuf:"bytes,17,opt,name=CrossChainRoot,proto3" json:"CrossChainRoot,omitempty"` + Coinbase []byte `protobuf:"bytes,18,opt,name=Coinbase,proto3" json:"Coinbase,omitempty"` + CrossChainTree []byte `protobuf:"bytes,19,opt,name=CrossChainTree,proto3" json:"CrossChainTree,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *BatchHeaderMsg) Reset() { *x = BatchHeaderMsg{} - if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[59] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_enclave_proto_msgTypes[60] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *BatchHeaderMsg) String() string { @@ -3053,8 +2936,8 @@ func (x *BatchHeaderMsg) String() string { func (*BatchHeaderMsg) ProtoMessage() {} func (x *BatchHeaderMsg) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[59] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_enclave_proto_msgTypes[60] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -3066,7 +2949,7 @@ func (x *BatchHeaderMsg) ProtoReflect() protoreflect.Message { // Deprecated: Use BatchHeaderMsg.ProtoReflect.Descriptor instead. func (*BatchHeaderMsg) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{59} + return file_enclave_proto_rawDescGZIP(), []int{60} } func (x *BatchHeaderMsg) GetParentHash() []byte { @@ -3160,9 +3043,9 @@ func (x *BatchHeaderMsg) GetBaseFee() uint64 { return 0 } -func (x *BatchHeaderMsg) GetTransferTree() []byte { +func (x *BatchHeaderMsg) GetCrossChainRoot() []byte { if x != nil { - return x.TransferTree + return x.CrossChainRoot } return nil } @@ -3182,22 +3065,19 @@ func (x *BatchHeaderMsg) GetCrossChainTree() []byte { } type ExtRollupMsg struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Header *RollupHeaderMsg `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"` - BatchPayloads []byte `protobuf:"bytes,2,opt,name=batchPayloads,proto3" json:"batchPayloads,omitempty"` - CalldataRollupHeader []byte `protobuf:"bytes,3,opt,name=calldataRollupHeader,proto3" json:"calldataRollupHeader,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Header *RollupHeaderMsg `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"` + BatchPayloads []byte `protobuf:"bytes,2,opt,name=batchPayloads,proto3" json:"batchPayloads,omitempty"` + CalldataRollupHeader []byte `protobuf:"bytes,3,opt,name=calldataRollupHeader,proto3" json:"calldataRollupHeader,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ExtRollupMsg) Reset() { *x = ExtRollupMsg{} - if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[60] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_enclave_proto_msgTypes[61] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ExtRollupMsg) String() string { @@ -3207,8 +3087,8 @@ func (x *ExtRollupMsg) String() string { func (*ExtRollupMsg) ProtoMessage() {} func (x *ExtRollupMsg) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[60] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_enclave_proto_msgTypes[61] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -3220,7 +3100,7 @@ func (x *ExtRollupMsg) ProtoReflect() protoreflect.Message { // Deprecated: Use ExtRollupMsg.ProtoReflect.Descriptor instead. func (*ExtRollupMsg) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{60} + return file_enclave_proto_rawDescGZIP(), []int{61} } func (x *ExtRollupMsg) GetHeader() *RollupHeaderMsg { @@ -3245,28 +3125,26 @@ func (x *ExtRollupMsg) GetCalldataRollupHeader() []byte { } type RollupHeaderMsg struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ParentHash []byte `protobuf:"bytes,1,opt,name=ParentHash,proto3" json:"ParentHash,omitempty"` - CompressionL1Head []byte `protobuf:"bytes,2,opt,name=CompressionL1Head,proto3" json:"CompressionL1Head,omitempty"` - ProofNumber uint64 `protobuf:"varint,3,opt,name=ProofNumber,proto3" json:"ProofNumber,omitempty"` - Number uint64 `protobuf:"varint,4,opt,name=Number,proto3" json:"Number,omitempty"` - Time uint64 `protobuf:"varint,5,opt,name=Time,proto3" json:"Time,omitempty"` - EnclaveID []byte `protobuf:"bytes,6,opt,name=EnclaveID,proto3" json:"EnclaveID,omitempty"` - CrossChainMessages []*CrossChainMsg `protobuf:"bytes,7,rep,name=CrossChainMessages,proto3" json:"CrossChainMessages,omitempty"` - Signature []byte `protobuf:"bytes,8,opt,name=Signature,proto3" json:"Signature,omitempty"` - LastBatchSeqNo uint64 `protobuf:"varint,9,opt,name=LastBatchSeqNo,proto3" json:"LastBatchSeqNo,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + ParentHash []byte `protobuf:"bytes,1,opt,name=ParentHash,proto3" json:"ParentHash,omitempty"` + CompressionL1Head []byte `protobuf:"bytes,2,opt,name=CompressionL1Head,proto3" json:"CompressionL1Head,omitempty"` + CompressionL1Number []byte `protobuf:"bytes,3,opt,name=CompressionL1Number,proto3" json:"CompressionL1Number,omitempty"` + ProofNumber uint64 `protobuf:"varint,4,opt,name=ProofNumber,proto3" json:"ProofNumber,omitempty"` + Number uint64 `protobuf:"varint,5,opt,name=Number,proto3" json:"Number,omitempty"` + Time uint64 `protobuf:"varint,6,opt,name=Time,proto3" json:"Time,omitempty"` + EnclaveID []byte `protobuf:"bytes,7,opt,name=EnclaveID,proto3" json:"EnclaveID,omitempty"` + Signature []byte `protobuf:"bytes,8,opt,name=Signature,proto3" json:"Signature,omitempty"` + LastBatchSeqNo uint64 `protobuf:"varint,9,opt,name=LastBatchSeqNo,proto3" json:"LastBatchSeqNo,omitempty"` + CrossChainRoot []byte `protobuf:"bytes,10,opt,name=CrossChainRoot,proto3" json:"CrossChainRoot,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RollupHeaderMsg) Reset() { *x = RollupHeaderMsg{} - if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[61] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_enclave_proto_msgTypes[62] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *RollupHeaderMsg) String() string { @@ -3276,8 +3154,8 @@ func (x *RollupHeaderMsg) String() string { func (*RollupHeaderMsg) ProtoMessage() {} func (x *RollupHeaderMsg) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[61] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_enclave_proto_msgTypes[62] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -3289,7 +3167,7 @@ func (x *RollupHeaderMsg) ProtoReflect() protoreflect.Message { // Deprecated: Use RollupHeaderMsg.ProtoReflect.Descriptor instead. func (*RollupHeaderMsg) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{61} + return file_enclave_proto_rawDescGZIP(), []int{62} } func (x *RollupHeaderMsg) GetParentHash() []byte { @@ -3306,6 +3184,13 @@ func (x *RollupHeaderMsg) GetCompressionL1Head() []byte { return nil } +func (x *RollupHeaderMsg) GetCompressionL1Number() []byte { + if x != nil { + return x.CompressionL1Number + } + return nil +} + func (x *RollupHeaderMsg) GetProofNumber() uint64 { if x != nil { return x.ProofNumber @@ -3334,13 +3219,6 @@ func (x *RollupHeaderMsg) GetEnclaveID() []byte { return nil } -func (x *RollupHeaderMsg) GetCrossChainMessages() []*CrossChainMsg { - if x != nil { - return x.CrossChainMessages - } - return nil -} - func (x *RollupHeaderMsg) GetSignature() []byte { if x != nil { return x.Signature @@ -3355,25 +3233,29 @@ func (x *RollupHeaderMsg) GetLastBatchSeqNo() uint64 { return 0 } +func (x *RollupHeaderMsg) GetCrossChainRoot() []byte { + if x != nil { + return x.CrossChainRoot + } + return nil +} + type SecretResponseMsg struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Secret []byte `protobuf:"bytes,1,opt,name=Secret,proto3" json:"Secret,omitempty"` + RequesterID []byte `protobuf:"bytes,2,opt,name=RequesterID,proto3" json:"RequesterID,omitempty"` + AttesterID []byte `protobuf:"bytes,3,opt,name=AttesterID,proto3" json:"AttesterID,omitempty"` + HostAddress string `protobuf:"bytes,4,opt,name=HostAddress,proto3" json:"HostAddress,omitempty"` + SystemError *SystemError `protobuf:"bytes,5,opt,name=systemError,proto3" json:"systemError,omitempty"` unknownFields protoimpl.UnknownFields - - Secret []byte `protobuf:"bytes,1,opt,name=Secret,proto3" json:"Secret,omitempty"` - RequesterID []byte `protobuf:"bytes,2,opt,name=RequesterID,proto3" json:"RequesterID,omitempty"` - AttesterID []byte `protobuf:"bytes,3,opt,name=AttesterID,proto3" json:"AttesterID,omitempty"` - HostAddress string `protobuf:"bytes,4,opt,name=HostAddress,proto3" json:"HostAddress,omitempty"` - SystemError *SystemError `protobuf:"bytes,5,opt,name=systemError,proto3" json:"systemError,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SecretResponseMsg) Reset() { *x = SecretResponseMsg{} - if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[62] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_enclave_proto_msgTypes[63] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *SecretResponseMsg) String() string { @@ -3383,8 +3265,8 @@ func (x *SecretResponseMsg) String() string { func (*SecretResponseMsg) ProtoMessage() {} func (x *SecretResponseMsg) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[62] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_enclave_proto_msgTypes[63] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -3396,7 +3278,7 @@ func (x *SecretResponseMsg) ProtoReflect() protoreflect.Message { // Deprecated: Use SecretResponseMsg.ProtoReflect.Descriptor instead. func (*SecretResponseMsg) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{62} + return file_enclave_proto_rawDescGZIP(), []int{63} } func (x *SecretResponseMsg) GetSecret() []byte { @@ -3435,22 +3317,19 @@ func (x *SecretResponseMsg) GetSystemError() *SystemError { } type WithdrawalMsg struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Amount []byte `protobuf:"bytes,1,opt,name=amount,proto3" json:"amount,omitempty"` + Recipient []byte `protobuf:"bytes,2,opt,name=recipient,proto3" json:"recipient,omitempty"` + Contract []byte `protobuf:"bytes,3,opt,name=contract,proto3" json:"contract,omitempty"` unknownFields protoimpl.UnknownFields - - Amount []byte `protobuf:"bytes,1,opt,name=amount,proto3" json:"amount,omitempty"` - Recipient []byte `protobuf:"bytes,2,opt,name=recipient,proto3" json:"recipient,omitempty"` - Contract []byte `protobuf:"bytes,3,opt,name=contract,proto3" json:"contract,omitempty"` + sizeCache protoimpl.SizeCache } func (x *WithdrawalMsg) Reset() { *x = WithdrawalMsg{} - if protoimpl.UnsafeEnabled { - mi := &file_enclave_proto_msgTypes[63] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_enclave_proto_msgTypes[64] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *WithdrawalMsg) String() string { @@ -3460,8 +3339,8 @@ func (x *WithdrawalMsg) String() string { func (*WithdrawalMsg) ProtoMessage() {} func (x *WithdrawalMsg) ProtoReflect() protoreflect.Message { - mi := &file_enclave_proto_msgTypes[63] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_enclave_proto_msgTypes[64] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -3473,7 +3352,7 @@ func (x *WithdrawalMsg) ProtoReflect() protoreflect.Message { // Deprecated: Use WithdrawalMsg.ProtoReflect.Descriptor instead. func (*WithdrawalMsg) Descriptor() ([]byte, []int) { - return file_enclave_proto_rawDescGZIP(), []int{63} + return file_enclave_proto_rawDescGZIP(), []int{64} } func (x *WithdrawalMsg) GetAmount() []byte { @@ -3791,252 +3670,263 @@ var file_enclave_proto_rawDesc = []byte{ 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, 0xd8, 0x03, 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, 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, 0x12, 0x26, 0x0a, 0x0e, 0x43, 0x72, 0x6f, 0x73, 0x73, - 0x43, 0x68, 0x61, 0x69, 0x6e, 0x54, 0x72, 0x65, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x0e, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x54, 0x72, 0x65, 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, 0xa9, 0x10, 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, 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, 0x5d, 0x0a, 0x10, 0x52, 0x50, 0x43, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x4b, 0x65, 0x79, 0x12, 0x22, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, - 0x2e, 0x52, 0x50, 0x43, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x65, - 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, - 0x61, 0x74, 0x65, 0x64, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x4b, 0x65, 0x79, 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, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x12, 0x47, 0x0a, 0x0c, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x52, 0x50, - 0x43, 0x12, 0x19, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x45, 0x6e, - 0x63, 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x67, - 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x45, 0x6e, 0x63, 0x43, 0x61, 0x6c, 0x6c, - 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, 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, 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, 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, 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, - 0x69, 0x0a, 0x14, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43, 0x68, - 0x61, 0x69, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x26, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, - 0x74, 0x65, 0x64, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43, - 0x68, 0x61, 0x69, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x27, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x45, 0x78, 0x70, 0x6f, - 0x72, 0x74, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x44, 0x61, 0x74, 0x61, - 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, 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, 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, 0x12, 0x4b, 0x0a, 0x0a, 0x4d, 0x61, - 0x6b, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x1c, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, - 0x61, 0x74, 0x65, 0x64, 0x2e, 0x4d, 0x61, 0x6b, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, - 0x65, 0x64, 0x2e, 0x4d, 0x61, 0x6b, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 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, + 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x46, + 0x0a, 0x1c, 0x45, 0x78, 0x74, 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x73, 0x67, 0x12, 0x26, + 0x0a, 0x0e, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x54, 0x72, 0x65, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x61, + 0x69, 0x6e, 0x54, 0x72, 0x65, 0x65, 0x22, 0xff, 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, 0x12, 0x4f, 0x0a, 0x0e, 0x72, 0x6f, 0x6c, 0x6c, 0x75, + 0x70, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x27, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x45, 0x78, 0x74, 0x52, + 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x73, 0x67, 0x52, 0x0e, 0x72, 0x6f, 0x6c, 0x6c, 0x75, 0x70, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 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, 0xdc, 0x03, + 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, 0x26, 0x0a, 0x0e, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x6f, + 0x6f, 0x74, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43, + 0x68, 0x61, 0x69, 0x6e, 0x52, 0x6f, 0x6f, 0x74, 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, 0x12, 0x26, 0x0a, 0x0e, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x61, + 0x69, 0x6e, 0x54, 0x72, 0x65, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x43, 0x72, + 0x6f, 0x73, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x54, 0x72, 0x65, 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, 0xeb, 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, 0x30, 0x0a, + 0x13, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x31, 0x4e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x13, 0x43, 0x6f, 0x6d, 0x70, + 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x31, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, + 0x20, 0x0a, 0x0b, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x04, + 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, 0x05, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x06, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x69, 0x6d, + 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1c, 0x0a, + 0x09, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x49, 0x44, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x09, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x49, 0x44, 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, 0x12, 0x26, 0x0a, 0x0e, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, + 0x6f, 0x6f, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x43, 0x72, 0x6f, 0x73, 0x73, + 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x6f, 0x6f, 0x74, 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, 0xa9, 0x10, 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, 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, 0x5d, 0x0a, + 0x10, 0x52, 0x50, 0x43, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x65, + 0x79, 0x12, 0x22, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x52, 0x50, + 0x43, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, + 0x64, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x4b, + 0x65, 0x79, 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, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x47, + 0x0a, 0x0c, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x52, 0x50, 0x43, 0x12, 0x19, + 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x45, 0x6e, 0x63, 0x43, 0x61, + 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x67, 0x65, 0x6e, 0x65, + 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x45, 0x6e, 0x63, 0x43, 0x61, 0x6c, 0x6c, 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, 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, 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, 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, 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, 0x69, 0x0a, 0x14, + 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, + 0x44, 0x61, 0x74, 0x61, 0x12, 0x26, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, + 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x61, 0x69, + 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x67, + 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x43, + 0x72, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x44, 0x61, 0x74, 0x61, 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, 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, + 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, 0x12, 0x4b, 0x0a, 0x0a, 0x4d, 0x61, 0x6b, 0x65, 0x41, + 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x1c, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, + 0x64, 0x2e, 0x4d, 0x61, 0x6b, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, + 0x4d, 0x61, 0x6b, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 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 ( @@ -4051,8 +3941,8 @@ func file_enclave_proto_rawDescGZIP() []byte { return file_enclave_proto_rawDescData } -var file_enclave_proto_msgTypes = make([]protoimpl.MessageInfo, 65) -var file_enclave_proto_goTypes = []interface{}{ +var file_enclave_proto_msgTypes = make([]protoimpl.MessageInfo, 66) +var file_enclave_proto_goTypes = []any{ (*EnclavePublicConfigRequest)(nil), // 0: generated.EnclavePublicConfigRequest (*EnclavePublicConfigResponse)(nil), // 1: generated.EnclavePublicConfigResponse (*GetBatchRequest)(nil), // 2: generated.GetBatchRequest @@ -4108,26 +3998,27 @@ var file_enclave_proto_goTypes = []interface{}{ (*HealthCheckResponse)(nil), // 52: generated.HealthCheckResponse (*EmptyArgs)(nil), // 53: generated.EmptyArgs (*AttestationReportMsg)(nil), // 54: generated.AttestationReportMsg - (*BlockSubmissionResponseMsg)(nil), // 55: generated.BlockSubmissionResponseMsg - (*BlockSubmissionErrorMsg)(nil), // 56: generated.BlockSubmissionErrorMsg - (*CrossChainMsg)(nil), // 57: generated.CrossChainMsg - (*ExtBatchMsg)(nil), // 58: generated.ExtBatchMsg - (*BatchHeaderMsg)(nil), // 59: generated.BatchHeaderMsg - (*ExtRollupMsg)(nil), // 60: generated.ExtRollupMsg - (*RollupHeaderMsg)(nil), // 61: generated.RollupHeaderMsg - (*SecretResponseMsg)(nil), // 62: generated.SecretResponseMsg - (*WithdrawalMsg)(nil), // 63: generated.WithdrawalMsg - nil, // 64: generated.EnclavePublicConfigResponse.PublicSystemContractsEntry + (*ExtRollupMetadataResponseMsg)(nil), // 55: generated.ExtRollupMetadataResponseMsg + (*BlockSubmissionResponseMsg)(nil), // 56: generated.BlockSubmissionResponseMsg + (*BlockSubmissionErrorMsg)(nil), // 57: generated.BlockSubmissionErrorMsg + (*CrossChainMsg)(nil), // 58: generated.CrossChainMsg + (*ExtBatchMsg)(nil), // 59: generated.ExtBatchMsg + (*BatchHeaderMsg)(nil), // 60: generated.BatchHeaderMsg + (*ExtRollupMsg)(nil), // 61: generated.ExtRollupMsg + (*RollupHeaderMsg)(nil), // 62: generated.RollupHeaderMsg + (*SecretResponseMsg)(nil), // 63: generated.SecretResponseMsg + (*WithdrawalMsg)(nil), // 64: generated.WithdrawalMsg + nil, // 65: generated.EnclavePublicConfigResponse.PublicSystemContractsEntry } var file_enclave_proto_depIdxs = []int32{ - 64, // 0: generated.EnclavePublicConfigResponse.publicSystemContracts:type_name -> generated.EnclavePublicConfigResponse.PublicSystemContractsEntry + 65, // 0: generated.EnclavePublicConfigResponse.publicSystemContracts:type_name -> generated.EnclavePublicConfigResponse.PublicSystemContractsEntry 11, // 1: generated.EnclavePublicConfigResponse.systemError:type_name -> generated.SystemError 11, // 2: generated.GetBatchResponse.systemError:type_name -> generated.SystemError 7, // 3: generated.GetRollupDataResponse.msg:type_name -> generated.PublicRollupDataMsg 11, // 4: generated.GetRollupDataResponse.systemError:type_name -> generated.SystemError 11, // 5: generated.GetTotalContractCountResponse.systemError:type_name -> generated.SystemError 11, // 6: generated.DebugTraceTransactionResponse.systemError:type_name -> generated.SystemError - 60, // 7: generated.CreateRollupResponse.msg:type_name -> generated.ExtRollupMsg + 61, // 7: generated.CreateRollupResponse.msg:type_name -> generated.ExtRollupMsg 11, // 8: generated.CreateRollupResponse.systemError:type_name -> generated.SystemError 11, // 9: generated.StatusResponse.systemError:type_name -> generated.SystemError 11, // 10: generated.MakeActiveResponse.systemError:type_name -> generated.SystemError @@ -4138,10 +4029,10 @@ var file_enclave_proto_depIdxs = []int32{ 11, // 15: generated.EnclaveIDResponse.systemError:type_name -> generated.SystemError 11, // 16: generated.RPCEncryptionKeyResponse.systemError:type_name -> generated.SystemError 11, // 17: generated.StartResponse.systemError:type_name -> generated.SystemError - 55, // 18: generated.SubmitBlockResponse.blockSubmissionResponse:type_name -> generated.BlockSubmissionResponseMsg + 56, // 18: generated.SubmitBlockResponse.blockSubmissionResponse:type_name -> generated.BlockSubmissionResponseMsg 11, // 19: generated.SubmitBlockResponse.systemError:type_name -> generated.SystemError 11, // 20: generated.EncCallResponse.systemError:type_name -> generated.SystemError - 58, // 21: generated.SubmitBatchRequest.batch:type_name -> generated.ExtBatchMsg + 59, // 21: generated.SubmitBatchRequest.batch:type_name -> generated.ExtBatchMsg 11, // 22: generated.SubmitBatchResponse.systemError:type_name -> generated.SystemError 11, // 23: generated.StopResponse.systemError:type_name -> generated.SystemError 11, // 24: generated.GetCodeResponse.systemError:type_name -> generated.SystemError @@ -4149,11 +4040,11 @@ var file_enclave_proto_depIdxs = []int32{ 11, // 26: generated.UnsubscribeResponse.systemError:type_name -> generated.SystemError 11, // 27: generated.HealthCheckResponse.systemError:type_name -> generated.SystemError 11, // 28: generated.AttestationReportMsg.systemError:type_name -> generated.SystemError - 62, // 29: generated.BlockSubmissionResponseMsg.producedSecretResponses:type_name -> generated.SecretResponseMsg - 56, // 30: generated.BlockSubmissionResponseMsg.error:type_name -> generated.BlockSubmissionErrorMsg - 59, // 31: generated.ExtBatchMsg.header:type_name -> generated.BatchHeaderMsg - 61, // 32: generated.ExtRollupMsg.header:type_name -> generated.RollupHeaderMsg - 57, // 33: generated.RollupHeaderMsg.CrossChainMessages:type_name -> generated.CrossChainMsg + 63, // 29: generated.BlockSubmissionResponseMsg.producedSecretResponses:type_name -> generated.SecretResponseMsg + 57, // 30: generated.BlockSubmissionResponseMsg.error:type_name -> generated.BlockSubmissionErrorMsg + 55, // 31: generated.BlockSubmissionResponseMsg.rollupMetadata:type_name -> generated.ExtRollupMetadataResponseMsg + 60, // 32: generated.ExtBatchMsg.header:type_name -> generated.BatchHeaderMsg + 62, // 33: generated.ExtRollupMsg.header:type_name -> generated.RollupHeaderMsg 11, // 34: generated.SecretResponseMsg.systemError:type_name -> generated.SystemError 22, // 35: generated.EnclaveProto.Status:input_type -> generated.StatusRequest 26, // 36: generated.EnclaveProto.Attestation:input_type -> generated.AttestationRequest @@ -4217,784 +4108,14 @@ func file_enclave_proto_init() { if File_enclave_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_enclave_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EnclavePublicConfigRequest); 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.(*EnclavePublicConfigResponse); 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.(*GetBatchRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_enclave_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetBatchBySeqNoRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_enclave_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetBatchResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_enclave_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetRollupDataRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_enclave_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetRollupDataResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_enclave_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PublicRollupDataMsg); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_enclave_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StreamL2UpdatesRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_enclave_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EncodedUpdateResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_enclave_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Pagination); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_enclave_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SystemError); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_enclave_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetTotalContractCountRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_enclave_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetTotalContractCountResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_enclave_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DebugTraceTransactionRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_enclave_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DebugTraceTransactionResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_enclave_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateBatchRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_enclave_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateBatchResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_enclave_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateRollupRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_enclave_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateRollupResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_enclave_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExportCrossChainDataRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_enclave_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExportCrossChainDataResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_enclave_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StatusRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_enclave_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StatusResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_enclave_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MakeActiveRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_enclave_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MakeActiveResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_enclave_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AttestationRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_enclave_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AttestationResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_enclave_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GenerateSecretRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_enclave_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GenerateSecretResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_enclave_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*InitEnclaveRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_enclave_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*InitEnclaveResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_enclave_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EnclaveIDRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_enclave_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EnclaveIDResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_enclave_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RPCEncryptionKeyRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_enclave_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RPCEncryptionKeyResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_enclave_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StartRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_enclave_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StartResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_enclave_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SubmitBlockRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_enclave_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SubmitBlockResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_enclave_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EncCallRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_enclave_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EncCallResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_enclave_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SubmitBatchRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_enclave_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SubmitBatchResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_enclave_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StopRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_enclave_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StopResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_enclave_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetCodeRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_enclave_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetCodeResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_enclave_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SubscribeRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_enclave_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SubscribeResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_enclave_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UnsubscribeRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_enclave_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UnsubscribeResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_enclave_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*HealthCheckResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_enclave_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EmptyArgs); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_enclave_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AttestationReportMsg); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_enclave_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BlockSubmissionResponseMsg); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_enclave_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BlockSubmissionErrorMsg); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_enclave_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CrossChainMsg); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_enclave_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExtBatchMsg); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_enclave_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BatchHeaderMsg); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_enclave_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExtRollupMsg); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_enclave_proto_msgTypes[61].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RollupHeaderMsg); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_enclave_proto_msgTypes[62].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SecretResponseMsg); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_enclave_proto_msgTypes[63].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WithdrawalMsg); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - file_enclave_proto_msgTypes[18].OneofWrappers = []interface{}{} + file_enclave_proto_msgTypes[18].OneofWrappers = []any{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_enclave_proto_rawDesc, NumEnums: 0, - NumMessages: 65, + NumMessages: 66, NumExtensions: 0, NumServices: 1, }, diff --git a/go/common/rpc/generated/enclave.proto b/go/common/rpc/generated/enclave.proto index 8185b7e795..f8b3960fc7 100644 --- a/go/common/rpc/generated/enclave.proto +++ b/go/common/rpc/generated/enclave.proto @@ -250,9 +250,15 @@ message AttestationReportMsg { SystemError systemError = 5; } + +message ExtRollupMetadataResponseMsg { + bytes CrossChainTree = 1; +} + message BlockSubmissionResponseMsg { repeated SecretResponseMsg producedSecretResponses = 1; BlockSubmissionErrorMsg error = 2; // todo (@matt) - remove this BlockSubmissionError field once we are using the Status() to update host view of enclave state + repeated ExtRollupMetadataResponseMsg rollupMetadata = 3; } message BlockSubmissionErrorMsg { @@ -288,7 +294,7 @@ message BatchHeaderMsg { uint64 GasUsed = 11; uint64 Time = 12; uint64 BaseFee = 13; - bytes TransferTree = 17; + bytes CrossChainRoot = 17; bytes Coinbase = 18; bytes CrossChainTree = 19; } @@ -302,13 +308,14 @@ message ExtRollupMsg { message RollupHeaderMsg { bytes ParentHash = 1; bytes CompressionL1Head = 2; - uint64 ProofNumber = 3; - uint64 Number = 4; - uint64 Time = 5; - bytes EnclaveID = 6; - repeated CrossChainMsg CrossChainMessages = 7; + bytes CompressionL1Number = 3; + uint64 ProofNumber = 4; + uint64 Number = 5; + uint64 Time = 6; + bytes EnclaveID = 7; bytes Signature = 8; uint64 LastBatchSeqNo = 9; + bytes CrossChainRoot = 10; } message SecretResponseMsg { diff --git a/go/common/rpc/generated/enclave_grpc.pb.go b/go/common/rpc/generated/enclave_grpc.pb.go index a529926b89..7f9f2891a9 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.5.1 +// - protoc v3.21.12 // source: enclave.proto package generated @@ -15,8 +15,36 @@ import ( // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.32.0 or later. -const _ = grpc.SupportPackageIsVersion7 +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 + +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_RPCEncryptionKey_FullMethodName = "/generated.EnclaveProto/RPCEncryptionKey" + EnclaveProto_SubmitL1Block_FullMethodName = "/generated.EnclaveProto/SubmitL1Block" + EnclaveProto_EncryptedRPC_FullMethodName = "/generated.EnclaveProto/EncryptedRPC" + EnclaveProto_SubmitBatch_FullMethodName = "/generated.EnclaveProto/SubmitBatch" + EnclaveProto_Stop_FullMethodName = "/generated.EnclaveProto/Stop" + EnclaveProto_GetCode_FullMethodName = "/generated.EnclaveProto/GetCode" + EnclaveProto_Subscribe_FullMethodName = "/generated.EnclaveProto/Subscribe" + EnclaveProto_Unsubscribe_FullMethodName = "/generated.EnclaveProto/Unsubscribe" + 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_ExportCrossChainData_FullMethodName = "/generated.EnclaveProto/ExportCrossChainData" + EnclaveProto_DebugTraceTransaction_FullMethodName = "/generated.EnclaveProto/DebugTraceTransaction" + EnclaveProto_StreamL2Updates_FullMethodName = "/generated.EnclaveProto/StreamL2Updates" + EnclaveProto_GetTotalContractCount_FullMethodName = "/generated.EnclaveProto/GetTotalContractCount" + EnclaveProto_EnclavePublicConfig_FullMethodName = "/generated.EnclaveProto/EnclavePublicConfig" + EnclaveProto_MakeActive_FullMethodName = "/generated.EnclaveProto/MakeActive" +) // EnclaveProtoClient is the client API for EnclaveProto service. // @@ -43,7 +71,7 @@ type EnclaveProtoClient interface { CreateRollup(ctx context.Context, in *CreateRollupRequest, opts ...grpc.CallOption) (*CreateRollupResponse, error) ExportCrossChainData(ctx context.Context, in *ExportCrossChainDataRequest, opts ...grpc.CallOption) (*ExportCrossChainDataResponse, error) DebugTraceTransaction(ctx context.Context, in *DebugTraceTransactionRequest, opts ...grpc.CallOption) (*DebugTraceTransactionResponse, error) - StreamL2Updates(ctx context.Context, in *StreamL2UpdatesRequest, opts ...grpc.CallOption) (EnclaveProto_StreamL2UpdatesClient, error) + StreamL2Updates(ctx context.Context, in *StreamL2UpdatesRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[EncodedUpdateResponse], error) GetTotalContractCount(ctx context.Context, in *GetTotalContractCountRequest, opts ...grpc.CallOption) (*GetTotalContractCountResponse, error) EnclavePublicConfig(ctx context.Context, in *EnclavePublicConfigRequest, opts ...grpc.CallOption) (*EnclavePublicConfigResponse, error) MakeActive(ctx context.Context, in *MakeActiveRequest, opts ...grpc.CallOption) (*MakeActiveResponse, error) @@ -58,8 +86,9 @@ func NewEnclaveProtoClient(cc grpc.ClientConnInterface) EnclaveProtoClient { } func (c *enclaveProtoClient) Status(ctx context.Context, in *StatusRequest, opts ...grpc.CallOption) (*StatusResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(StatusResponse) - err := c.cc.Invoke(ctx, "/generated.EnclaveProto/Status", in, out, opts...) + err := c.cc.Invoke(ctx, EnclaveProto_Status_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -67,8 +96,9 @@ func (c *enclaveProtoClient) Status(ctx context.Context, in *StatusRequest, opts } func (c *enclaveProtoClient) Attestation(ctx context.Context, in *AttestationRequest, opts ...grpc.CallOption) (*AttestationResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(AttestationResponse) - err := c.cc.Invoke(ctx, "/generated.EnclaveProto/Attestation", in, out, opts...) + err := c.cc.Invoke(ctx, EnclaveProto_Attestation_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -76,8 +106,9 @@ func (c *enclaveProtoClient) Attestation(ctx context.Context, in *AttestationReq } func (c *enclaveProtoClient) GenerateSecret(ctx context.Context, in *GenerateSecretRequest, opts ...grpc.CallOption) (*GenerateSecretResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(GenerateSecretResponse) - err := c.cc.Invoke(ctx, "/generated.EnclaveProto/GenerateSecret", in, out, opts...) + err := c.cc.Invoke(ctx, EnclaveProto_GenerateSecret_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -85,8 +116,9 @@ func (c *enclaveProtoClient) GenerateSecret(ctx context.Context, in *GenerateSec } func (c *enclaveProtoClient) InitEnclave(ctx context.Context, in *InitEnclaveRequest, opts ...grpc.CallOption) (*InitEnclaveResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(InitEnclaveResponse) - err := c.cc.Invoke(ctx, "/generated.EnclaveProto/InitEnclave", in, out, opts...) + err := c.cc.Invoke(ctx, EnclaveProto_InitEnclave_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -94,8 +126,9 @@ func (c *enclaveProtoClient) InitEnclave(ctx context.Context, in *InitEnclaveReq } func (c *enclaveProtoClient) EnclaveID(ctx context.Context, in *EnclaveIDRequest, opts ...grpc.CallOption) (*EnclaveIDResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(EnclaveIDResponse) - err := c.cc.Invoke(ctx, "/generated.EnclaveProto/EnclaveID", in, out, opts...) + err := c.cc.Invoke(ctx, EnclaveProto_EnclaveID_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -103,8 +136,9 @@ func (c *enclaveProtoClient) EnclaveID(ctx context.Context, in *EnclaveIDRequest } func (c *enclaveProtoClient) RPCEncryptionKey(ctx context.Context, in *RPCEncryptionKeyRequest, opts ...grpc.CallOption) (*RPCEncryptionKeyResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(RPCEncryptionKeyResponse) - err := c.cc.Invoke(ctx, "/generated.EnclaveProto/RPCEncryptionKey", in, out, opts...) + err := c.cc.Invoke(ctx, EnclaveProto_RPCEncryptionKey_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -112,8 +146,9 @@ func (c *enclaveProtoClient) RPCEncryptionKey(ctx context.Context, in *RPCEncryp } func (c *enclaveProtoClient) SubmitL1Block(ctx context.Context, in *SubmitBlockRequest, opts ...grpc.CallOption) (*SubmitBlockResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(SubmitBlockResponse) - err := c.cc.Invoke(ctx, "/generated.EnclaveProto/SubmitL1Block", in, out, opts...) + err := c.cc.Invoke(ctx, EnclaveProto_SubmitL1Block_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -121,8 +156,9 @@ func (c *enclaveProtoClient) SubmitL1Block(ctx context.Context, in *SubmitBlockR } func (c *enclaveProtoClient) EncryptedRPC(ctx context.Context, in *EncCallRequest, opts ...grpc.CallOption) (*EncCallResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(EncCallResponse) - err := c.cc.Invoke(ctx, "/generated.EnclaveProto/EncryptedRPC", in, out, opts...) + err := c.cc.Invoke(ctx, EnclaveProto_EncryptedRPC_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -130,8 +166,9 @@ func (c *enclaveProtoClient) EncryptedRPC(ctx context.Context, in *EncCallReques } func (c *enclaveProtoClient) SubmitBatch(ctx context.Context, in *SubmitBatchRequest, opts ...grpc.CallOption) (*SubmitBatchResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(SubmitBatchResponse) - err := c.cc.Invoke(ctx, "/generated.EnclaveProto/SubmitBatch", in, out, opts...) + err := c.cc.Invoke(ctx, EnclaveProto_SubmitBatch_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -139,8 +176,9 @@ func (c *enclaveProtoClient) SubmitBatch(ctx context.Context, in *SubmitBatchReq } func (c *enclaveProtoClient) Stop(ctx context.Context, in *StopRequest, opts ...grpc.CallOption) (*StopResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(StopResponse) - err := c.cc.Invoke(ctx, "/generated.EnclaveProto/Stop", in, out, opts...) + err := c.cc.Invoke(ctx, EnclaveProto_Stop_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -148,8 +186,9 @@ func (c *enclaveProtoClient) Stop(ctx context.Context, in *StopRequest, opts ... } func (c *enclaveProtoClient) GetCode(ctx context.Context, in *GetCodeRequest, opts ...grpc.CallOption) (*GetCodeResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(GetCodeResponse) - err := c.cc.Invoke(ctx, "/generated.EnclaveProto/GetCode", in, out, opts...) + err := c.cc.Invoke(ctx, EnclaveProto_GetCode_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -157,8 +196,9 @@ func (c *enclaveProtoClient) GetCode(ctx context.Context, in *GetCodeRequest, op } func (c *enclaveProtoClient) Subscribe(ctx context.Context, in *SubscribeRequest, opts ...grpc.CallOption) (*SubscribeResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(SubscribeResponse) - err := c.cc.Invoke(ctx, "/generated.EnclaveProto/Subscribe", in, out, opts...) + err := c.cc.Invoke(ctx, EnclaveProto_Subscribe_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -166,8 +206,9 @@ func (c *enclaveProtoClient) Subscribe(ctx context.Context, in *SubscribeRequest } func (c *enclaveProtoClient) Unsubscribe(ctx context.Context, in *UnsubscribeRequest, opts ...grpc.CallOption) (*UnsubscribeResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(UnsubscribeResponse) - err := c.cc.Invoke(ctx, "/generated.EnclaveProto/Unsubscribe", in, out, opts...) + err := c.cc.Invoke(ctx, EnclaveProto_Unsubscribe_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -175,8 +216,9 @@ func (c *enclaveProtoClient) Unsubscribe(ctx context.Context, in *UnsubscribeReq } func (c *enclaveProtoClient) HealthCheck(ctx context.Context, in *EmptyArgs, opts ...grpc.CallOption) (*HealthCheckResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(HealthCheckResponse) - err := c.cc.Invoke(ctx, "/generated.EnclaveProto/HealthCheck", in, out, opts...) + err := c.cc.Invoke(ctx, EnclaveProto_HealthCheck_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -184,8 +226,9 @@ func (c *enclaveProtoClient) HealthCheck(ctx context.Context, in *EmptyArgs, opt } func (c *enclaveProtoClient) GetBatch(ctx context.Context, in *GetBatchRequest, opts ...grpc.CallOption) (*GetBatchResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(GetBatchResponse) - err := c.cc.Invoke(ctx, "/generated.EnclaveProto/GetBatch", in, out, opts...) + err := c.cc.Invoke(ctx, EnclaveProto_GetBatch_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -193,8 +236,9 @@ func (c *enclaveProtoClient) GetBatch(ctx context.Context, in *GetBatchRequest, } func (c *enclaveProtoClient) GetBatchBySeqNo(ctx context.Context, in *GetBatchBySeqNoRequest, opts ...grpc.CallOption) (*GetBatchResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(GetBatchResponse) - err := c.cc.Invoke(ctx, "/generated.EnclaveProto/GetBatchBySeqNo", in, out, opts...) + err := c.cc.Invoke(ctx, EnclaveProto_GetBatchBySeqNo_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -202,8 +246,9 @@ func (c *enclaveProtoClient) GetBatchBySeqNo(ctx context.Context, in *GetBatchBy } func (c *enclaveProtoClient) GetRollupData(ctx context.Context, in *GetRollupDataRequest, opts ...grpc.CallOption) (*GetRollupDataResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(GetRollupDataResponse) - err := c.cc.Invoke(ctx, "/generated.EnclaveProto/GetRollupData", in, out, opts...) + err := c.cc.Invoke(ctx, EnclaveProto_GetRollupData_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -211,8 +256,9 @@ func (c *enclaveProtoClient) GetRollupData(ctx context.Context, in *GetRollupDat } func (c *enclaveProtoClient) CreateBatch(ctx context.Context, in *CreateBatchRequest, opts ...grpc.CallOption) (*CreateBatchResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(CreateBatchResponse) - err := c.cc.Invoke(ctx, "/generated.EnclaveProto/CreateBatch", in, out, opts...) + err := c.cc.Invoke(ctx, EnclaveProto_CreateBatch_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -220,8 +266,9 @@ func (c *enclaveProtoClient) CreateBatch(ctx context.Context, in *CreateBatchReq } func (c *enclaveProtoClient) CreateRollup(ctx context.Context, in *CreateRollupRequest, opts ...grpc.CallOption) (*CreateRollupResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(CreateRollupResponse) - err := c.cc.Invoke(ctx, "/generated.EnclaveProto/CreateRollup", in, out, opts...) + err := c.cc.Invoke(ctx, EnclaveProto_CreateRollup_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -229,8 +276,9 @@ func (c *enclaveProtoClient) CreateRollup(ctx context.Context, in *CreateRollupR } func (c *enclaveProtoClient) ExportCrossChainData(ctx context.Context, in *ExportCrossChainDataRequest, opts ...grpc.CallOption) (*ExportCrossChainDataResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(ExportCrossChainDataResponse) - err := c.cc.Invoke(ctx, "/generated.EnclaveProto/ExportCrossChainData", in, out, opts...) + err := c.cc.Invoke(ctx, EnclaveProto_ExportCrossChainData_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -238,20 +286,22 @@ func (c *enclaveProtoClient) ExportCrossChainData(ctx context.Context, in *Expor } func (c *enclaveProtoClient) DebugTraceTransaction(ctx context.Context, in *DebugTraceTransactionRequest, opts ...grpc.CallOption) (*DebugTraceTransactionResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(DebugTraceTransactionResponse) - err := c.cc.Invoke(ctx, "/generated.EnclaveProto/DebugTraceTransaction", in, out, opts...) + err := c.cc.Invoke(ctx, EnclaveProto_DebugTraceTransaction_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } return out, nil } -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...) +func (c *enclaveProtoClient) StreamL2Updates(ctx context.Context, in *StreamL2UpdatesRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[EncodedUpdateResponse], error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + stream, err := c.cc.NewStream(ctx, &EnclaveProto_ServiceDesc.Streams[0], EnclaveProto_StreamL2Updates_FullMethodName, cOpts...) if err != nil { return nil, err } - x := &enclaveProtoStreamL2UpdatesClient{stream} + x := &grpc.GenericClientStream[StreamL2UpdatesRequest, EncodedUpdateResponse]{ClientStream: stream} if err := x.ClientStream.SendMsg(in); err != nil { return nil, err } @@ -261,26 +311,13 @@ func (c *enclaveProtoClient) StreamL2Updates(ctx context.Context, in *StreamL2Up return x, nil } -type EnclaveProto_StreamL2UpdatesClient interface { - Recv() (*EncodedUpdateResponse, error) - grpc.ClientStream -} - -type enclaveProtoStreamL2UpdatesClient struct { - grpc.ClientStream -} - -func (x *enclaveProtoStreamL2UpdatesClient) Recv() (*EncodedUpdateResponse, error) { - m := new(EncodedUpdateResponse) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type EnclaveProto_StreamL2UpdatesClient = grpc.ServerStreamingClient[EncodedUpdateResponse] func (c *enclaveProtoClient) GetTotalContractCount(ctx context.Context, in *GetTotalContractCountRequest, opts ...grpc.CallOption) (*GetTotalContractCountResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(GetTotalContractCountResponse) - err := c.cc.Invoke(ctx, "/generated.EnclaveProto/GetTotalContractCount", in, out, opts...) + err := c.cc.Invoke(ctx, EnclaveProto_GetTotalContractCount_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -288,8 +325,9 @@ func (c *enclaveProtoClient) GetTotalContractCount(ctx context.Context, in *GetT } func (c *enclaveProtoClient) EnclavePublicConfig(ctx context.Context, in *EnclavePublicConfigRequest, opts ...grpc.CallOption) (*EnclavePublicConfigResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(EnclavePublicConfigResponse) - err := c.cc.Invoke(ctx, "/generated.EnclaveProto/EnclavePublicConfig", in, out, opts...) + err := c.cc.Invoke(ctx, EnclaveProto_EnclavePublicConfig_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -297,8 +335,9 @@ func (c *enclaveProtoClient) EnclavePublicConfig(ctx context.Context, in *Enclav } func (c *enclaveProtoClient) MakeActive(ctx context.Context, in *MakeActiveRequest, opts ...grpc.CallOption) (*MakeActiveResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(MakeActiveResponse) - err := c.cc.Invoke(ctx, "/generated.EnclaveProto/MakeActive", in, out, opts...) + err := c.cc.Invoke(ctx, EnclaveProto_MakeActive_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -307,7 +346,7 @@ func (c *enclaveProtoClient) MakeActive(ctx context.Context, in *MakeActiveReque // EnclaveProtoServer is the server API for EnclaveProto service. // All implementations must embed UnimplementedEnclaveProtoServer -// for forward compatibility +// for forward compatibility. type EnclaveProtoServer interface { Status(context.Context, *StatusRequest) (*StatusResponse, error) Attestation(context.Context, *AttestationRequest) (*AttestationResponse, error) @@ -330,16 +369,19 @@ type EnclaveProtoServer interface { CreateRollup(context.Context, *CreateRollupRequest) (*CreateRollupResponse, error) ExportCrossChainData(context.Context, *ExportCrossChainDataRequest) (*ExportCrossChainDataResponse, error) DebugTraceTransaction(context.Context, *DebugTraceTransactionRequest) (*DebugTraceTransactionResponse, error) - StreamL2Updates(*StreamL2UpdatesRequest, EnclaveProto_StreamL2UpdatesServer) error + StreamL2Updates(*StreamL2UpdatesRequest, grpc.ServerStreamingServer[EncodedUpdateResponse]) error GetTotalContractCount(context.Context, *GetTotalContractCountRequest) (*GetTotalContractCountResponse, error) EnclavePublicConfig(context.Context, *EnclavePublicConfigRequest) (*EnclavePublicConfigResponse, error) MakeActive(context.Context, *MakeActiveRequest) (*MakeActiveResponse, error) mustEmbedUnimplementedEnclaveProtoServer() } -// UnimplementedEnclaveProtoServer must be embedded to have forward compatible implementations. -type UnimplementedEnclaveProtoServer struct { -} +// UnimplementedEnclaveProtoServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedEnclaveProtoServer struct{} func (UnimplementedEnclaveProtoServer) Status(context.Context, *StatusRequest) (*StatusResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Status not implemented") @@ -404,7 +446,7 @@ func (UnimplementedEnclaveProtoServer) ExportCrossChainData(context.Context, *Ex func (UnimplementedEnclaveProtoServer) DebugTraceTransaction(context.Context, *DebugTraceTransactionRequest) (*DebugTraceTransactionResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method DebugTraceTransaction not implemented") } -func (UnimplementedEnclaveProtoServer) StreamL2Updates(*StreamL2UpdatesRequest, EnclaveProto_StreamL2UpdatesServer) error { +func (UnimplementedEnclaveProtoServer) StreamL2Updates(*StreamL2UpdatesRequest, grpc.ServerStreamingServer[EncodedUpdateResponse]) error { return status.Errorf(codes.Unimplemented, "method StreamL2Updates not implemented") } func (UnimplementedEnclaveProtoServer) GetTotalContractCount(context.Context, *GetTotalContractCountRequest) (*GetTotalContractCountResponse, error) { @@ -417,6 +459,7 @@ func (UnimplementedEnclaveProtoServer) MakeActive(context.Context, *MakeActiveRe return nil, status.Errorf(codes.Unimplemented, "method MakeActive not implemented") } func (UnimplementedEnclaveProtoServer) mustEmbedUnimplementedEnclaveProtoServer() {} +func (UnimplementedEnclaveProtoServer) testEmbeddedByValue() {} // UnsafeEnclaveProtoServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to EnclaveProtoServer will @@ -426,6 +469,13 @@ type UnsafeEnclaveProtoServer interface { } func RegisterEnclaveProtoServer(s grpc.ServiceRegistrar, srv EnclaveProtoServer) { + // If the following call pancis, it indicates UnimplementedEnclaveProtoServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } s.RegisterService(&EnclaveProto_ServiceDesc, srv) } @@ -439,7 +489,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)) @@ -457,7 +507,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)) @@ -475,7 +525,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)) @@ -493,7 +543,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)) @@ -511,7 +561,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)) @@ -529,7 +579,7 @@ func _EnclaveProto_RPCEncryptionKey_Handler(srv interface{}, ctx context.Context } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/generated.EnclaveProto/RPCEncryptionKey", + FullMethod: EnclaveProto_RPCEncryptionKey_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(EnclaveProtoServer).RPCEncryptionKey(ctx, req.(*RPCEncryptionKeyRequest)) @@ -547,7 +597,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)) @@ -565,7 +615,7 @@ func _EnclaveProto_EncryptedRPC_Handler(srv interface{}, ctx context.Context, de } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/generated.EnclaveProto/EncryptedRPC", + FullMethod: EnclaveProto_EncryptedRPC_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(EnclaveProtoServer).EncryptedRPC(ctx, req.(*EncCallRequest)) @@ -583,7 +633,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)) @@ -601,7 +651,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)) @@ -619,7 +669,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)) @@ -637,7 +687,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)) @@ -655,7 +705,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)) @@ -673,7 +723,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)) @@ -691,7 +741,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)) @@ -709,7 +759,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)) @@ -727,7 +777,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)) @@ -745,7 +795,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)) @@ -763,7 +813,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)) @@ -781,7 +831,7 @@ func _EnclaveProto_ExportCrossChainData_Handler(srv interface{}, ctx context.Con } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/generated.EnclaveProto/ExportCrossChainData", + FullMethod: EnclaveProto_ExportCrossChainData_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(EnclaveProtoServer).ExportCrossChainData(ctx, req.(*ExportCrossChainDataRequest)) @@ -799,7 +849,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)) @@ -812,21 +862,11 @@ func _EnclaveProto_StreamL2Updates_Handler(srv interface{}, stream grpc.ServerSt if err := stream.RecvMsg(m); err != nil { return err } - return srv.(EnclaveProtoServer).StreamL2Updates(m, &enclaveProtoStreamL2UpdatesServer{stream}) -} - -type EnclaveProto_StreamL2UpdatesServer interface { - Send(*EncodedUpdateResponse) error - grpc.ServerStream -} - -type enclaveProtoStreamL2UpdatesServer struct { - grpc.ServerStream + return srv.(EnclaveProtoServer).StreamL2Updates(m, &grpc.GenericServerStream[StreamL2UpdatesRequest, EncodedUpdateResponse]{ServerStream: stream}) } -func (x *enclaveProtoStreamL2UpdatesServer) Send(m *EncodedUpdateResponse) error { - return x.ServerStream.SendMsg(m) -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type EnclaveProto_StreamL2UpdatesServer = grpc.ServerStreamingServer[EncodedUpdateResponse] func _EnclaveProto_GetTotalContractCount_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(GetTotalContractCountRequest) @@ -838,7 +878,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)) @@ -856,7 +896,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)) @@ -874,7 +914,7 @@ func _EnclaveProto_MakeActive_Handler(srv interface{}, ctx context.Context, dec } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/generated.EnclaveProto/MakeActive", + FullMethod: EnclaveProto_MakeActive_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(EnclaveProtoServer).MakeActive(ctx, req.(*MakeActiveRequest)) diff --git a/go/enclave/components/batch_executor.go b/go/enclave/components/batch_executor.go index e49cb32bf2..65566c515c 100644 --- a/go/enclave/components/batch_executor.go +++ b/go/enclave/components/batch_executor.go @@ -678,7 +678,7 @@ func (executor *batchExecutor) populateOutboundCrossChainData(ctx context.Contex hasMessages = true } - xchainHash := gethcommon.BigToHash(gethcommon.Big0) + xchainHash := gethcommon.MaxHash if hasMessages { tree, err := smt.Of(xchainTree, crosschain.CrossChainEncodings) if err != nil { diff --git a/go/enclave/components/interfaces.go b/go/enclave/components/interfaces.go index 75d0f835fc..0958d537b3 100644 --- a/go/enclave/components/interfaces.go +++ b/go/enclave/components/interfaces.go @@ -155,7 +155,7 @@ type RollupProducer interface { type RollupConsumer interface { // ProcessRollups - extracts the blob hashes from the block's transactions and builds the blob hashes from the blobs, // compares this with the hashes seen in the block. - ProcessRollups(ctx context.Context, rollups []*common.ExtRollup) error + ProcessRollups(ctx context.Context, rollups []*common.ExtRollup) ([]common.ExtRollupMetadata, error) // GetRollupsFromL1Data - GetRollupsFromL1Data(processed *common.ProcessedL1Data) ([]*common.ExtRollup, error) } diff --git a/go/enclave/components/rollup_consumer.go b/go/enclave/components/rollup_consumer.go index c75c8444dc..b66523654f 100644 --- a/go/enclave/components/rollup_consumer.go +++ b/go/enclave/components/rollup_consumer.go @@ -7,7 +7,9 @@ import ( "github.com/ethereum/go-ethereum/crypto/kzg4844" gethcommon "github.com/ethereum/go-ethereum/common" + "github.com/ten-protocol/go-ten/go/common/errutil" "github.com/ten-protocol/go-ten/go/common/measure" + "github.com/ten-protocol/go-ten/go/common/merkle" "github.com/ten-protocol/go-ten/go/enclave/core" "github.com/ten-protocol/go-ten/go/enclave/storage" "github.com/ten-protocol/go-ten/go/ethadapter" @@ -49,10 +51,11 @@ func NewRollupConsumer( } // ProcessRollups - processes the rollups found in the block, verifies the rollups and stores them -func (rc *rollupConsumerImpl) ProcessRollups(ctx context.Context, rollups []*common.ExtRollup) error { +func (rc *rollupConsumerImpl) ProcessRollups(ctx context.Context, rollups []*common.ExtRollup) ([]common.ExtRollupMetadata, error) { defer core.LogMethodDuration(rc.logger, measure.NewStopwatch(), "Rollup consumer processed blobs") - for _, rollup := range rollups { + rollupMetadata := make([]common.ExtRollupMetadata, len(rollups)) + for idx, rollup := range rollups { l1CompressionBlock, err := rc.storage.FetchBlock(ctx, rollup.Header.CompressionL1Head) if err != nil { rc.logger.Warn("Can't process rollup because the l1 block used for compression is not available", "block_hash", rollup.Header.CompressionL1Head, log.RollupHashKey, rollup.Hash(), log.ErrKey, err) @@ -60,10 +63,10 @@ func (rc *rollupConsumerImpl) ProcessRollups(ctx context.Context, rollups []*com } canonicalBlockByHeight, err := rc.storage.FetchCanonicaBlockByHeight(ctx, l1CompressionBlock.Number) if err != nil { - return err + return nil, err } if canonicalBlockByHeight.Hash() != l1CompressionBlock.Hash() { - rc.logger.Warn("Skipping rollup because it was compressed on top of a non-canonical rollup", "block_hash", rollup.Header.CompressionL1Head, log.RollupHashKey, rollup.Hash(), log.ErrKey, err) + rc.logger.Warn("Skipping rollup because it was compressed on top of a non-canonical block", "block_hash", rollup.Header.CompressionL1Head, log.RollupHashKey, rollup.Hash(), log.ErrKey, err) continue } // read batch data from rollup, verify and store it @@ -71,15 +74,47 @@ func (rc *rollupConsumerImpl) ProcessRollups(ctx context.Context, rollups []*com if err != nil { rc.logger.Error("Failed processing rollup", log.RollupHashKey, rollup.Hash(), log.ErrKey, err) // todo - issue challenge as a validator - return err + return nil, err } if err := rc.storage.StoreRollup(ctx, rollup, internalHeader); err != nil { rc.logger.Error("Failed storing rollup", log.RollupHashKey, rollup.Hash(), log.ErrKey, err) - return err + return nil, err + } + + serializedTree, err := rc.ExportAndVerifyCrossChainData(ctx, internalHeader.FirstBatchSequence.Uint64(), rollup.Header.LastBatchSeqNo, rollup.Header.CrossChainRoot) + if err != nil { + rc.logger.Error("Failed exporting and verifying cross chain data", log.RollupHashKey, rollup.Hash(), log.ErrKey, err) + return nil, err + } + + rollupMetadata[idx] = common.ExtRollupMetadata{ + CrossChainTree: serializedTree, } } - return nil + if len(rollupMetadata) < len(rollups) { + return nil, fmt.Errorf("missing metadata for some rollups") + } + + return rollupMetadata, nil +} + +func (rc *rollupConsumerImpl) ExportAndVerifyCrossChainData(ctx context.Context, fromSeqNo uint64, toSeqNo uint64, publishedCrossChainRoot gethcommon.Hash) (common.SerializedCrossChainTree, error) { + batches, err := rc.storage.FetchCanonicalBatchesBetween(ctx, fromSeqNo, toSeqNo) + if err != nil { + return nil, err + } + + localCrossChainRoot, serializedTree, err := merkle.ComputeCrossChainRootFromBatches(batches) + if err != nil { + return nil, err + } + + if localCrossChainRoot != publishedCrossChainRoot { + return nil, errutil.ErrCrossChainRootMismatch + } + + return serializedTree, nil } // GetRollupsFromL1Data - extracts the rollups from the processed L1 data and checks sequencer signature on them diff --git a/go/enclave/components/rollup_producer.go b/go/enclave/components/rollup_producer.go index d60f2d9562..82db4766aa 100644 --- a/go/enclave/components/rollup_producer.go +++ b/go/enclave/components/rollup_producer.go @@ -7,6 +7,7 @@ import ( "github.com/ethereum/go-ethereum/core/types" + "github.com/ten-protocol/go-ten/go/common/merkle" "github.com/ten-protocol/go-ten/go/enclave/storage" gethlog "github.com/ethereum/go-ethereum/log" @@ -53,6 +54,7 @@ func (re *rollupProducerImpl) CreateInternalRollup(ctx context.Context, fromBatc rh := common.RollupHeader{} rh.CompressionL1Head = block.Hash() + rh.CompressionL1Number = block.Number lastBatch := batches[len(batches)-1] rh.LastBatchSeqNo = lastBatch.SeqNo().Uint64() @@ -62,6 +64,13 @@ func (re *rollupProducerImpl) CreateInternalRollup(ctx context.Context, fromBatc blockMap[b.Hash()] = b } + exportedCrossChainRoot, err := exportCrossChainData(ctx, re.storage, batches[0].SeqNo().Uint64(), rh.LastBatchSeqNo) + if err != nil { + return nil, err + } + + rh.CrossChainRoot = *exportedCrossChainRoot + newRollup := &core.Rollup{ Header: &rh, Blocks: blockMap, @@ -72,3 +81,17 @@ func (re *rollupProducerImpl) CreateInternalRollup(ctx context.Context, fromBatc return newRollup, nil } + +func exportCrossChainData(ctx context.Context, storage storage.Storage, fromSeqNo uint64, toSeqNo uint64) (*gethcommon.Hash, error) { + canonicalBatches, err := storage.FetchCanonicalBatchesBetween((ctx), fromSeqNo, toSeqNo) + if err != nil { + return nil, err + } + + root, _, err := merkle.ComputeCrossChainRootFromBatches(canonicalBatches) + if err != nil { + return nil, err + } + + return &root, nil +} diff --git a/go/enclave/enclave_admin_service.go b/go/enclave/enclave_admin_service.go index 7194c18696..dfaac969f9 100644 --- a/go/enclave/enclave_admin_service.go +++ b/go/enclave/enclave_admin_service.go @@ -172,7 +172,7 @@ func (e *enclaveAdminService) SubmitL1Block(ctx context.Context, blockData *comm // TODO verify proof provided with block blockData.Proof - result, err := e.ingestL1Block(ctx, blockData) + result, rollupMetadata, err := e.ingestL1Block(ctx, blockData) if err != nil { return nil, e.rejectBlockErr(ctx, fmt.Errorf("could not submit L1 block. Cause: %w", err)) } @@ -186,7 +186,10 @@ func (e *enclaveAdminService) SubmitL1Block(ctx context.Context, blockData *comm return nil, e.rejectBlockErr(ctx, fmt.Errorf("could not submit L1 block. Cause: %w", err)) } - bsr := &common.BlockSubmissionResponse{ProducedSecretResponses: e.sharedSecretProcessor.ProcessNetworkSecretMsgs(ctx, blockData)} + bsr := &common.BlockSubmissionResponse{ + ProducedSecretResponses: e.sharedSecretProcessor.ProcessNetworkSecretMsgs(ctx, blockData), + RollupMetadata: rollupMetadata, + } return bsr, nil } @@ -465,12 +468,12 @@ func (e *enclaveAdminService) streamEventsForNewHeadBatch(ctx context.Context, b } } -func (e *enclaveAdminService) ingestL1Block(ctx context.Context, processed *common.ProcessedL1Data) (*components.BlockIngestionType, error) { +func (e *enclaveAdminService) ingestL1Block(ctx context.Context, processed *common.ProcessedL1Data) (*components.BlockIngestionType, []common.ExtRollupMetadata, error) { e.logger.Info("Start ingesting block", log.BlockHashKey, processed.BlockHeader.Hash()) rollups, err := e.rollupConsumer.GetRollupsFromL1Data(processed) if err != nil { // early return before storing block if multiple rollups are found in the block - return nil, err + return nil, nil, err } ingestion, err := e.l1BlockProcessor.Process(ctx, processed) if err != nil { @@ -480,10 +483,10 @@ func (e *enclaveAdminService) ingestL1Block(ctx context.Context, processed *comm } else { e.logger.Warn("Failed ingesting block", log.ErrKey, err, log.BlockHashKey, processed.BlockHeader.Hash()) } - return nil, err + return nil, nil, err } - err = e.rollupConsumer.ProcessRollups(ctx, rollups) + rollupMetadata, err := e.rollupConsumer.ProcessRollups(ctx, rollups) if err != nil && !errors.Is(err, components.ErrDuplicateRollup) { e.logger.Error("Encountered error while processing l1 block rollups", log.ErrKey, err) // Unsure what to do here; block has been stored @@ -504,10 +507,10 @@ func (e *enclaveAdminService) ingestL1Block(ctx context.Context, processed *comm e.registry.OnL1Reorg(ingestion) err := e.service.OnL1Fork(ctx, ingestion.ChainFork) if err != nil { - return nil, err + return nil, nil, err } } - return ingestion, nil + return ingestion, rollupMetadata, nil } func (e *enclaveAdminService) rejectBlockErr(ctx context.Context, cause error) *errutil.BlockRejectError { diff --git a/go/ethadapter/mgmtcontractlib/mgmt_contract_lib.go b/go/ethadapter/mgmtcontractlib/mgmt_contract_lib.go index a0bd6fe90c..8cf550bd69 100644 --- a/go/ethadapter/mgmtcontractlib/mgmt_contract_lib.go +++ b/go/ethadapter/mgmtcontractlib/mgmt_contract_lib.go @@ -125,6 +125,9 @@ func (c *contractLibImpl) CreateBlobRollup(t *common.L1RollupTx) (types.TxData, Hash: decodedRollup.Hash(), Signature: decodedRollup.Header.Signature, LastSequenceNumber: big.NewInt(int64(decodedRollup.Header.LastBatchSeqNo)), + BlockBindingHash: decodedRollup.Header.CompressionL1Head, + BlockBindingNumber: decodedRollup.Header.CompressionL1Number, + CrossChainRoot: decodedRollup.Header.CrossChainRoot, } data, err := c.contractABI.Pack( diff --git a/go/host/enclave/guardian.go b/go/host/enclave/guardian.go index f13723cbc8..d266594ecb 100644 --- a/go/host/enclave/guardian.go +++ b/go/host/enclave/guardian.go @@ -50,7 +50,6 @@ type guardianServiceLocator interface { L2Repo() host.L2BatchRepository LogSubs() host.LogSubscriptionManager Enclaves() host.EnclaveService - CrossChainMachine() l1.CrossChainStateMachine } // Guardian is a host service which monitors an enclave, it's responsibilities include: @@ -497,7 +496,7 @@ func (g *Guardian) submitL1Block(block *types.Header, isLatest bool) (bool, erro } // successfully processed block, update the state g.state.OnProcessedBlock(block.Hash()) - g.processL1BlockTransactions(block, rollupTxs, syncContracts) + g.processL1BlockTransactions(block, resp.RollupMetadata, rollupTxs, syncContracts) // todo: make sure this doesn't respond to old requests (once we have a proper protocol for that) err = g.publishSharedSecretResponses(resp.ProducedSecretResponses) @@ -507,14 +506,14 @@ func (g *Guardian) submitL1Block(block *types.Header, isLatest bool) (bool, erro return true, nil } -func (g *Guardian) processL1BlockTransactions(block *types.Header, rollupTxs []*common.L1RollupTx, syncContracts bool) { +func (g *Guardian) processL1BlockTransactions(block *types.Header, metadatas []common.ExtRollupMetadata, rollupTxs []*common.L1RollupTx, syncContracts bool) { // TODO (@will) this should be removed and pulled from the L1 err := g.storage.AddBlock(block) if err != nil { g.logger.Error("Could not add block to host db.", log.ErrKey, err) } - for _, rollup := range rollupTxs { + for idx, rollup := range rollupTxs { r, err := common.DecodeRollup(rollup.Rollup) if err != nil { g.logger.Error("Could not decode rollup.", log.ErrKey, err) @@ -524,7 +523,12 @@ func (g *Guardian) processL1BlockTransactions(block *types.Header, rollupTxs []* if err != nil { g.logger.Error("Could not fetch rollup metadata from enclave.", log.ErrKey, err) } else { - err = g.storage.AddRollup(r, metaData, block) + // TODO - This is a temporary fix, arrays should always match in practice... + extMetadata := common.ExtRollupMetadata{} + if len(metadatas) > idx { + extMetadata = metadatas[idx] + } + err = g.storage.AddRollup(r, &extMetadata, metaData, block) } if err != nil { if errors.Is(err, errutil.ErrAlreadyExists) { @@ -676,39 +680,6 @@ func (g *Guardian) periodicRollupProduction() { } } -func (g *Guardian) periodicBundleSubmission() { - defer g.logger.Info("Stopping bundle submission") - - interval := g.crossChainInterval - g.logger.Info("Starting cross chain bundle submission", "interval", interval) - - bundleSubmissionTicker := time.NewTicker(interval) - - for { - select { - case <-bundleSubmissionTicker.C: - err := g.sl.CrossChainMachine().Synchronize() - if err != nil { - g.logger.Error("Failed to synchronize cross chain state machine", log.ErrKey, err) - continue - } - - err = g.sl.CrossChainMachine().PublishNextBundle() - if err != nil { - if errors.Is(err, errutil.ErrCrossChainBundleNoBatches) { - g.logger.Debug("No batches to publish") - } else { - g.logger.Error("Failed to publish next bundle", log.ErrKey, err) - } - continue - } - case <-g.hostInterrupter.Done(): - bundleSubmissionTicker.Stop() - return - } - } -} - func (g *Guardian) streamEnclaveData() { defer g.logger.Info("Stopping enclave data stream") g.logger.Info("Starting L2 update stream from enclave") @@ -803,7 +774,6 @@ func (g *Guardian) getLatestBatchNo() (uint64, error) { func (g *Guardian) startSequencerProcesses() { go g.periodicBatchProduction() go g.periodicRollupProduction() - go g.periodicBundleSubmission() } // evictEnclaveFromHAPool evicts a failing enclave from the HA pool if appropriate diff --git a/go/host/host.go b/go/host/host.go index 4d24db1b86..a032406c8b 100644 --- a/go/host/host.go +++ b/go/host/host.go @@ -117,8 +117,6 @@ func NewHost(config *hostconfig.HostConfig, hostServices *ServicesRegistry, p2p hostServices.RegisterService(hostcommon.L2BatchRepositoryName, l2Repo) hostServices.RegisterService(hostcommon.EnclaveServiceName, enclService) hostServices.RegisterService(hostcommon.LogSubscriptionServiceName, subsService) - l1StateMachine := l1.NewCrossChainStateMachine(l1Publisher, mgmtContractLib, ethClient, hostServices.Enclaves().GetEnclaveClient(), logger, host.stopControl) - hostServices.RegisterService(hostcommon.CrossChainServiceName, l1StateMachine) var prof *profiler.Profiler if config.ProfilerEnabled { diff --git a/go/host/l1/publisher.go b/go/host/l1/publisher.go index 223d660b18..03ba801e5a 100644 --- a/go/host/l1/publisher.go +++ b/go/host/l1/publisher.go @@ -10,12 +10,9 @@ import ( "github.com/ten-protocol/go-ten/go/common/gethutil" - "github.com/ten-protocol/go-ten/contracts/generated/ManagementContract" - "github.com/ten-protocol/go-ten/go/common/errutil" "github.com/ten-protocol/go-ten/go/common/stopcontrol" "github.com/ten-protocol/go-ten/go/host/storage" - "github.com/ethereum/go-ethereum/accounts/abi/bind" gethcommon "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" gethlog "github.com/ethereum/go-ethereum/log" @@ -104,48 +101,6 @@ func (p *Publisher) Start() error { return nil } -func (p *Publisher) GetBundleRangeFromManagementContract(lastRollupNumber *big.Int, lastRollupUID gethcommon.Hash) (*gethcommon.Hash, *big.Int, *big.Int, error) { - if p.mgmtContractLib.IsMock() { - return nil, nil, nil, fmt.Errorf("bundle publishing unavailable for mocked environments") - } - - managementCtr, err := ManagementContract.NewManagementContract(*p.mgmtContractLib.GetContractAddr(), p.ethClient.EthClient()) - if err != nil { - p.logger.Error("Unable to instantiate management contract client") - return nil, nil, nil, err - } - - hashBytes, rollup, err := managementCtr.GetUniqueForkID(&bind.CallOpts{}, lastRollupNumber) - if err != nil { - p.logger.Error("Unable to get unique fork ID from management contract") - return nil, nil, nil, err - } - - rollupUid := gethcommon.BytesToHash(hashBytes[:]) - if rollupUid != lastRollupUID { - return nil, nil, nil, errutil.ErrRollupForkMismatch - } - - fromSeqNo := big.NewInt(0) - if lastRollupNumber.Cmp(big.NewInt(0)) != 0 { - fromSeqNo = big.NewInt(0).SetUint64(rollup.LastSequenceNumber.Uint64() + 1) - } - - nextRollupNumber := big.NewInt(0).SetUint64(lastRollupNumber.Uint64() + 1) - nextHashBytes, nextRollup, err := managementCtr.GetUniqueForkID(&bind.CallOpts{}, nextRollupNumber) - if err != nil { - p.logger.Error("Unable to get unique fork ID from management contract") - return nil, nil, nil, err - } - - nextRollupUID := gethcommon.BytesToHash(nextHashBytes[:]) - if nextRollupUID.Big().Cmp(gethcommon.Big0) == 0 { - return nil, nil, nil, errutil.ErrNoNextRollup - } - - return &nextRollupUID, fromSeqNo, nextRollup.LastSequenceNumber, nil -} - func (p *Publisher) Stop() error { p.sendingCtxCancel() return nil @@ -284,69 +239,6 @@ func (p *Publisher) PublishRollup(producedRollup *common.ExtRollup) { } func (p *Publisher) PublishCrossChainBundle(bundle *common.ExtCrossChainBundle, rollupNum *big.Int, forkID gethcommon.Hash) error { - if p.mgmtContractLib.IsMock() { - return nil - } - - managementCtr, err := ManagementContract.NewManagementContract(*p.mgmtContractLib.GetContractAddr(), p.ethClient.EthClient()) - if err != nil { - p.logger.Error("Unable to instantiate management contract client") - return fmt.Errorf("unable to init") - } - - transactor, err := bind.NewKeyedTransactorWithChainID(p.hostWallet.PrivateKey(), p.hostWallet.ChainID()) - if err != nil { - p.logger.Error("Unable to create transactor for management contract") - return fmt.Errorf("unable to init") - } - - p.logger.Info("Host preparing to send cross chain bundle transaction") - p.sendingLock.Lock() - defer p.sendingLock.Unlock() - - nonce, err := p.ethClient.EthClient().PendingNonceAt(context.Background(), p.hostWallet.Address()) - if err != nil { - p.logger.Error("Unable to get nonce for management contract", log.ErrKey, err) - return fmt.Errorf("unable to get nonce for management contract. Cause: %w", err) - } - - // When the host is publishing a bundle, we have to run gas estimation. - // If there is no new block it might run with the previous block as current which - // would be the same as the binding, leading to a edge case where the signature cannot - // be verified. - for { - block, err := p.ethClient.EthClient().BlockByNumber(context.Background(), nil) - if err != nil { - p.logger.Error("Unable to get latest block", log.ErrKey, err) - return fmt.Errorf("unable to get latest block. Cause: %w", err) - } - if block.NumberU64() == bundle.L1BlockNum.Uint64() { - time.Sleep(1 * time.Second) - continue - } - break - } - - transactor.Nonce = big.NewInt(0).SetUint64(nonce) - - tx, err := managementCtr.AddCrossChainMessagesRoot(transactor, [32]byte(bundle.LastBatchHash.Bytes()), bundle.L1BlockHash, bundle.L1BlockNum, bundle.CrossChainRootHashes, bundle.Signature, rollupNum, forkID) - if err != nil { - if errors.Is(err, errutil.ErrCrossChainBundleRepublished) { - p.logger.Info("Cross chain bundle already published. Proceeding without publishing", log.ErrKey, err, log.BundleHashKey, bundle.LastBatchHash) - return nil - } - - p.hostWallet.SetNonce(p.hostWallet.GetNonce() - 1) - return fmt.Errorf("unable to submit cross chain bundle transaction. Cause: %w", err) - } - - err = p.awaitTransaction(tx) - if err != nil { - p.logger.Error("Error with receipt of cross chain publish transaction", log.TxKey, tx.Hash(), log.ErrKey, err) - return fmt.Errorf("unable to get receipt for cross chain bundle transaction. Cause: %w", err) - } - - p.logger.Info("Successfully submitted bundle", log.BundleHashKey, bundle.LastBatchHash, "bundleRoots", bundle.CrossChainRootHashes.ToHexString(), "managementContract", *p.mgmtContractLib.GetContractAddr()) return nil } @@ -468,27 +360,3 @@ func (p *Publisher) publishTransaction(tx types.TxData) error { } return nil } - -func (p *Publisher) awaitTransaction(tx *types.Transaction) error { - var receipt *types.Receipt - var err error - err = retry.Do( - func() error { - receipt, err = p.ethClient.TransactionReceipt(tx.Hash()) - if err != nil { - return fmt.Errorf("could not get receipt for xchain L1 tx=%s: %w", tx.Hash(), err) - } - return err - }, - retry.NewTimeoutStrategy(p.maxWaitForL1Receipt, p.retryIntervalForL1Receipt), - ) - if err != nil { - p.logger.Info("Receipt not found for transaction, we will re-attempt", log.ErrKey, err) - return err - } - - if err == nil && receipt.Status != types.ReceiptStatusSuccessful { - return fmt.Errorf("unsuccessful receipt found for published L1 transaction, status=%d", receipt.Status) - } - return nil -} diff --git a/go/host/l1/statemachine.go b/go/host/l1/statemachine.go deleted file mode 100644 index 8e4f630dc8..0000000000 --- a/go/host/l1/statemachine.go +++ /dev/null @@ -1,225 +0,0 @@ -package l1 - -import ( - "context" - "errors" - "math/big" - - "github.com/ten-protocol/go-ten/go/common/gethutil" - - "github.com/ethereum/go-ethereum/accounts/abi/bind" - gethcommon "github.com/ethereum/go-ethereum/common" - gethlog "github.com/ethereum/go-ethereum/log" - "github.com/ten-protocol/go-ten/contracts/generated/ManagementContract" - "github.com/ten-protocol/go-ten/go/common" - "github.com/ten-protocol/go-ten/go/common/errutil" - "github.com/ten-protocol/go-ten/go/common/host" - "github.com/ten-protocol/go-ten/go/common/stopcontrol" - "github.com/ten-protocol/go-ten/go/ethadapter" - "github.com/ten-protocol/go-ten/go/ethadapter/mgmtcontractlib" - "google.golang.org/grpc/status" -) - -type ( - ForkUniqueID = gethcommon.Hash - RollupNumber = uint64 -) - -type CrossChainStateMachine interface { - GetRollupData(number RollupNumber) (RollupInfo, error) - Synchronize() error - PublishNextBundle() error - host.Service -} - -// crossChainStateMachine - responsible for maintaining a view of the submitted cross chain bundles for the rollups on the L1. -// Whenever a reorg happens, the state machine will revert to the latest known common ancestor rollup. -// Bundles are only submitted after a rollup is pushed on the L1. The state machine will keep track of the latest rollup and the bundles that have been submitted. -type crossChainStateMachine struct { - latestRollup RollupInfo - rollupHistory map[RollupNumber]RollupInfo - currentRollup RollupNumber - - enclaveClient common.Enclave - publisher host.L1Publisher - ethClient ethadapter.EthClient - mgmtContractLib mgmtcontractlib.MgmtContractLib // Library to handle Management Contract lib operations - logger gethlog.Logger - hostStopper *stopcontrol.StopControl -} - -type RollupInfo struct { - ForkUID ForkUniqueID - Number RollupNumber -} - -func NewCrossChainStateMachine( - publisher host.L1Publisher, - mgmtContractLib mgmtcontractlib.MgmtContractLib, - ethClient ethadapter.EthClient, - enclaveClient common.Enclave, - logger gethlog.Logger, - hostStopper *stopcontrol.StopControl, -) CrossChainStateMachine { - return &crossChainStateMachine{ - latestRollup: RollupInfo{ - ForkUID: gethutil.EmptyHash, - Number: 0, - }, - rollupHistory: make(map[RollupNumber]RollupInfo), - currentRollup: 0, - publisher: publisher, - ethClient: ethClient, - mgmtContractLib: mgmtContractLib, - enclaveClient: enclaveClient, - logger: logger, - hostStopper: hostStopper, - } -} - -func (c *crossChainStateMachine) Start() error { - return nil -} - -func (c *crossChainStateMachine) Stop() error { - return nil -} - -func (c *crossChainStateMachine) HealthStatus(context.Context) host.HealthStatus { - errMsg := "" - if c.hostStopper.IsStopping() { - errMsg = "not running" - } - return &host.BasicErrHealthStatus{ErrMsg: errMsg} -} - -func (c *crossChainStateMachine) GetRollupData(number RollupNumber) (RollupInfo, error) { - if number == c.latestRollup.Number { - return c.latestRollup, nil - } else if number > c.latestRollup.Number { - return RollupInfo{}, errutil.ErrNotFound - } else { - return c.rollupHistory[number], nil - } -} - -func (c *crossChainStateMachine) PublishNextBundle() error { - // If all bundles for the rollups have been published, there is nothing to do. - if c.currentRollup >= c.latestRollup.Number { - return nil - } - - // Get the bundle range from the management contract - nextForkUID, begin, end, err := c.publisher.GetBundleRangeFromManagementContract(big.NewInt(0).SetUint64(c.currentRollup), c.rollupHistory[c.currentRollup].ForkUID) - if err != nil { - return err - } - - data, err := c.GetRollupData(c.currentRollup + 1) - if err != nil { - return err - } - if data.ForkUID != *nextForkUID { - return errutil.ErrRollupForkMismatch - } - - bundle, err := c.enclaveClient.ExportCrossChainData(context.Background(), begin.Uint64(), end.Uint64()) - if err != nil { - s, ok := status.FromError(err) - if ok && errors.Is(s.Err(), errutil.ErrCrossChainBundleNoBatches) { - c.currentRollup++ - return nil - } - return err - } - - alreadyPublished, err := c.IsBundleAlreadyPublished(bundle) - if err != nil { - return err - } - - if alreadyPublished { - c.currentRollup++ - return nil - } - - err = c.publisher.PublishCrossChainBundle(bundle, big.NewInt(0).SetUint64(data.Number), data.ForkUID) - if err != nil { - return err - } - - // Move the current rollup to the next rollup - c.currentRollup++ - - return nil -} - -func (c *crossChainStateMachine) IsBundleAlreadyPublished(bundle *common.ExtCrossChainBundle) (bool, error) { - managementContract, err := ManagementContract.NewManagementContract(*c.mgmtContractLib.GetContractAddr(), c.ethClient.EthClient()) - if err != nil { - return false, err - } - - return managementContract.IsBundleAvailable(&bind.CallOpts{}, bundle.CrossChainRootHashes) -} - -// Synchronize - checks if there are any new rollups or forks and moves the tracking needle to the latest common ancestor. -func (c *crossChainStateMachine) Synchronize() error { - forkUID, _, _, err := c.publisher.GetBundleRangeFromManagementContract(big.NewInt(0).SetUint64(c.latestRollup.Number), c.latestRollup.ForkUID) - if err != nil { - if errors.Is(err, errutil.ErrNoNextRollup) { - c.logger.Debug("No new rollup or fork found") - return nil - } - - if errors.Is(err, errutil.ErrRollupForkMismatch) { - return c.revertToLatestKnownCommonAncestorRollup() - } - - c.logger.Error("Failed to get bundle range from management contract", "error", err) - return err - } - - c.rollupHistory[c.latestRollup.Number] = c.latestRollup - c.latestRollup = RollupInfo{ - ForkUID: *forkUID, - Number: c.latestRollup.Number + 1, - } - - c.logger.Info("Synchronized rollup state machine", "latestRollup", c.latestRollup.Number, "forkUID", c.latestRollup.ForkUID.String()) - return nil -} - -func (c *crossChainStateMachine) revertToLatestKnownCommonAncestorRollup() error { - managementContract, err := ManagementContract.NewManagementContract(*c.mgmtContractLib.GetContractAddr(), c.ethClient.EthClient()) - if err != nil { - return err - } - - hashBytes, _, err := managementContract.GetUniqueForkID(&bind.CallOpts{}, big.NewInt(0).SetUint64(c.latestRollup.Number)) - if err != nil { - return err - } - - var forkHash gethcommon.Hash - forkHash = gethcommon.BytesToHash(hashBytes[:]) - - for forkHash != c.latestRollup.ForkUID { - // Revert to previous rollup; No need to wipe the map as the synchronization reinserts the latest rollup - c.latestRollup = c.rollupHistory[c.latestRollup.Number-1] // go to previous rollup - - hashBytes, _, err = managementContract.GetUniqueForkID(&bind.CallOpts{}, big.NewInt(0).SetUint64(c.latestRollup.Number)) - if err != nil { - return err - } - - forkHash = gethcommon.BytesToHash(hashBytes[:]) - } - - // Rollback current rollup if it was dumped due to a fork. - if c.currentRollup > c.latestRollup.Number { - c.currentRollup = c.latestRollup.Number - } - - return nil -} diff --git a/go/host/rpc/clientapi/client_api_ten.go b/go/host/rpc/clientapi/client_api_ten.go index 96012a8e7a..d33110a1cb 100644 --- a/go/host/rpc/clientapi/client_api_ten.go +++ b/go/host/rpc/clientapi/client_api_ten.go @@ -4,7 +4,9 @@ import ( "context" "fmt" + "github.com/ethereum/go-ethereum/common/hexutil" gethlog "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/rlp" "github.com/ten-protocol/go-ten/go/common/log" "github.com/ten-protocol/go-ten/go/responses" @@ -58,6 +60,26 @@ func (api *TenAPI) RpcKey() ([]byte, error) { return api.rpcKey, nil } +type CrossChainProof struct { + Proof hexutil.Bytes + Root gethcommon.Hash +} + +func (api *TenAPI) GetCrossChainProof(ctx context.Context, messageType string, crossChainMessage gethcommon.Hash) (CrossChainProof, error) { + proof, root, err := api.host.Storage().FetchCrossChainProof(messageType, crossChainMessage) + if err != nil { + return CrossChainProof{}, err + } + encodedProof, err := rlp.EncodeToBytes(proof) + if err != nil { + return CrossChainProof{}, err + } + return CrossChainProof{ + Proof: encodedProof, + Root: root, + }, nil +} + func (api *TenAPI) EncryptedRPC(ctx context.Context, encryptedParams common.EncryptedRPCRequest) (responses.EnclaveResponse, error) { var enclaveResponse *responses.EnclaveResponse var sysError error diff --git a/go/host/servicelocator.go b/go/host/servicelocator.go index 3e15656717..26bc49babd 100644 --- a/go/host/servicelocator.go +++ b/go/host/servicelocator.go @@ -3,7 +3,6 @@ package host import ( "github.com/ethereum/go-ethereum/log" hostcommon "github.com/ten-protocol/go-ten/go/common/host" - "github.com/ten-protocol/go-ten/go/host/l1" ) type ServicesRegistry struct { @@ -60,7 +59,3 @@ func (s *ServicesRegistry) Enclaves() hostcommon.EnclaveService { func (s *ServicesRegistry) LogSubs() hostcommon.LogSubscriptionManager { return s.getService(hostcommon.LogSubscriptionServiceName).(hostcommon.LogSubscriptionManager) } - -func (s *ServicesRegistry) CrossChainMachine() l1.CrossChainStateMachine { - return s.getService(hostcommon.CrossChainServiceName).(l1.CrossChainStateMachine) -} diff --git a/go/host/storage/hostdb/block_test.go b/go/host/storage/hostdb/block_test.go index e127883aae..2374abdc17 100644 --- a/go/host/storage/hostdb/block_test.go +++ b/go/host/storage/hostdb/block_test.go @@ -9,6 +9,7 @@ import ( "time" gethcommon "github.com/ethereum/go-ethereum/common" + "github.com/ten-protocol/go-ten/go/common" "github.com/ethereum/go-ethereum/core/types" ) @@ -77,7 +78,7 @@ func TestAddBlockWithForeignKeyConstraint(t *testing.T) { dbtx, _ = db.NewDBTransaction() // add rollup referencing block - err = AddRollup(dbtx, db.GetSQLStatement(), &rollup, &metadata, block.Header()) + err = AddRollup(dbtx, db.GetSQLStatement(), &rollup, &common.ExtRollupMetadata{}, &metadata, block.Header()) if err != nil { t.Errorf("could not store rollup. Cause: %s", err) } diff --git a/go/host/storage/hostdb/rollup.go b/go/host/storage/hostdb/rollup.go index bc996ffefa..048dcc5867 100644 --- a/go/host/storage/hostdb/rollup.go +++ b/go/host/storage/hostdb/rollup.go @@ -11,6 +11,7 @@ import ( "github.com/pkg/errors" "github.com/ten-protocol/go-ten/go/common" "github.com/ten-protocol/go-ten/go/common/errutil" + "github.com/ten-protocol/go-ten/go/common/merkle" gethcommon "github.com/ethereum/go-ethereum/common" ) @@ -24,7 +25,7 @@ const ( ) // AddRollup adds a rollup to the DB -func AddRollup(dbtx *dbTransaction, statements *SQLStatements, rollup *common.ExtRollup, metadata *common.PublicRollupMetadata, block *types.Header) error { +func AddRollup(dbtx *dbTransaction, statements *SQLStatements, rollup *common.ExtRollup, extMetadata *common.ExtRollupMetadata, metadata *common.PublicRollupMetadata, block *types.Header) error { extRollup, err := rlp.EncodeToBytes(rollup) if err != nil { return fmt.Errorf("could not encode rollup: %w", err) @@ -36,7 +37,7 @@ func AddRollup(dbtx *dbTransaction, statements *SQLStatements, rollup *common.Ex return fmt.Errorf("could not read block id: %w", err) } - _, err = dbtx.Tx.Exec(statements.InsertRollup, + result, err := dbtx.Tx.Exec(statements.InsertRollup, rollup.Header.Hash().Bytes(), // hash metadata.FirstBatchSequence.Uint64(), // first batch sequence rollup.Header.LastBatchSeqNo, // last batch sequence @@ -47,6 +48,33 @@ func AddRollup(dbtx *dbTransaction, statements *SQLStatements, rollup *common.Ex if err != nil { return fmt.Errorf("could not insert rollup. Cause: %w", err) } + + rollupId, err := result.LastInsertId() + if err != nil { + return fmt.Errorf("could not get rollup insertion id: %w", err) + } + + if len(extMetadata.CrossChainTree) == 0 { + return nil + } + + tree, err := merkle.UnmarshalCrossChainTree(extMetadata.CrossChainTree) + if err != nil { + return err + } + + for _, message := range tree { + _, err = dbtx.Tx.Exec(statements.InsertCrossChainMessage, + message[1].(gethcommon.Hash).Bytes(), + message[0], + rollupId, + ) + + if err != nil { + return err + } + } + return nil } @@ -141,6 +169,42 @@ func GetRollupBySeqNo(db HostDB, seqNo uint64) (*common.PublicRollup, error) { return fetchPublicRollup(db.GetSQLDB(), whereQuery, seqNo) } +func GetCrossChainMessagesTree(db HostDB, messageHash gethcommon.Hash) ([][]interface{}, error) { + // First get the rollupID for this message hash + var rollupID int64 + messageQuery := "SELECT rollup_id FROM cross_chain_message_host WHERE message_hash = " + db.GetSQLStatement().Placeholder + err := db.GetSQLDB().QueryRow(messageQuery, messageHash.Bytes()).Scan(&rollupID) + if err != nil { + if errors.Is(err, sql.ErrNoRows) { + return nil, errutil.ErrNotFound + } + return nil, fmt.Errorf("failed to fetch rollup ID for message: %w", err) + } + + // Get all messages with the same rollupID + messagesQuery := "SELECT message_hash, message_type FROM cross_chain_message_host WHERE rollup_id = " + db.GetSQLStatement().Placeholder + rows, err := db.GetSQLDB().Query(messagesQuery, rollupID) + if err != nil { + return nil, fmt.Errorf("failed to fetch cross chain messages: %w", err) + } + defer rows.Close() + + var messages [][]interface{} + for rows.Next() { + var messageHash []byte + var messageType string + if err := rows.Scan(&messageHash, &messageType); err != nil { + return nil, fmt.Errorf("failed to scan cross chain message row: %w", err) + } + messages = append(messages, []interface{}{messageType, messageHash}) + } + + if err := rows.Err(); err != nil { + return nil, err + } + return messages, nil +} + func GetRollupBatches(db HostDB, rollupHash gethcommon.Hash) (*common.BatchListingResponse, error) { whereQuery := " WHERE r.hash=" + db.GetSQLStatement().Placeholder orderQuery := " ORDER BY b.height DESC" diff --git a/go/host/storage/hostdb/rollup_test.go b/go/host/storage/hostdb/rollup_test.go index ff869092e6..24be67b4d7 100644 --- a/go/host/storage/hostdb/rollup_test.go +++ b/go/host/storage/hostdb/rollup_test.go @@ -28,7 +28,7 @@ func TestCanStoreAndRetrieveRollup(t *testing.T) { } dbtx.Write() dbtx, _ = db.NewDBTransaction() - err = AddRollup(dbtx, db.GetSQLStatement(), &rollup, &metadata, block.Header()) + err = AddRollup(dbtx, db.GetSQLStatement(), &rollup, &common.ExtRollupMetadata{}, &metadata, block.Header()) if err != nil { t.Errorf("could not store rollup. Cause: %s", err) } @@ -68,7 +68,7 @@ func TestGetRollupByBlockHash(t *testing.T) { } dbtx.Write() dbtx, _ = db.NewDBTransaction() - err = AddRollup(dbtx, db.GetSQLStatement(), &rollup, &metadata, block.Header()) + err = AddRollup(dbtx, db.GetSQLStatement(), &rollup, &common.ExtRollupMetadata{}, &metadata, block.Header()) if err != nil { t.Errorf("could not store rollup. Cause: %s", err) } @@ -100,7 +100,7 @@ func TestGetLatestRollup(t *testing.T) { } dbtx.Write() dbtx, _ = db.NewDBTransaction() - err = AddRollup(dbtx, db.GetSQLStatement(), &rollup1, &metadata1, block.Header()) + err = AddRollup(dbtx, db.GetSQLStatement(), &rollup1, &common.ExtRollupMetadata{}, &metadata1, block.Header()) if err != nil { t.Errorf("could not store rollup. Cause: %s", err) } @@ -111,7 +111,7 @@ func TestGetLatestRollup(t *testing.T) { rollup2LastSeq := int64(batchNumber + 10) metadata2 := createRollupMetadata(rollup2FirstSeq) rollup2 := createRollup(rollup2LastSeq) - err = AddRollup(dbtx, db.GetSQLStatement(), &rollup2, &metadata2, block.Header()) + err = AddRollup(dbtx, db.GetSQLStatement(), &rollup2, &common.ExtRollupMetadata{}, &metadata2, block.Header()) if err != nil { t.Errorf("could not store rollup 2. Cause: %s", err) } @@ -145,7 +145,7 @@ func TestGetRollupBySeqNo(t *testing.T) { } dbtx.Write() dbtx, _ = db.NewDBTransaction() - err = AddRollup(dbtx, db.GetSQLStatement(), &rollup1, &metadata1, block.Header()) + err = AddRollup(dbtx, db.GetSQLStatement(), &rollup1, &common.ExtRollupMetadata{}, &metadata1, block.Header()) if err != nil { t.Errorf("could not store rollup. Cause: %s", err) } @@ -156,7 +156,7 @@ func TestGetRollupBySeqNo(t *testing.T) { rollup2LastSeq := int64(batchNumber + 10) // 787 metadata2 := createRollupMetadata(rollup2FirstSeq) rollup2 := createRollup(rollup2LastSeq) - err = AddRollup(dbtx, db.GetSQLStatement(), &rollup2, &metadata2, block.Header()) + err = AddRollup(dbtx, db.GetSQLStatement(), &rollup2, &common.ExtRollupMetadata{}, &metadata2, block.Header()) if err != nil { t.Errorf("could not store rollup 2. Cause: %s", err) } @@ -200,7 +200,7 @@ func TestGetRollupListing(t *testing.T) { } dbtx.Write() dbtx, _ = db.NewDBTransaction() - err = AddRollup(dbtx, db.GetSQLStatement(), &rollup1, &metadata1, block.Header()) + err = AddRollup(dbtx, db.GetSQLStatement(), &rollup1, &common.ExtRollupMetadata{}, &metadata1, block.Header()) if err != nil { t.Errorf("could not store rollup. Cause: %s", err) } @@ -209,7 +209,7 @@ func TestGetRollupListing(t *testing.T) { rollup2LastSeq := int64(batchNumber + 10) metadata2 := createRollupMetadata(rollup2FirstSeq) rollup2 := createRollup(rollup2LastSeq) - err = AddRollup(dbtx, db.GetSQLStatement(), &rollup2, &metadata2, block.Header()) + err = AddRollup(dbtx, db.GetSQLStatement(), &rollup2, &common.ExtRollupMetadata{}, &metadata2, block.Header()) if err != nil { t.Errorf("could not store rollup 2. Cause: %s", err) } @@ -218,7 +218,7 @@ func TestGetRollupListing(t *testing.T) { rollup3LastSeq := int64(batchNumber + 20) metadata3 := createRollupMetadata(rollup3FirstSeq) rollup3 := createRollup(rollup3LastSeq) - err = AddRollup(dbtx, db.GetSQLStatement(), &rollup3, &metadata3, block.Header()) + err = AddRollup(dbtx, db.GetSQLStatement(), &rollup3, &common.ExtRollupMetadata{}, &metadata3, block.Header()) dbtx.Write() if err != nil { t.Errorf("could not store rollup 3. Cause: %s", err) @@ -303,7 +303,7 @@ func TestGetRollupByHash(t *testing.T) { } dbtx.Write() dbtx, _ = db.NewDBTransaction() - err = AddRollup(dbtx, db.GetSQLStatement(), &rollup1, &metadata1, block.Header()) + err = AddRollup(dbtx, db.GetSQLStatement(), &rollup1, &common.ExtRollupMetadata{}, &metadata1, block.Header()) if err != nil { t.Errorf("could not store rollup. Cause: %s", err) } @@ -312,7 +312,7 @@ func TestGetRollupByHash(t *testing.T) { rollup2LastSeq := int64(batchNumber + 10) metadata2 := createRollupMetadata(rollup2FirstSeq) rollup2 := createRollup(rollup2LastSeq) - err = AddRollup(dbtx, db.GetSQLStatement(), &rollup2, &metadata2, block.Header()) + err = AddRollup(dbtx, db.GetSQLStatement(), &rollup2, &common.ExtRollupMetadata{}, &metadata2, block.Header()) if err != nil { t.Errorf("could not store rollup 2. Cause: %s", err) } @@ -377,7 +377,7 @@ func TestGetRollupBatches(t *testing.T) { rollup1LastSeq := int64(batchNumber + 1) metadata1 := createRollupMetadata(rollup1FirstSeq) rollup1 := createRollup(rollup1LastSeq) - err = AddRollup(dbtx, db.GetSQLStatement(), &rollup1, &metadata1, block.Header()) + err = AddRollup(dbtx, db.GetSQLStatement(), &rollup1, &common.ExtRollupMetadata{}, &metadata1, block.Header()) if err != nil { t.Errorf("could not store rollup. Cause: %s", err) } @@ -386,7 +386,7 @@ func TestGetRollupBatches(t *testing.T) { rollup2LastSeq := int64(batchNumber + 3) metadata2 := createRollupMetadata(rollup2FirstSeq) rollup2 := createRollup(rollup2LastSeq) - err = AddRollup(dbtx, db.GetSQLStatement(), &rollup2, &metadata2, block.Header()) + err = AddRollup(dbtx, db.GetSQLStatement(), &rollup2, &common.ExtRollupMetadata{}, &metadata2, block.Header()) if err != nil { t.Errorf("could not store rollup 2. Cause: %s", err) } diff --git a/go/host/storage/hostdb/sql_statements.go b/go/host/storage/hostdb/sql_statements.go index ccec07ef4d..ea5ab0da4f 100644 --- a/go/host/storage/hostdb/sql_statements.go +++ b/go/host/storage/hostdb/sql_statements.go @@ -4,13 +4,14 @@ import "strconv" // SQLStatements struct holds SQL statements for a specific database type type SQLStatements struct { - InsertBatch string - InsertTransactions string - UpdateTxCount string - InsertRollup string - InsertBlock string - Pagination string - Placeholder string + InsertBatch string + InsertTransactions string + UpdateTxCount string + InsertRollup string + InsertCrossChainMessage string + InsertBlock string + Pagination string + Placeholder string } func (s SQLStatements) GetPlaceHolder(pos int) string { @@ -22,24 +23,26 @@ func (s SQLStatements) GetPlaceHolder(pos int) string { func SQLiteSQLStatements() *SQLStatements { return &SQLStatements{ - InsertBatch: "INSERT INTO batch_host (sequence, hash, height, ext_batch) VALUES (?, ?, ?, ?)", - InsertTransactions: "INSERT INTO transaction_host (hash, b_sequence) VALUES ", - UpdateTxCount: "UPDATE transaction_count SET total=? WHERE id=1", - InsertRollup: "INSERT INTO rollup_host (hash, start_seq, end_seq, time_stamp, ext_rollup, compression_block) values (?,?,?,?,?,?)", - InsertBlock: "INSERT INTO block_host (hash, header) values (?,?)", - Pagination: "LIMIT ? OFFSET ?", - Placeholder: "?", + InsertBatch: "INSERT INTO batch_host (sequence, hash, height, ext_batch) VALUES (?, ?, ?, ?)", + InsertTransactions: "INSERT INTO transaction_host (hash, b_sequence) VALUES ", + UpdateTxCount: "UPDATE transaction_count SET total=? WHERE id=1", + InsertRollup: "INSERT INTO rollup_host (hash, start_seq, end_seq, time_stamp, ext_rollup, compression_block) values (?,?,?,?,?,?)", + InsertBlock: "INSERT INTO block_host (hash, header) values (?,?)", + InsertCrossChainMessage: "INSERT INTO cross_chain_message_host (message_hash, message_type, rollup_id) values (?,?,?)", + Pagination: "LIMIT ? OFFSET ?", + Placeholder: "?", } } func PostgresSQLStatements() *SQLStatements { return &SQLStatements{ - InsertBatch: "INSERT INTO batch_host (sequence, hash, height, ext_batch) VALUES ($1, $2, $3, $4)", - InsertTransactions: "INSERT INTO transaction_host (hash, b_sequence) VALUES ", - UpdateTxCount: "UPDATE transaction_count SET total=$1 WHERE id=1", - 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) VALUES ($1, $2)", - Pagination: "LIMIT $1 OFFSET $2", - Placeholder: "$1", + InsertBatch: "INSERT INTO batch_host (sequence, hash, height, ext_batch) VALUES ($1, $2, $3, $4)", + InsertTransactions: "INSERT INTO transaction_host (hash, b_sequence) VALUES ", + UpdateTxCount: "UPDATE transaction_count SET total=$1 WHERE id=1", + 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) VALUES ($1, $2)", + InsertCrossChainMessage: "INSERT INTO cross_chain_message_host (message_hash, message_type, rollup_id) values ($1, $2, $3)", + Pagination: "LIMIT $1 OFFSET $2", + Placeholder: "$1", } } diff --git a/go/host/storage/init/postgres/001_init.sql b/go/host/storage/init/postgres/001_init.sql index 8f967f551a..5afd2c3a38 100644 --- a/go/host/storage/init/postgres/001_init.sql +++ b/go/host/storage/init/postgres/001_init.sql @@ -23,6 +23,18 @@ CREATE INDEX IF NOT EXISTS IDX_ROLLUP_HASH_HOST ON rollup_host USING HASH (hash) CREATE INDEX IF NOT EXISTS IDX_ROLLUP_PROOF_HOST ON rollup_host (compression_block); CREATE INDEX IF NOT EXISTS IDX_ROLLUP_SEQ_HOST ON rollup_host (start_seq, end_seq); +CREATE TABLE IF NOT EXISTS cross_chain_message_host +( + id SERIAL PRIMARY KEY, + message_hash BYTEA NOT NULL UNIQUE, + rollup_id INT NOT NULL, + message_type CHAR(1) NOT NULL CHECK (message_type IN ('m', 'v')), + FOREIGN KEY (rollup_id) REFERENCES rollup_host(id) +); + +CREATE INDEX IF NOT EXISTS IDX_CCM_HASH_HOST ON cross_chain_message_host USING HASH (message_hash); +CREATE INDEX IF NOT EXISTS IDX_CCM_ROLLUP_HOST ON cross_chain_message_host (rollup_id); + CREATE TABLE IF NOT EXISTS batch_host ( sequence INT PRIMARY KEY, diff --git a/go/host/storage/init/sqlite/001_init.sql b/go/host/storage/init/sqlite/001_init.sql index 371dad1d0a..54df363f53 100644 --- a/go/host/storage/init/sqlite/001_init.sql +++ b/go/host/storage/init/sqlite/001_init.sql @@ -18,6 +18,18 @@ create table if not exists rollup_host compression_block int NOT NULL references block_host ); +create table if not exists cross_chain_message_host +( + id INTEGER PRIMARY KEY AUTOINCREMENT, + message_hash binary(32) NOT NULL UNIQUE, + rollup_id int NOT NULL references rollup_host, + message_type char(1) NOT NULL CHECK (message_type IN ('m', 'v')) +); + +create index IDX_CCM_HASH_HOST on cross_chain_message_host (message_hash); +create index IDX_CCM_ROLLUP_HOST on cross_chain_message_host (rollup_id); + + create index IDX_ROLLUP_HASH_HOST on rollup_host (hash); create index IDX_ROLLUP_PROOF_HOST on rollup_host (compression_block); create index IDX_ROLLUP_SEQ_HOST on rollup_host (start_seq, end_seq); diff --git a/go/host/storage/interfaces.go b/go/host/storage/interfaces.go index a218f3af80..3ba2c6d84f 100644 --- a/go/host/storage/interfaces.go +++ b/go/host/storage/interfaces.go @@ -52,13 +52,15 @@ type BatchResolver interface { FetchBatchTransactions(batchHash gethcommon.Hash) (*common.TransactionListingResponse, error) // FetchTransactionListing returns a paginated list of public transaction data FetchTransactionListing(pagination *common.QueryPagination) (*common.TransactionListingResponse, error) + // FetchCrossChainProof returns the proof for a cross chain message + FetchCrossChainProof(messageType string, crossChainMessage gethcommon.Hash) ([][]byte, gethcommon.Hash, error) } type BlockResolver interface { // AddBlock stores block data containing rollups in the host DB AddBlock(b *types.Header) error // AddRollup stores a rollup in the host DB - AddRollup(rollup *common.ExtRollup, metadata *common.PublicRollupMetadata, block *types.Header) error + AddRollup(rollup *common.ExtRollup, extMetadata *common.ExtRollupMetadata, metadata *common.PublicRollupMetadata, block *types.Header) error // FetchLatestRollupHeader returns the head `RollupHeader` FetchLatestRollupHeader() (*common.RollupHeader, error) // FetchRollupListing returns a paginated list of rollups diff --git a/go/host/storage/storage.go b/go/host/storage/storage.go index 44a68dd2bc..e332adf1ea 100644 --- a/go/host/storage/storage.go +++ b/go/host/storage/storage.go @@ -8,6 +8,7 @@ import ( "math/big" "strings" + smt "github.com/FantasyJony/openzeppelin-merkle-tree-go/standard_merkle_tree" gethcommon "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" gethlog "github.com/ethereum/go-ethereum/log" @@ -52,7 +53,7 @@ func (s *storageImpl) AddBatch(batch *common.ExtBatch) error { return nil } -func (s *storageImpl) AddRollup(rollup *common.ExtRollup, metadata *common.PublicRollupMetadata, block *types.Header) error { +func (s *storageImpl) AddRollup(rollup *common.ExtRollup, extMetadata *common.ExtRollupMetadata, metadata *common.PublicRollupMetadata, block *types.Header) error { // Check if the Header is already stored _, err := hostdb.GetRollupHeader(s.db, rollup.Header.Hash()) if err == nil { @@ -64,7 +65,7 @@ func (s *storageImpl) AddRollup(rollup *common.ExtRollup, metadata *common.Publi return err } - if err := hostdb.AddRollup(dbtx, s.db.GetSQLStatement(), rollup, metadata, block); err != nil { + if err := hostdb.AddRollup(dbtx, s.db.GetSQLStatement(), rollup, extMetadata, metadata, block); err != nil { if err := dbtx.Rollback(); err != nil { return err } @@ -110,6 +111,27 @@ func (s *storageImpl) AddBlock(b *types.Header) error { return nil } +func (s *storageImpl) FetchCrossChainProof(messageType string, crossChainMessage gethcommon.Hash) ([][]byte, gethcommon.Hash, error) { + tree, err := hostdb.GetCrossChainMessagesTree(s.db, crossChainMessage) + if err != nil { + return nil, gethcommon.Hash{}, err + } + + for k, value := range tree { + tree[k][1] = gethcommon.BytesToHash(value[1].([]byte)) + } + + merkleTree, err := smt.Of(tree, []string{smt.SOL_STRING, smt.SOL_BYTES32}) + if err != nil { + return nil, gethcommon.Hash{}, err + } + proof, err := merkleTree.GetProof([]interface{}{messageType, crossChainMessage}) + if err != nil { + return nil, gethcommon.Hash{}, err + } + return proof, gethcommon.Hash(merkleTree.GetRoot()), nil +} + func (s *storageImpl) FetchBatchBySeqNo(seqNum uint64) (*common.ExtBatch, error) { return hostdb.GetBatchBySequenceNumber(s.db, seqNum) } diff --git a/go/obsclient/authclient.go b/go/obsclient/authclient.go index 93dd9c8d74..a9fa764491 100644 --- a/go/obsclient/authclient.go +++ b/go/obsclient/authclient.go @@ -8,6 +8,7 @@ import ( "math/big" tenrpc "github.com/ten-protocol/go-ten/go/common/rpc" + "github.com/ten-protocol/go-ten/go/host/rpc/clientapi" "github.com/ethereum/go-ethereum" "github.com/ethereum/go-ethereum/common/hexutil" @@ -96,6 +97,15 @@ func (ac *AuthObsClient) TransactionByHash(ctx context.Context, hash gethcommon. return result.tx, result.BlockNumber == nil, nil } +func (ac *AuthObsClient) GetCrossChainProof(ctx context.Context, messageType string, crossChainMessage gethcommon.Hash) (clientapi.CrossChainProof, error) { + var result clientapi.CrossChainProof + err := ac.rpcClient.CallContext(ctx, &result, "ten_getCrossChainProof", messageType, crossChainMessage) + if err != nil { + return clientapi.CrossChainProof{}, err + } + return result, nil +} + // senderFromServer is a types.Signer that remembers the sender address returned by the RPC // server. It is stored in the transaction's sender address cache to avoid an additional // request in TransactionSender. diff --git a/go/rpc/client.go b/go/rpc/client.go index 2553046aea..550894a5cb 100644 --- a/go/rpc/client.go +++ b/go/rpc/client.go @@ -8,12 +8,13 @@ import ( // these are public RPC methods exposed by a TEN node const ( - BatchNumber = "ten_batchNumber" - ChainID = "ten_chainId" - GetBatchByHash = "ten_getBatchByHash" - GetBatchByNumber = "ten_getBatchByNumber" - GetCode = "ten_getCode" - GasPrice = "ten_gasPrice" + BatchNumber = "ten_batchNumber" + ChainID = "ten_chainId" + GetBatchByHash = "ten_getBatchByHash" + GetBatchByNumber = "ten_getBatchByNumber" + GetCode = "ten_getCode" + GasPrice = "ten_gasPrice" + GetCrossChainProof = "ten_getCrossChainProof" Health = "ten_health" Config = "ten_config" diff --git a/integration/simulation/p2p/in_mem_ten_client.go b/integration/simulation/p2p/in_mem_ten_client.go index 89196feb1f..c387766866 100644 --- a/integration/simulation/p2p/in_mem_ten_client.go +++ b/integration/simulation/p2p/in_mem_ten_client.go @@ -111,11 +111,31 @@ func (c *inMemTenClient) Call(result interface{}, method string, args ...interfa case rpc.GetCode: return c.getCode(result, args) + case rpc.GetCrossChainProof: + return c.getCrossChainProof(result, args) + default: return fmt.Errorf("RPC method %s is unknown", method) } } +func (c *inMemTenClient) getCrossChainProof(result interface{}, args []interface{}) error { + messageType, ok := args[0].(string) + if !ok { + return fmt.Errorf("invalid argument type: expected string") + } + crossChainMessage, ok := args[1].(gethcommon.Hash) + if !ok { + return fmt.Errorf("invalid argument type: expected gethcommon.Hash") + } + proof, err := c.tenAPI.GetCrossChainProof(context.Background(), messageType, crossChainMessage) + if err != nil { + return fmt.Errorf("failed to get cross chain proof: %w", err) + } + *result.(*clientapi.CrossChainProof) = proof + return nil +} + func (c *inMemTenClient) getCode(result interface{}, args []interface{}) error { address, ok := args[0].(gethcommon.Address) if !ok { diff --git a/integration/simulation/transaction_injector.go b/integration/simulation/transaction_injector.go index cf200134e9..37a10f3784 100644 --- a/integration/simulation/transaction_injector.go +++ b/integration/simulation/transaction_injector.go @@ -2,15 +2,15 @@ package simulation import ( "context" - "encoding/json" "math/big" "math/rand" + "strings" "sync/atomic" "time" - "github.com/FantasyJony/openzeppelin-merkle-tree-go/standard_merkle_tree" "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/rlp" "github.com/ten-protocol/go-ten/contracts/generated/ManagementContract" "github.com/ten-protocol/go-ten/contracts/generated/MessageBus" "github.com/ten-protocol/go-ten/go/common" @@ -18,6 +18,7 @@ import ( "github.com/ten-protocol/go-ten/go/enclave/crosschain" "github.com/ten-protocol/go-ten/go/ethadapter/erc20contractlib" "github.com/ten-protocol/go-ten/go/ethadapter/mgmtcontractlib" + "github.com/ten-protocol/go-ten/go/host/rpc/clientapi" "github.com/ten-protocol/go-ten/go/wallet" "github.com/ten-protocol/go-ten/integration" "github.com/ten-protocol/go-ten/integration/common/testlog" @@ -306,10 +307,6 @@ func (ti *TransactionInjector) issueRandomDeposits() { } func (ti *TransactionInjector) awaitAndFinalizeWithdrawal(tx *types.Transaction, fromWallet wallet.Wallet) { - if ti.mgmtContractLib.IsMock() { - return - } - err := testcommon.AwaitReceipt(ti.ctx, ti.rpcHandles.TenWalletRndClient(fromWallet), tx.Hash(), 45*time.Second) if err != nil { ti.logger.Error("Failed to await receipt for withdrawal transaction", log.ErrKey, err) @@ -321,37 +318,6 @@ func (ti *TransactionInjector) awaitAndFinalizeWithdrawal(tx *types.Transaction, ti.logger.Error("Failed to retrieve receipt for withdrawal transaction", log.ErrKey, err) return } - header, err := ti.rpcHandles.TenWalletRndClient(fromWallet).GetBatchHeaderByHash(receipt.BlockHash) - if err != nil { - ti.logger.Error("Failed to retrieve batch header for withdrawal transaction", log.ErrKey, err) - return - } - - xchainTree := make([][]interface{}, 0) // ["v", "0xblablablabla"] - err = json.Unmarshal(header.CrossChainTree, &xchainTree) - if err != nil { - ti.logger.Error("Failed to unmarshal cross chain tree for withdrawal transaction", log.ErrKey, err) - return - } - - for k, value := range xchainTree { - xchainTree[k][1] = gethcommon.HexToHash(value[1].(string)) - } - - tree, err := standard_merkle_tree.Of(xchainTree, crosschain.CrossChainEncodings) - if err != nil { - ti.logger.Error("Failed to load cross chain tree for withdrawal transaction", log.ErrKey, err) - return - } - - if gethcommon.BytesToHash(tree.GetRoot()) != header.CrossChainRoot { - ti.logger.Error("Root of cross chain tree does not match header", "expected", header.CrossChainRoot, "actual", gethcommon.BytesToHash(tree.GetRoot())) - return - } - - if len(receipt.Logs) != 1 { - panic("unexpected number of logs in receipt") - } logs := make([]types.Log, len(receipt.Logs)) for i, log := range receipt.Logs { @@ -364,12 +330,32 @@ func (ti *TransactionInjector) awaitAndFinalizeWithdrawal(tx *types.Transaction, } vTransfers := crosschain.ValueTransfers(transfers) - proof, err := tree.GetProof(vTransfers.ForMerkleTree()[0]) - if err != nil { - panic("unable to get proof for value transfer") + + var proof clientapi.CrossChainProof + for { + proof, err = ti.rpcHandles.TenWalletRndClient(fromWallet).GetCrossChainProof(ti.ctx, "v", vTransfers.ForMerkleTree()[0][1].(gethcommon.Hash)) + if err != nil { + if strings.Contains(err.Error(), "not found") { + ti.logger.Info("Proof not found, retrying...", log.ErrKey, err) + time.Sleep(1 * time.Second) + continue + } + panic("unable to get proof for value transfer") + } + break + } + + if len(proof.Proof) == 0 { + return + } + + proofBytes := [][]byte{} + if err := rlp.DecodeBytes(proof.Proof, &proofBytes); err != nil { + panic("unable to decode proof") } - if len(proof) == 0 { + // In mem sim does not support the l1 interaction required for the rest of the function. + if ti.mgmtContractLib.IsMock() { return } @@ -384,8 +370,8 @@ func (ti *TransactionInjector) awaitAndFinalizeWithdrawal(tx *types.Transaction, } proof32 := make([][32]byte, 0) - for i := 0; i < len(proof); i++ { - proof32 = append(proof32, [32]byte(proof[i][0:32])) + for i := 0; i < len(proofBytes); i++ { + proof32 = append(proof32, [32]byte(proofBytes[i][0:32])) } time.Sleep(20 * time.Second) @@ -396,7 +382,12 @@ func (ti *TransactionInjector) awaitAndFinalizeWithdrawal(tx *types.Transaction, return } - withdrawalTx, err := mCtr.ExtractNativeValue(opts, ManagementContract.StructsValueTransferMessage(vTransfers[0]), proof32, header.CrossChainRoot) + withdrawalTx, err := mCtr.ExtractNativeValue( + opts, + ManagementContract.StructsValueTransferMessage(vTransfers[0]), + proof32, + proof.Root, + ) if err != nil { ti.logger.Error("Failed to extract value transfer from L2", log.ErrKey, err) return diff --git a/tools/walletextension/rpcapi/ten_api.go b/tools/walletextension/rpcapi/ten_api.go new file mode 100644 index 0000000000..3b25b96297 --- /dev/null +++ b/tools/walletextension/rpcapi/ten_api.go @@ -0,0 +1,30 @@ +package rpcapi + +import ( + "context" + + gethcommon "github.com/ethereum/go-ethereum/common" + "github.com/ten-protocol/go-ten/tools/walletextension/cache" + "github.com/ten-protocol/go-ten/tools/walletextension/services" +) + +type TenAPI struct { + we *services.Services +} + +func NewTenAPI(we *services.Services) *TenAPI { + return &TenAPI{we} +} + +type CrossChainProof struct { + Proof []byte + Root gethcommon.Hash +} + +func (api *TenAPI) GetCrossChainProof(ctx context.Context, messageType string, crossChainMessage gethcommon.Hash) (*CrossChainProof, error) { + proof, err := UnauthenticatedTenRPCCall[CrossChainProof](ctx, api.we, &cache.Cfg{Type: cache.LongLiving}, "ten_getCrossChainProof", messageType, crossChainMessage) + if err != nil { + return nil, err + } + return proof, nil +} diff --git a/tools/walletextension/walletextension_container.go b/tools/walletextension/walletextension_container.go index c7ac5f0dec..4b45f47507 100644 --- a/tools/walletextension/walletextension_container.go +++ b/tools/walletextension/walletextension_container.go @@ -156,6 +156,9 @@ func NewContainerFromConfig(config wecommon.Config, logger gethlog.Logger) *Cont }, { Namespace: "web3", Service: rpcapi.NewWeb3API(walletExt), + }, { + Namespace: "ten", + Service: rpcapi.NewTenAPI(walletExt), }, })