From d083eeb29cf7610b733b978e3cfdd0df2d7461f8 Mon Sep 17 00:00:00 2001 From: D <51912515+adaki2004@users.noreply.github.com> Date: Mon, 10 Jun 2024 13:59:49 +0200 Subject: [PATCH 1/8] fix(protocol): fix seemingly quota issue (#17544) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Keszey Dániel <keszeyd@MacBook-Pro.local> --- packages/protocol/contracts/tokenvault/ERC20Vault.sol | 3 +-- packages/protocol/deployments/mainnet-contract-logs-L1.md | 2 ++ packages/protocol/deployments/mainnet-contract-logs-L2.md | 2 ++ 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/protocol/contracts/tokenvault/ERC20Vault.sol b/packages/protocol/contracts/tokenvault/ERC20Vault.sol index e2e017f4ceb..fbe0d82a3b1 100644 --- a/packages/protocol/contracts/tokenvault/ERC20Vault.sol +++ b/packages/protocol/contracts/tokenvault/ERC20Vault.sol @@ -355,8 +355,6 @@ contract ERC20Vault is BaseVault { private returns (address token_) { - _consumeTokenQuota(token_, _amount); - if (_ctoken.chainId == block.chainid) { token_ = _ctoken.addr; IERC20(token_).safeTransfer(_to, _amount); @@ -366,6 +364,7 @@ contract ERC20Vault is BaseVault { // check. IBridgedERC20(token_).mint(_to, _amount); } + _consumeTokenQuota(token_, _amount); } /// @dev Handles the message on the source chain and returns the encoded diff --git a/packages/protocol/deployments/mainnet-contract-logs-L1.md b/packages/protocol/deployments/mainnet-contract-logs-L1.md index f9d3027af6d..57966041f64 100644 --- a/packages/protocol/deployments/mainnet-contract-logs-L1.md +++ b/packages/protocol/deployments/mainnet-contract-logs-L1.md @@ -111,6 +111,8 @@ - upgraded from `0x15D9F7e12aEa18DAEF5c651fBf97567CAd4a4BEc` to `0xC722d9f3f8D60288589F7f67a9CFAd34d3B9bf8E` @commit`b90b932` @tx`0x416560cd96dc75ccffebe889e8d1ab3e08b33f814dc4a2bf7c6f9555071d1f6f` - upgraded from `0xC722d9f3f8D60288589F7f67a9CFAd34d3B9bf8E` to `0x4F750D13005444407D44dAA30922128db0374ca1` @commit`fa481c1` @tx`0x02ed558762eae5f0a930ba4a1047a02d4a793ea48890268c32df04e882f138ff` - upgraded from `0x4F750D13005444407D44dAA30922128db0374ca1` to `0xF8bdaC4E68bA2595Be8381aaa5456917e374E737` @commit`d907359` @tx`0xdb5e926c96d112ce1389da77a927fba6c7d04a711839b9e14777530ebcf83914` +- todo: + - upgrade #### erc721_vault diff --git a/packages/protocol/deployments/mainnet-contract-logs-L2.md b/packages/protocol/deployments/mainnet-contract-logs-L2.md index fcfff4b3cd0..1f9d2e5975d 100644 --- a/packages/protocol/deployments/mainnet-contract-logs-L2.md +++ b/packages/protocol/deployments/mainnet-contract-logs-L2.md @@ -72,6 +72,8 @@ - linked bridged TKO to `0xA9d23408b9bA935c230493c40C73824Df71A0975` @tx`0xe25d05320b95fbc3bffe0b7cbfe351dd5fa6413db307d5c28f7b70983567a43b` - linked bridged USDC to `0x07d83526730c7438048D55A4fc0b850e2aaB6f0b` @tx`0xf1752ac712779e9ae53d408abdc5eec70e63582433143d6d91a489a1e8fc4778` - changed owner to `0xCa5b76Cc7A38b86Db11E5aE5B1fc9740c3bA3DE8` @tx`0xf68861171c602e3e75ca69e950957fcb908c7949c6df9a9ea3026c238ebb1e9c` + - todo: + - upgrade #### erc721_vault From 11755d164a532980214e69219d328fa66a06f6cc Mon Sep 17 00:00:00 2001 From: Korbinian <KorbinianK@users.noreply.github.com> Date: Mon, 10 Jun 2024 16:11:38 +0200 Subject: [PATCH 2/8] fix(bridge-ui): recallMessage fix (#17547) --- .../Filter/StatusFilterDialog.svelte | 1 + .../Filter/StatusFilterDropdown.svelte | 1 + .../Transactions/Status/Status.svelte | 3 ++ packages/bridge-ui/src/i18n/en.json | 4 +++ packages/bridge-ui/src/libs/bridge/types.ts | 2 +- .../src/libs/polling/messageStatusPoller.ts | 24 +++++++++++++ .../bridge-ui/src/libs/proof/BridgeProver.ts | 34 +++++++++++++++++-- 7 files changed, 65 insertions(+), 4 deletions(-) diff --git a/packages/bridge-ui/src/components/Transactions/Filter/StatusFilterDialog.svelte b/packages/bridge-ui/src/components/Transactions/Filter/StatusFilterDialog.svelte index 1c9c0eb9c7c..b4a3827c85c 100644 --- a/packages/bridge-ui/src/components/Transactions/Filter/StatusFilterDialog.svelte +++ b/packages/bridge-ui/src/components/Transactions/Filter/StatusFilterDialog.svelte @@ -21,6 +21,7 @@ { value: MessageStatus.RETRIABLE, label: $t('transactions.filter.retry') }, { value: MessageStatus.DONE, label: $t('transactions.filter.claimed') }, { value: MessageStatus.FAILED, label: $t('transactions.filter.failed') }, + { value: MessageStatus.RECALLED, label: $t('transactions.filter.released') }, ]; const select = (option: (typeof options)[0]) => { diff --git a/packages/bridge-ui/src/components/Transactions/Filter/StatusFilterDropdown.svelte b/packages/bridge-ui/src/components/Transactions/Filter/StatusFilterDropdown.svelte index 1373828af1f..f2445651a8a 100644 --- a/packages/bridge-ui/src/components/Transactions/Filter/StatusFilterDropdown.svelte +++ b/packages/bridge-ui/src/components/Transactions/Filter/StatusFilterDropdown.svelte @@ -26,6 +26,7 @@ { value: MessageStatus.RETRIABLE, label: $t('transactions.filter.retry') }, { value: MessageStatus.DONE, label: $t('transactions.filter.claimed') }, { value: MessageStatus.FAILED, label: $t('transactions.filter.failed') }, + { value: MessageStatus.RECALLED, label: $t('transactions.filter.released') }, ]; const toggleMenu = () => { diff --git a/packages/bridge-ui/src/components/Transactions/Status/Status.svelte b/packages/bridge-ui/src/components/Transactions/Status/Status.svelte index 868218e8a6a..6862c043175 100644 --- a/packages/bridge-ui/src/components/Transactions/Status/Status.svelte +++ b/packages/bridge-ui/src/components/Transactions/Status/Status.svelte @@ -124,6 +124,9 @@ <button class="status-btn" on:click={release} on:click={handleReleaseClick}> {$t('transactions.button.release')} </button> + {:else if bridgeTxStatus === MessageStatus.RECALLED} + <StatusDot type="error" /> + <span>{$t('transactions.status.released.name')}</span> {:else} <!-- TODO: look into this possible state --> <StatusDot type="error" /> diff --git a/packages/bridge-ui/src/i18n/en.json b/packages/bridge-ui/src/i18n/en.json index a4b2d86a257..7b9b503c630 100644 --- a/packages/bridge-ui/src/i18n/en.json +++ b/packages/bridge-ui/src/i18n/en.json @@ -532,6 +532,7 @@ "claimed": "Claimed", "failed": "Failed", "processing": "Processing", + "released": "Released", "retry": "Retriable", "title": "Filters" }, @@ -592,6 +593,9 @@ "description": "Your bridged asset cannot be processed and is now accessible to you on the source chain.", "name": "Release" }, + "released": { + "name": "Released" + }, "releasing": "Releasing", "retry": { "description": "The relayer was unable to process this message, and you will need to retry the processing yourself.", diff --git a/packages/bridge-ui/src/libs/bridge/types.ts b/packages/bridge-ui/src/libs/bridge/types.ts index 099035c7387..eda3f8410f7 100644 --- a/packages/bridge-ui/src/libs/bridge/types.ts +++ b/packages/bridge-ui/src/libs/bridge/types.ts @@ -9,7 +9,7 @@ export enum MessageStatus { RETRIABLE, DONE, FAILED, - PROVEN, // UI ONLY + RECALLED, } // struct Message { diff --git a/packages/bridge-ui/src/libs/polling/messageStatusPoller.ts b/packages/bridge-ui/src/libs/polling/messageStatusPoller.ts index b517e8f41dc..81a200e8fe2 100644 --- a/packages/bridge-ui/src/libs/polling/messageStatusPoller.ts +++ b/packages/bridge-ui/src/libs/polling/messageStatusPoller.ts @@ -71,6 +71,11 @@ export function startPolling(bridgeTx: BridgeTransaction, runImmediately = true) transport: http(), }); + const srcChainClient = createPublicClient({ + chain: chains.find((chain) => chain.id === Number(srcChainId)), + transport: http(), + }); + // We are gonna be polling the destination bridge contract const destBridgeAddress = routingContractsMap[Number(destChainId)][Number(srcChainId)].bridgeAddress; const destBridgeContract = getContract({ @@ -79,6 +84,14 @@ export function startPolling(bridgeTx: BridgeTransaction, runImmediately = true) client: destChainClient, }); + // In case for recalled messages we need to check the source bridge contract + const srcBridgeAddress = routingContractsMap[Number(srcChainId)][Number(destChainId)].bridgeAddress; + const srcBridgeContract = getContract({ + address: srcBridgeAddress, + abi: bridgeAbi, + client: srcChainClient, + }); + const stopPolling = () => { const interval = hashIntervalMap[hash]; if (interval) { @@ -108,6 +121,17 @@ export function startPolling(bridgeTx: BridgeTransaction, runImmediately = true) const messageStatus: MessageStatus = await destBridgeContract.read.messageStatus([bridgeTx.msgHash]); emitter.emit(PollingEvent.STATUS, messageStatus); + if (messageStatus === MessageStatus.FAILED) { + // check if the message is recalled + const recallStatus = await srcBridgeContract.read.messageStatus([bridgeTx.msgHash]); + if (recallStatus === MessageStatus.RECALLED) { + log(`Message ${bridgeTx.msgHash} has been recalled.`); + emitter.emit(PollingEvent.STATUS, MessageStatus.RECALLED); + stopPolling(); + return; + } + } + let blockNumber: Hex; if (!bridgeTx.blockNumber) { const receipt = await getTransactionReceipt(config, { hash: bridgeTx.hash }); diff --git a/packages/bridge-ui/src/libs/proof/BridgeProver.ts b/packages/bridge-ui/src/libs/proof/BridgeProver.ts index 9ff338e88b4..b942b748523 100644 --- a/packages/bridge-ui/src/libs/proof/BridgeProver.ts +++ b/packages/bridge-ui/src/libs/proof/BridgeProver.ts @@ -211,7 +211,7 @@ export class BridgeProver { } async getEncodedSignalProofForRecall({ bridgeTx }: { bridgeTx: BridgeTransaction }) { - const { message, msgHash } = bridgeTx; + const { blockNumber, message, msgHash } = bridgeTx; log('msgHash', msgHash); if (!message) throw new ProofGenerationError('Message is not defined'); @@ -304,8 +304,36 @@ export class BridgeProver { // Get the signalServiceAddress for the source chain const destSignalServiceAddress = routingContractsMap[Number(destChainId)][Number(srcChainId)].signalServiceAddress; + const srcSignalServiceAddress = routingContractsMap[Number(srcChainId)][Number(destChainId)].signalServiceAddress; + + const syncedChainData = await readContract(config, { + address: srcSignalServiceAddress, + abi: signalServiceAbi, + functionName: 'getSyncedChainData', + args: [destChainId, keccak256(toBytes('STATE_ROOT')), 0n], + chainId: Number(srcChainId), + }); + + log('syncedChainData', syncedChainData); + + const latestSyncedblock = syncedChainData[0]; + + const synced = latestSyncedblock >= hexToBigInt(blockNumber); + log('synced', synced, latestSyncedblock, hexToBigInt(blockNumber)); + if (!synced) { + throw new BlockNotSyncedError('block is not synced yet'); + } - const block = await destChainClient.getBlock({ blockTag: 'latest' }); + // Get the block based on the blocknumber from the destination chain + let block; + try { + block = await destChainClient.getBlock({ blockNumber: latestSyncedblock }); + if (!block || block.hash === null || block.number === null) { + throw new BlockNotFoundError({ blockNumber: latestSyncedblock }); + } + } catch { + throw new BlockNotFoundError({ blockNumber: latestSyncedblock }); + } const signal = await this.getSignalForFailedMessage(msgHash); @@ -330,7 +358,7 @@ export class BridgeProver { // Build the hopProof const hopProof: HopProof = { - chainId: BigInt(destChainId), + chainId: BigInt(srcChainId), blockId: BigInt(block.number), rootHash: block.stateRoot, cacheOption: 0n, // Todo: could be configurable From 97aa874e7637d29862f9b78af78e0c7a02bb424a Mon Sep 17 00:00:00 2001 From: smtmfft <99081233+smtmfft@users.noreply.github.com> Date: Mon, 10 Jun 2024 22:40:19 +0800 Subject: [PATCH 3/8] feat(protocol): add new tcb & update related tests (#17545) --- packages/protocol/script/SetDcapParams.s.sol | 2 +- .../AutomataDcapV3AttestationTest.t.sol | 16 +- .../assets/0424/tcb_30606a000000.json | 221 ++++++++++++++++++ .../common/AttestationBase.t.sol | 24 +- 4 files changed, 253 insertions(+), 10 deletions(-) create mode 100644 packages/protocol/test/automata-attestation/assets/0424/tcb_30606a000000.json diff --git a/packages/protocol/script/SetDcapParams.s.sol b/packages/protocol/script/SetDcapParams.s.sol index 9f65aa2eaa1..990a80f0bf0 100644 --- a/packages/protocol/script/SetDcapParams.s.sol +++ b/packages/protocol/script/SetDcapParams.s.sol @@ -67,7 +67,7 @@ contract SetDcapParams is Script, AttestationBase { } function _configureTcbInfoJson() internal { - tcbInfoPath = vm.envString("TCB_INFO_PATH"); + string memory tcbInfoPath = vm.envString("TCB_INFO_PATH"); string memory tcbInfoJson = vm.readFile(string.concat(vm.projectRoot(), tcbInfoPath)); configureTcbInfoJson(dcapAttestationAddress, tcbInfoJson); console2.logString("TCB_INFO_JSON set: "); diff --git a/packages/protocol/test/automata-attestation/AutomataDcapV3AttestationTest.t.sol b/packages/protocol/test/automata-attestation/AutomataDcapV3AttestationTest.t.sol index 0983fbe0071..bc6c9b3c5e0 100644 --- a/packages/protocol/test/automata-attestation/AutomataDcapV3AttestationTest.t.sol +++ b/packages/protocol/test/automata-attestation/AutomataDcapV3AttestationTest.t.sol @@ -117,7 +117,7 @@ contract AutomataDcapV3AttestationTest is Test, AttestationBase { assertTrue(parsedInstanceAddr == address(0xC2D4564358139C90C17B744FE837F4DDc503EEdF)); } - function testParsedQuoteBinAttestation() public { + function testParsedSampleQuoteBinAttestation() public { vm.prank(user); bytes memory v3QuoteBytes = sampleQuote; V3Struct.ParsedV3QuoteStruct memory v3quote = @@ -128,6 +128,20 @@ contract AutomataDcapV3AttestationTest is Test, AttestationBase { assertTrue(parsedInstanceAddr == 0xC2D4564358139C90C17B744FE837F4DDc503EEdF); } + function testParsedCustomQuoteBinAttestation() public { + // fast forward to a time where the quote is valid + skip(1_820_000_000 - block.timestamp); + vm.prank(user); + bytes memory v3QuoteBytes = + hex"03000200000000000a000f00939a7233f79c4ca9940a0db3957f060724b261d141674cafc44426b74ed02fdf000000000b0d100fffff0000000000000000000000000000000000000000000000000000000000000000000000000000000000000500000000000000e7000000000000009b2784bccc0779fa34e75d74881bf5850bb4a6410f4edfa935ef77115db3a86d0000000000000000000000000000000000000000000000000000000000000000ca0583a715534a8c981b914589a7f0dc5d60959d9ae79fb5353299a4231673d500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000309734c02d2145cabb034f3c0505d28f7e5bfc2d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ca10000010eec632f3dbb9a3b1280ca5e837750e12ce5adbea2cc64d53672b0b0213404d3b27c84dc886ce361716b5d51e85136750ca05827ced6d7c2afd025bc6ee44bd874269e41c5fcd064b417d110f40b745b5c7d0eb8208be57c3c48bd7bdabbf2e47c46ddd935f4589134f89c9e0995dfdaaef29aa61807366818f2eebf915134d0b0d100fffff0000000000000000000000000000000000000000000000000000000000000000000000000000000000001500000000000000e70000000000000096b347a64e5a045e27369c26e6dcda51fd7c850e9b3a3a79e718f43261dee1e400000000000000000000000000000000000000000000000000000000000000008c4f5775d796503e96137f77c68a829a0056ac8ded70140b081b094490c57bff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bf7138a8539a3d44afb1d9ab145134cd27aa8c6ee6c3053bdab6b19b46800d570000000000000000000000000000000000000000000000000000000000000000e04cceabc75e8485601a01fdf514b68c31f4498f3e2273930c03a1f7efbe0eaee34f08f9c3a0eba0e24f677ce5692389f4c016e5caf8451b544d312df74264752000000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f0500620e00002d2d2d2d2d424547494e2043455254494649434154452d2d2d2d2d0a4d494945386a4343424a696741774942416749556565364e4e4f502f6b526c6f734d77336b435a70644a70424f414977436759494b6f5a497a6a3045417749770a634445694d434147413155454177775a535735305a577767553064594946424453794251624746305a6d397962534244515445614d42674741315545436777520a535735305a577767513239796347397959585270623234784644415342674e564241634d43314e68626e526849454e7359584a684d51737743515944565151490a44414a445154454c4d416b474131554542684d4356564d774868634e4d6a51774e5449794d6a4d7a4f544d345768634e4d7a45774e5449794d6a4d7a4f544d340a576a42774d534977494159445651514444426c4a626e526c624342545231676755454e4c49454e6c636e52705a6d6c6a5958526c4d526f77474159445651514b0a4442464a626e526c6243424462334a7762334a6864476c76626a45554d424947413155454277774c553246756447456751327868636d4578437a414a42674e560a4241674d416b4e424d517377435159445651514745774a56557a425a4d424d4742797147534d34394167454743437147534d34394177454841304941424673770a4f5267652f704a4834514d3163456c44626f463451384549313864386a42665a63536b4c615179656b35614f6b4767454756672f476655356255453450544c2b0a37794c6b626b394471557950467836592b434b6a67674d4f4d494944436a416642674e5648534d4547444157674253566231334e765276683655424a796454300a4d383442567776655644427242674e56485238455a4442694d47436758714263686c706f64485277637a6f764c32467761533530636e567a6447566b633256790a646d6c6a5a584d75615735305a577775593239744c334e6e6543396a5a584a3061575a7059324630615739754c3359304c33426a61324e796244396a595431770a624746305a6d397962535a6c626d4e765a476c755a7a316b5a584977485159445652304f42425945464c686b766f31584a6f2b6958464c6c6c454f2b472f56580a695239534d41344741315564447745422f775145417749477744414d42674e5648524d4241663845416a41414d4949434f77594a4b6f5a496876684e415130420a424949434c444343416967774867594b4b6f5a496876684e41513042415151516668326b6a583748503937435265674c6256594f726a434341575547436971470a534962345451454e41514977676746564d42414743797147534962345451454e415149424167454c4d42414743797147534962345451454e415149434167454c0a4d42414743797147534962345451454e41514944416745444d42414743797147534962345451454e41514945416745444d42454743797147534962345451454e0a41514946416749412f7a415242677371686b69472b4530424451454342674943415038774541594c4b6f5a496876684e4151304241676343415141774541594c0a4b6f5a496876684e4151304241676743415141774541594c4b6f5a496876684e4151304241676b43415141774541594c4b6f5a496876684e4151304241676f430a415141774541594c4b6f5a496876684e4151304241677343415141774541594c4b6f5a496876684e4151304241677743415141774541594c4b6f5a496876684e0a4151304241673043415141774541594c4b6f5a496876684e4151304241673443415141774541594c4b6f5a496876684e4151304241673843415141774541594c0a4b6f5a496876684e4151304241684143415141774541594c4b6f5a496876684e4151304241684543415130774877594c4b6f5a496876684e41513042416849450a4541734c4177502f2f7741414141414141414141414141774541594b4b6f5a496876684e4151304241775143414141774641594b4b6f5a496876684e415130420a424151474d474271414141414d41384743697147534962345451454e4151554b415145774867594b4b6f5a496876684e41513042426751516c4b6254394547580a78334843365163754c712b374d7a424542676f71686b69472b453042445145484d4459774541594c4b6f5a496876684e4151304242774542416638774541594c0a4b6f5a496876684e4151304242774942416638774541594c4b6f5a496876684e4151304242774d4241663877436759494b6f5a497a6a304541774944534141770a5251496763325556534f386d4b384c314f5675534943514264315671534e50326e716d5656394c4678504e326c6f774349514362662b69785065367a335966420a664b51344f4b6c546f694d55386a66333849672f765275586976525257773d3d0a2d2d2d2d2d454e442043455254494649434154452d2d2d2d2d0a2d2d2d2d2d424547494e2043455254494649434154452d2d2d2d2d0a4d4949436c6a4343416a32674177494241674956414a567658633239472b487051456e4a3150517a7a674658433935554d416f4743437147534d343942414d430a4d476778476a415942674e5642414d4d45556c756447567349464e48574342536232393049454e424d526f77474159445651514b4442464a626e526c624342440a62334a7762334a6864476c76626a45554d424947413155454277774c553246756447456751327868636d4578437a414a42674e564241674d416b4e424d5173770a435159445651514745774a56557a4165467730784f4441314d6a45784d4455774d5442614677307a4d7a41314d6a45784d4455774d5442614d484178496a41670a42674e5642414d4d47556c756447567349464e4857434251513073675547786864475a76636d306751304578476a415942674e5642416f4d45556c75644756730a49454e76636e4276636d4630615739754d5251774567594456515148444174545957353059534244624746795954454c4d416b474131554543417743513045780a437a414a42674e5642415954416c56544d466b77457759484b6f5a497a6a3043415159494b6f5a497a6a304441516344516741454e53422f377432316c58534f0a3243757a7078773734654a423732457944476757357258437478327456544c7136684b6b367a2b5569525a436e71523770734f766771466553786c6d546c4a6c0a65546d693257597a33714f42757a43427544416642674e5648534d4547444157674251695a517a575770303069664f44744a5653763141624f536347724442530a42674e5648523845537a424a4d45656752614244686b466f64485277637a6f764c324e6c636e52705a6d6c6a5958526c63793530636e567a6447566b633256790a646d6c6a5a584d75615735305a577775593239744c306c756447567355306459556d397664454e424c6d526c636a416442674e5648513445466751556c5739640a7a62306234656c4153636e553944504f4156634c336c517744675944565230504151482f42415144416745474d42494741315564457745422f7751494d4159420a4166384341514177436759494b6f5a497a6a30454177494452774177524149675873566b6930772b6936565947573355462f32327561586530594a446a3155650a6e412b546a44316169356343494359623153416d4435786b66545670766f34556f79695359787244574c6d5552344349394e4b7966504e2b0a2d2d2d2d2d454e442043455254494649434154452d2d2d2d2d0a2d2d2d2d2d424547494e2043455254494649434154452d2d2d2d2d0a4d4949436a7a4343416a53674177494241674955496d554d316c71644e496e7a6737535655723951477a6b6e42717777436759494b6f5a497a6a3045417749770a614445614d4267474131554541777752535735305a5777675530645949464a766233516751304578476a415942674e5642416f4d45556c756447567349454e760a636e4276636d4630615739754d5251774567594456515148444174545957353059534244624746795954454c4d416b47413155454341774351304578437a414a0a42674e5642415954416c56544d423458445445344d4455794d5445774e4455784d466f58445451354d54497a4d54497a4e546b314f566f77614445614d4267470a4131554541777752535735305a5777675530645949464a766233516751304578476a415942674e5642416f4d45556c756447567349454e76636e4276636d46300a615739754d5251774567594456515148444174545957353059534244624746795954454c4d416b47413155454341774351304578437a414a42674e56424159540a416c56544d466b77457759484b6f5a497a6a3043415159494b6f5a497a6a3044415163445167414543366e45774d4449595a4f6a2f69505773437a61454b69370a314f694f534c52466857476a626e42564a66566e6b59347533496a6b4459594c304d784f346d717379596a6c42616c54565978465032734a424b357a6c4b4f420a757a43427544416642674e5648534d4547444157674251695a517a575770303069664f44744a5653763141624f5363477244425342674e5648523845537a424a0a4d45656752614244686b466f64485277637a6f764c324e6c636e52705a6d6c6a5958526c63793530636e567a6447566b63325679646d6c6a5a584d75615735300a5a577775593239744c306c756447567355306459556d397664454e424c6d526c636a416442674e564851344546675155496d554d316c71644e496e7a673753560a55723951477a6b6e4271777744675944565230504151482f42415144416745474d42494741315564457745422f7751494d4159424166384341514577436759490a4b6f5a497a6a3045417749445351417752674968414f572f35516b522b533943695344634e6f6f774c7550524c735747662f59693747535839344267775477670a41694541344a306c72486f4d732b586f356f2f7358364f39515778485241765a55474f6452513763767152586171493d0a2d2d2d2d2d454e442043455254494649434154452d2d2d2d2d0a00"; + V3Struct.ParsedV3QuoteStruct memory v3quote = + verifyParsedQuoteAttestation(v3QuoteBytes, true); + address parsedInstanceAddr = + address(bytes20(Bytes.slice(v3quote.localEnclaveReport.reportData, 0, 20))); + // console.log("[log] parsed instance addr = %s", parsedInstanceAddr); + assertTrue(parsedInstanceAddr == 0x309734C02d2145cABB034F3c0505D28F7E5bFc2d); + } + function testParsedQuoteBase64Attestation() public { string memory v3QuoteB64Str = "AwACAAAAAAAKAA8Ak5pyM/ecTKmUCg2zlX8GBxLOavHkqB4OzaxCe5m7ApUAAAAACwsQD///AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAADnAAAAAAAAADAx1Y7sROJljY0p6/ptbdwC841C1n7aq7S/qjSGeOa6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdPSuOeKkIHE14ZQJvmEsmUZdpbf5KBZii0O8HZPcA9QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdC5oqY9mLGLKIiJy2EWABZTTIFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyhAAAEDWo4+gcMfB8oCHFOW95E3dDzSJmZxRjEPY6SLfsAxxmdL1E9tpPreSh37ItjqcFJQ6gYaaITdFjh1JUAIXGkDHJ34Tn18pgiVpiftlGYcB2Db41vFSVv8F1IkbytroE3V6fAn9HOAil3g7r2a52XZitfw4BTw0lwKAvqDrbhp+CwsQD///AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFQAAAAAAAADnAAAAAAAAAJazR6ZOWgReJzacJubc2lH9fIUOmzo6eecY9DJh3uHkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMT1d115ZQPpYTf3fGioKaAFasje1wFAsIGwlEkMV7/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1ueoS9M+Q7Gjo9LDL6xWrbHDoWPHtiwDG87hHG/EUZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXsD5UvPvZXKx36JrvQfjbUe/9s+nMccmvZd/k77abt+DaUSo3diPOAmrh0ahh1zxMInkgdjDYnXR+3H1g3xY8SAAAAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8FAGIOAAAtLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJRTh6Q0NCSm1nQXdJQkFnSVZBTHorallqeGNYK2ZKb21BVWJDSnFnaWZJb2w2TUFvR0NDcUdTTTQ5QkFNQwpNSEF4SWpBZ0JnTlZCQU1NR1VsdWRHVnNJRk5IV0NCUVEwc2dVR3hoZEdadmNtMGdRMEV4R2pBWUJnTlZCQW9NCkVVbHVkR1ZzSUVOdmNuQnZjbUYwYVc5dU1SUXdFZ1lEVlFRSERBdFRZVzUwWVNCRGJHRnlZVEVMTUFrR0ExVUUKQ0F3Q1EwRXhDekFKQmdOVkJBWVRBbFZUTUI0WERUSXpNRGd5T0RFeE1UTXdOVm9YRFRNd01EZ3lPREV4TVRNdwpOVm93Y0RFaU1DQUdBMVVFQXd3WlNXNTBaV3dnVTBkWUlGQkRTeUJEWlhKMGFXWnBZMkYwWlRFYU1CZ0dBMVVFCkNnd1JTVzUwWld3Z1EyOXljRzl5WVhScGIyNHhGREFTQmdOVkJBY01DMU5oYm5SaElFTnNZWEpoTVFzd0NRWUQKVlFRSURBSkRRVEVMTUFrR0ExVUVCaE1DVlZNd1dUQVRCZ2NxaGtqT1BRSUJCZ2dxaGtqT1BRTUJCd05DQUFReQpzQVNyUzZya2VqMTRIZjFKU3B1UE8xTkRVVnl6WEJDdnAxaDQyRjEwVVUwQUZVV2cxWTQ4b2VCZzd0dk41WDJJClRHRUI1ekhCanpqdjlrdVd5VWpVbzRJRERqQ0NBd293SHdZRFZSMGpCQmd3Rm9BVWxXOWR6YjBiNGVsQVNjblUKOURQT0FWY0wzbFF3YXdZRFZSMGZCR1F3WWpCZ29GNmdYSVphYUhSMGNITTZMeTloY0drdWRISjFjM1JsWkhObApjblpwWTJWekxtbHVkR1ZzTG1OdmJTOXpaM2d2WTJWeWRHbG1hV05oZEdsdmJpOTJOQzl3WTJ0amNtdy9ZMkU5CmNHeGhkR1p2Y20wbVpXNWpiMlJwYm1jOVpHVnlNQjBHQTFVZERnUVdCQlJUVjZabHoxdkprWVNma0pqOE5pZnoKcWdhd1dEQU9CZ05WSFE4QkFmOEVCQU1DQnNBd0RBWURWUjBUQVFIL0JBSXdBRENDQWpzR0NTcUdTSWI0VFFFTgpBUVNDQWl3d2dnSW9NQjRHQ2lxR1NJYjRUUUVOQVFFRUVQNUdyZ0Vjem9wTmJvTTBzSTBidEFFd2dnRmxCZ29xCmhraUcrRTBCRFFFQ01JSUJWVEFRQmdzcWhraUcrRTBCRFFFQ0FRSUJDekFRQmdzcWhraUcrRTBCRFFFQ0FnSUIKQ3pBUUJnc3Foa2lHK0UwQkRRRUNBd0lCQXpBUUJnc3Foa2lHK0UwQkRRRUNCQUlCQXpBUkJnc3Foa2lHK0UwQgpEUUVDQlFJQ0FQOHdFUVlMS29aSWh2aE5BUTBCQWdZQ0FnRC9NQkFHQ3lxR1NJYjRUUUVOQVFJSEFnRUFNQkFHCkN5cUdTSWI0VFFFTkFRSUlBZ0VBTUJBR0N5cUdTSWI0VFFFTkFRSUpBZ0VBTUJBR0N5cUdTSWI0VFFFTkFRSUsKQWdFQU1CQUdDeXFHU0liNFRRRU5BUUlMQWdFQU1CQUdDeXFHU0liNFRRRU5BUUlNQWdFQU1CQUdDeXFHU0liNApUUUVOQVFJTkFnRUFNQkFHQ3lxR1NJYjRUUUVOQVFJT0FnRUFNQkFHQ3lxR1NJYjRUUUVOQVFJUEFnRUFNQkFHCkN5cUdTSWI0VFFFTkFRSVFBZ0VBTUJBR0N5cUdTSWI0VFFFTkFRSVJBZ0VOTUI4R0N5cUdTSWI0VFFFTkFRSVMKQkJBTEN3TUQvLzhBQUFBQUFBQUFBQUFBTUJBR0NpcUdTSWI0VFFFTkFRTUVBZ0FBTUJRR0NpcUdTSWI0VFFFTgpBUVFFQmdCZ2FnQUFBREFQQmdvcWhraUcrRTBCRFFFRkNnRUJNQjRHQ2lxR1NJYjRUUUVOQVFZRUVFV0p6T3Z5ClpFOEsza2ovSGhYRWEvc3dSQVlLS29aSWh2aE5BUTBCQnpBMk1CQUdDeXFHU0liNFRRRU5BUWNCQVFIL01CQUcKQ3lxR1NJYjRUUUVOQVFjQ0FRSC9NQkFHQ3lxR1NJYjRUUUVOQVFjREFRSC9NQW9HQ0NxR1NNNDlCQU1DQTBnQQpNRVVDSUJxM3Z4MkROYW1RQkZtVWRNZSttUFlFQ3U4NFhnb0ZDZ0l3U0pWNGNKYVRBaUVBNDNwN3Ryd0I4MHMrCjJpd2FobURkQW5DTXdKVlBMaVNFdXdEUUY4VkVnU3c9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNsakNDQWoyZ0F3SUJBZ0lWQUpWdlhjMjlHK0hwUUVuSjFQUXp6Z0ZYQzk1VU1Bb0dDQ3FHU000OUJBTUMKTUdneEdqQVlCZ05WQkFNTUVVbHVkR1ZzSUZOSFdDQlNiMjkwSUVOQk1Sb3dHQVlEVlFRS0RCRkpiblJsYkNCRApiM0p3YjNKaGRHbHZiakVVTUJJR0ExVUVCd3dMVTJGdWRHRWdRMnhoY21FeEN6QUpCZ05WQkFnTUFrTkJNUXN3CkNRWURWUVFHRXdKVlV6QWVGdzB4T0RBMU1qRXhNRFV3TVRCYUZ3MHpNekExTWpFeE1EVXdNVEJhTUhBeElqQWcKQmdOVkJBTU1HVWx1ZEdWc0lGTkhXQ0JRUTBzZ1VHeGhkR1p2Y20wZ1EwRXhHakFZQmdOVkJBb01FVWx1ZEdWcwpJRU52Y25CdmNtRjBhVzl1TVJRd0VnWURWUVFIREF0VFlXNTBZU0JEYkdGeVlURUxNQWtHQTFVRUNBd0NRMEV4CkN6QUpCZ05WQkFZVEFsVlRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVOU0IvN3QyMWxYU08KMkN1enB4dzc0ZUpCNzJFeURHZ1c1clhDdHgydFZUTHE2aEtrNnorVWlSWkNucVI3cHNPdmdxRmVTeGxtVGxKbAplVG1pMldZejNxT0J1ekNCdURBZkJnTlZIU01FR0RBV2dCUWlaUXpXV3AwMGlmT0R0SlZTdjFBYk9TY0dyREJTCkJnTlZIUjhFU3pCSk1FZWdSYUJEaGtGb2RIUndjem92TDJObGNuUnBabWxqWVhSbGN5NTBjblZ6ZEdWa2MyVnkKZG1salpYTXVhVzUwWld3dVkyOXRMMGx1ZEdWc1UwZFlVbTl2ZEVOQkxtUmxjakFkQmdOVkhRNEVGZ1FVbFc5ZAp6YjBiNGVsQVNjblU5RFBPQVZjTDNsUXdEZ1lEVlIwUEFRSC9CQVFEQWdFR01CSUdBMVVkRXdFQi93UUlNQVlCCkFmOENBUUF3Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnWHNWa2kwdytpNlZZR1czVUYvMjJ1YVhlMFlKRGoxVWUKbkErVGpEMWFpNWNDSUNZYjFTQW1ENXhrZlRWcHZvNFVveWlTWXhyRFdMbVVSNENJOU5LeWZQTisKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJQ2p6Q0NBalNnQXdJQkFnSVVJbVVNMWxxZE5JbnpnN1NWVXI5UUd6a25CcXd3Q2dZSUtvWkl6ajBFQXdJdwphREVhTUJnR0ExVUVBd3dSU1c1MFpXd2dVMGRZSUZKdmIzUWdRMEV4R2pBWUJnTlZCQW9NRVVsdWRHVnNJRU52CmNuQnZjbUYwYVc5dU1SUXdFZ1lEVlFRSERBdFRZVzUwWVNCRGJHRnlZVEVMTUFrR0ExVUVDQXdDUTBFeEN6QUoKQmdOVkJBWVRBbFZUTUI0WERURTRNRFV5TVRFd05EVXhNRm9YRFRRNU1USXpNVEl6TlRrMU9Wb3dhREVhTUJnRwpBMVVFQXd3UlNXNTBaV3dnVTBkWUlGSnZiM1FnUTBFeEdqQVlCZ05WQkFvTUVVbHVkR1ZzSUVOdmNuQnZjbUYwCmFXOXVNUlF3RWdZRFZRUUhEQXRUWVc1MFlTQkRiR0Z5WVRFTE1Ba0dBMVVFQ0F3Q1EwRXhDekFKQmdOVkJBWVQKQWxWVE1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRUM2bkV3TURJWVpPai9pUFdzQ3phRUtpNwoxT2lPU0xSRmhXR2pibkJWSmZWbmtZNHUzSWprRFlZTDBNeE80bXFzeVlqbEJhbFRWWXhGUDJzSkJLNXpsS09CCnV6Q0J1REFmQmdOVkhTTUVHREFXZ0JRaVpReldXcDAwaWZPRHRKVlN2MUFiT1NjR3JEQlNCZ05WSFI4RVN6QkoKTUVlZ1JhQkRoa0ZvZEhSd2N6b3ZMMk5sY25ScFptbGpZWFJsY3k1MGNuVnpkR1ZrYzJWeWRtbGpaWE11YVc1MApaV3d1WTI5dEwwbHVkR1ZzVTBkWVVtOXZkRU5CTG1SbGNqQWRCZ05WSFE0RUZnUVVJbVVNMWxxZE5JbnpnN1NWClVyOVFHemtuQnF3d0RnWURWUjBQQVFIL0JBUURBZ0VHTUJJR0ExVWRFd0VCL3dRSU1BWUJBZjhDQVFFd0NnWUkKS29aSXpqMEVBd0lEU1FBd1JnSWhBT1cvNVFrUitTOUNpU0RjTm9vd0x1UFJMc1dHZi9ZaTdHU1g5NEJnd1R3ZwpBaUVBNEowbHJIb01zK1hvNW8vc1g2TzlRV3hIUkF2WlVHT2RSUTdjdnFSWGFxST0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoA"; diff --git a/packages/protocol/test/automata-attestation/assets/0424/tcb_30606a000000.json b/packages/protocol/test/automata-attestation/assets/0424/tcb_30606a000000.json new file mode 100644 index 00000000000..c97c2b2971d --- /dev/null +++ b/packages/protocol/test/automata-attestation/assets/0424/tcb_30606a000000.json @@ -0,0 +1,221 @@ +{ + "tcbInfo": { + "version": 2, + "issueDate": "2024-06-05T21:19:36Z", + "nextUpdate": "2024-07-05T21:19:36Z", + "fmspc": "30606a000000", + "pceId": "0000", + "tcbType": 0, + "tcbEvaluationDataNumber": 16, + "tcbLevels": [ + { + "tcb": { + "sgxtcbcomp01svn": 12, + "sgxtcbcomp02svn": 12, + "sgxtcbcomp03svn": 3, + "sgxtcbcomp04svn": 3, + "sgxtcbcomp05svn": 255, + "sgxtcbcomp06svn": 255, + "sgxtcbcomp07svn": 1, + "sgxtcbcomp08svn": 0, + "sgxtcbcomp09svn": 0, + "sgxtcbcomp10svn": 0, + "sgxtcbcomp11svn": 0, + "sgxtcbcomp12svn": 0, + "sgxtcbcomp13svn": 0, + "sgxtcbcomp14svn": 0, + "sgxtcbcomp15svn": 0, + "sgxtcbcomp16svn": 0, + "pcesvn": 13 + }, + "tcbDate": "2023-08-09T00:00:00Z", + "tcbStatus": "SWHardeningNeeded" + }, + { + "tcb": { + "sgxtcbcomp01svn": 12, + "sgxtcbcomp02svn": 12, + "sgxtcbcomp03svn": 3, + "sgxtcbcomp04svn": 3, + "sgxtcbcomp05svn": 255, + "sgxtcbcomp06svn": 255, + "sgxtcbcomp07svn": 0, + "sgxtcbcomp08svn": 0, + "sgxtcbcomp09svn": 0, + "sgxtcbcomp10svn": 0, + "sgxtcbcomp11svn": 0, + "sgxtcbcomp12svn": 0, + "sgxtcbcomp13svn": 0, + "sgxtcbcomp14svn": 0, + "sgxtcbcomp15svn": 0, + "sgxtcbcomp16svn": 0, + "pcesvn": 13 + }, + "tcbDate": "2023-08-09T00:00:00Z", + "tcbStatus": "ConfigurationAndSWHardeningNeeded" + }, + { + "tcb": { + "sgxtcbcomp01svn": 11, + "sgxtcbcomp02svn": 11, + "sgxtcbcomp03svn": 3, + "sgxtcbcomp04svn": 3, + "sgxtcbcomp05svn": 255, + "sgxtcbcomp06svn": 255, + "sgxtcbcomp07svn": 1, + "sgxtcbcomp08svn": 0, + "sgxtcbcomp09svn": 0, + "sgxtcbcomp10svn": 0, + "sgxtcbcomp11svn": 0, + "sgxtcbcomp12svn": 0, + "sgxtcbcomp13svn": 0, + "sgxtcbcomp14svn": 0, + "sgxtcbcomp15svn": 0, + "sgxtcbcomp16svn": 0, + "pcesvn": 13 + }, + "tcbDate": "2023-02-15T00:00:00Z", + "tcbStatus": "OutOfDate" + }, + { + "tcb": { + "sgxtcbcomp01svn": 11, + "sgxtcbcomp02svn": 11, + "sgxtcbcomp03svn": 3, + "sgxtcbcomp04svn": 3, + "sgxtcbcomp05svn": 255, + "sgxtcbcomp06svn": 255, + "sgxtcbcomp07svn": 0, + "sgxtcbcomp08svn": 0, + "sgxtcbcomp09svn": 0, + "sgxtcbcomp10svn": 0, + "sgxtcbcomp11svn": 0, + "sgxtcbcomp12svn": 0, + "sgxtcbcomp13svn": 0, + "sgxtcbcomp14svn": 0, + "sgxtcbcomp15svn": 0, + "sgxtcbcomp16svn": 0, + "pcesvn": 13 + }, + "tcbDate": "2023-02-15T00:00:00Z", + "tcbStatus": "OutOfDateConfigurationNeeded" + }, + { + "tcb": { + "sgxtcbcomp01svn": 7, + "sgxtcbcomp02svn": 9, + "sgxtcbcomp03svn": 3, + "sgxtcbcomp04svn": 3, + "sgxtcbcomp05svn": 255, + "sgxtcbcomp06svn": 255, + "sgxtcbcomp07svn": 1, + "sgxtcbcomp08svn": 0, + "sgxtcbcomp09svn": 0, + "sgxtcbcomp10svn": 0, + "sgxtcbcomp11svn": 0, + "sgxtcbcomp12svn": 0, + "sgxtcbcomp13svn": 0, + "sgxtcbcomp14svn": 0, + "sgxtcbcomp15svn": 0, + "sgxtcbcomp16svn": 0, + "pcesvn": 13 + }, + "tcbDate": "2022-08-10T00:00:00Z", + "tcbStatus": "OutOfDate" + }, + { + "tcb": { + "sgxtcbcomp01svn": 7, + "sgxtcbcomp02svn": 9, + "sgxtcbcomp03svn": 3, + "sgxtcbcomp04svn": 3, + "sgxtcbcomp05svn": 255, + "sgxtcbcomp06svn": 255, + "sgxtcbcomp07svn": 0, + "sgxtcbcomp08svn": 0, + "sgxtcbcomp09svn": 0, + "sgxtcbcomp10svn": 0, + "sgxtcbcomp11svn": 0, + "sgxtcbcomp12svn": 0, + "sgxtcbcomp13svn": 0, + "sgxtcbcomp14svn": 0, + "sgxtcbcomp15svn": 0, + "sgxtcbcomp16svn": 0, + "pcesvn": 13 + }, + "tcbDate": "2022-08-10T00:00:00Z", + "tcbStatus": "OutOfDateConfigurationNeeded" + }, + { + "tcb": { + "sgxtcbcomp01svn": 4, + "sgxtcbcomp02svn": 4, + "sgxtcbcomp03svn": 3, + "sgxtcbcomp04svn": 3, + "sgxtcbcomp05svn": 255, + "sgxtcbcomp06svn": 255, + "sgxtcbcomp07svn": 0, + "sgxtcbcomp08svn": 0, + "sgxtcbcomp09svn": 0, + "sgxtcbcomp10svn": 0, + "sgxtcbcomp11svn": 0, + "sgxtcbcomp12svn": 0, + "sgxtcbcomp13svn": 0, + "sgxtcbcomp14svn": 0, + "sgxtcbcomp15svn": 0, + "sgxtcbcomp16svn": 0, + "pcesvn": 11 + }, + "tcbDate": "2021-11-10T00:00:00Z", + "tcbStatus": "OutOfDate" + }, + { + "tcb": { + "sgxtcbcomp01svn": 4, + "sgxtcbcomp02svn": 4, + "sgxtcbcomp03svn": 3, + "sgxtcbcomp04svn": 3, + "sgxtcbcomp05svn": 255, + "sgxtcbcomp06svn": 255, + "sgxtcbcomp07svn": 0, + "sgxtcbcomp08svn": 0, + "sgxtcbcomp09svn": 0, + "sgxtcbcomp10svn": 0, + "sgxtcbcomp11svn": 0, + "sgxtcbcomp12svn": 0, + "sgxtcbcomp13svn": 0, + "sgxtcbcomp14svn": 0, + "sgxtcbcomp15svn": 0, + "sgxtcbcomp16svn": 0, + "pcesvn": 10 + }, + "tcbDate": "2020-11-11T00:00:00Z", + "tcbStatus": "OutOfDate" + }, + { + "tcb": { + "sgxtcbcomp01svn": 4, + "sgxtcbcomp02svn": 4, + "sgxtcbcomp03svn": 3, + "sgxtcbcomp04svn": 3, + "sgxtcbcomp05svn": 255, + "sgxtcbcomp06svn": 255, + "sgxtcbcomp07svn": 0, + "sgxtcbcomp08svn": 0, + "sgxtcbcomp09svn": 0, + "sgxtcbcomp10svn": 0, + "sgxtcbcomp11svn": 0, + "sgxtcbcomp12svn": 0, + "sgxtcbcomp13svn": 0, + "sgxtcbcomp14svn": 0, + "sgxtcbcomp15svn": 0, + "sgxtcbcomp16svn": 0, + "pcesvn": 5 + }, + "tcbDate": "2018-01-04T00:00:00Z", + "tcbStatus": "OutOfDate" + } + ] + }, + "signature": "cd542e85f79fdf7fadb6218bb8640df5fd988f6287b5da46c7f96c63f93c39e540fe260a2f5fe640430705339fad9372a4301f071a9838a737dff6ff6c63e042" +} diff --git a/packages/protocol/test/automata-attestation/common/AttestationBase.t.sol b/packages/protocol/test/automata-attestation/common/AttestationBase.t.sol index 62016721950..33345398ca9 100644 --- a/packages/protocol/test/automata-attestation/common/AttestationBase.t.sol +++ b/packages/protocol/test/automata-attestation/common/AttestationBase.t.sol @@ -30,7 +30,12 @@ contract AttestationBase is Test, DcapTestUtils, V3QuoteParseUtils { // use a network that where the P256Verifier contract exists // ref: https://github.com/daimo-eth/p256-verifier //string internal rpcUrl = vm.envString("RPC_URL"); - string internal tcbInfoPath = "/test/automata-attestation/assets/0923/tcb_00606A000000.json"; + string[] internal tcbInfoPaths = [ + "/test/automata-attestation/assets/0923/tcb_00606A000000.json", + "/test/automata-attestation/assets/0424/tcb_00A067110000.json", + "/test/automata-attestation/assets/0424/tcb_00906ED50000.json", + "/test/automata-attestation/assets/0424/tcb_30606a000000.json" + ]; string internal idPath = "/test/automata-attestation/assets/0923/identity.json"; address constant admin = address(1); address constant user = 0x0926b716f6aEF52F9F3C3474A2846e1Bf1ACedf6; @@ -68,15 +73,18 @@ contract AttestationBase is Test, DcapTestUtils, V3QuoteParseUtils { setMrEnclave(address(attestation), mrEnclave, true); setMrSigner(address(attestation), mrSigner, true); - string memory tcbInfoJson = vm.readFile(string.concat(vm.projectRoot(), tcbInfoPath)); - string memory enclaveIdJson = vm.readFile(string.concat(vm.projectRoot(), idPath)); + for (uint256 i = 0; i < tcbInfoPaths.length; i++) { + string memory tcbInfoJson = + vm.readFile(string.concat(vm.projectRoot(), tcbInfoPaths[i])); - (bool tcbParsedSuccess, TCBInfoStruct.TCBInfo memory parsedTcbInfo) = - parseTcbInfoJson(tcbInfoJson); - require(tcbParsedSuccess, "tcb parsed failed"); - string memory fmspc = LibString.lower(parsedTcbInfo.fmspc); - attestation.configureTcbInfoJson(fmspc, parsedTcbInfo); + (bool tcbParsedSuccess, TCBInfoStruct.TCBInfo memory parsedTcbInfo) = + parseTcbInfoJson(tcbInfoJson); + require(tcbParsedSuccess, "tcb parsed failed"); + string memory fmspc = LibString.lower(parsedTcbInfo.fmspc); + attestation.configureTcbInfoJson(fmspc, parsedTcbInfo); + } + string memory enclaveIdJson = vm.readFile(string.concat(vm.projectRoot(), idPath)); configureQeIdentityJson(address(attestation), enclaveIdJson); vm.stopPrank(); } From 98beab8a7de4f365ec76bd6fbffebfcc6fb4505d Mon Sep 17 00:00:00 2001 From: David <david@taiko.xyz> Date: Mon, 10 Jun 2024 23:18:44 +0700 Subject: [PATCH 4/8] docs(protocol): update Hekla deployment (#17543) --- .../deployments/hekla-contract-logs.md | 60 ++++++++++++------- 1 file changed, 38 insertions(+), 22 deletions(-) diff --git a/packages/protocol/deployments/hekla-contract-logs.md b/packages/protocol/deployments/hekla-contract-logs.md index 4ec92a0750b..192f4392b1e 100644 --- a/packages/protocol/deployments/hekla-contract-logs.md +++ b/packages/protocol/deployments/hekla-contract-logs.md @@ -9,10 +9,11 @@ ### shared_address_manager - proxy: `0x7D3338FD5e654CAC5B10028088624CA1D64e74f7` -- impl: `0x1B71F7014DB583Dc354d97608FAFe81e1a611c03` +- impl: `0x27ef4e7b101e822Dd107FF14Ca2540e89cea8E3e` - owner: `0x13cfc60c900a927C48f5c2a4923Ec9771a3A2805` - logs: - upgraded on May 10, 2024 at commit `4903bec` + - upgraded on Jun 10, 2024 at commit `d5965bb` ### taiko_token @@ -25,42 +26,47 @@ ### signal_service - proxy: `0x6Fc2fe9D9dd0251ec5E0727e826Afbb0Db2CBe0D` -- impl: `0x7c20d41c2573A1225B361A3B2F667fe1F021A83B` +- impl: `0xE6371B30e500ff38ec809a652fdFE98174011B2D` - owner: `0x13cfc60c900a927C48f5c2a4923Ec9771a3A2805` - logs: - upgraded on May 10, 2024 at commit `4903bec` + - upgraded on Jun 10, 2024 at commit `d5965bb` ### bridge - proxy: `0xA098b76a3Dd499D3F6D58D8AcCaFC8efBFd06807` -- impl: `0x74baa4826B22F7746EfEeCEc178FFbb77A2567C3` +- impl: `0x339F4C5320a5C697EA10b4f35d546C330AB43d8D` - owner: `0x13cfc60c900a927C48f5c2a4923Ec9771a3A2805` - logs: - upgraded on May 10, 2024 at commit `4903bec` + - upgraded on Jun 10, 2024 at commit `d5965bb` ### erc20_vault - proxy: `0x2259662ed5dE0E09943Abe701bc5f5a108eABBAa` -- impl: `0xbE1101ED567020581127Ad065461c69c2C3A6115` +- impl: `0x1bf437b2f6e5959fe167210Ee2221ADa09a66846` - owner: `0x13cfc60c900a927C48f5c2a4923Ec9771a3A2805` - logs: - upgraded on May 10, 2024 at commit `4903bec` + - upgraded on Jun 10, 2024 at commit `d5965bb` ### erc721_vault - proxy: `0x046b82D9010b534c716742BE98ac3FEf3f2EC99f` -- impl: `0xBEBD9B63dED7eC68F00f98495b60FC5eEE7f154E` +- impl: `0x06467bab46598b887240044309A6ffE261A0E2e3` - owner: `0x13cfc60c900a927C48f5c2a4923Ec9771a3A2805` - logs: - upgraded on May 10, 2024 at commit `4903bec` + - upgraded on Jun 10, 2024 at commit `d5965bb` ### erc1155_vault - proxy: `0x9Ae5945Ab34f6182F75E16B73e037421F341fEe3` -- impl: `0xE1A60fD257De1A304a5b5d1EfDa38aFe52c0f910` +- impl: `0xBFCff65554d6e89A1aC280eE1E9f87764124B833` - owner: `0x13cfc60c900a927C48f5c2a4923Ec9771a3A2805` - logs: - upgraded on May 10, 2024 at commit `4903bec` + - upgraded on Jun 10, 2024 at commit `d5965bb` ### bridged_erc20 @@ -83,10 +89,11 @@ ### rollup_address_manager - proxy: `0x1F027871F286Cf4B7F898B21298E7B3e090a8403` -- impl: `0xDd39Ad18E6B8A2696394C310D5F95700dB643D27` +- impl: `0x68570e85Ca54bAE1B6f608d0929665146BA66B39` - owner: `0x13cfc60c900a927C48f5c2a4923Ec9771a3A2805` - logs: - upgraded on May 10, 2024 at commit `13ad99d` + - upgraded on Jun 10, 2024 at commit `d5965bb` ### taikoL1 @@ -95,6 +102,7 @@ - owner: `0x13cfc60c900a927C48f5c2a4923Ec9771a3A2805` - logs: - upgraded on May 10, 2024 at commit `4903bec` + - upgraded on Jun 10, 2024 at [PR #17532](https://github.com/taikoxyz/taiko-mono/pull/17532) ### assignmentHook @@ -110,95 +118,103 @@ - logs: - upgraded on May 14, 2024 at commit `0ef7b8caa` -### guardian_prover_minority +### tierRouter -- proxy: `` -- impl: `` -- owner: `0x13cfc60c900a927C48f5c2a4923Ec9771a3A2805` +- impl: `0x1e55bc9cA270F0F1dFFB37C7B3dBED413be4282c.` - logs: - - upgraded on May 10, 2024 at commit `4903bec` + - deployed on Jun 10, 2024 at commit `d5965bb` ### guardian_prover - proxy: `0x92F195a8702da2104aE8E3E10779176E7C35d6BC` -- impl: `0x3D351Ab46F79805e579E24E5cD94362758a99eb5` +- impl: `0x23bDb18995266c1Ac4c1BDBF69aE977A2DCE0750` - owner: `0x13cfc60c900a927C48f5c2a4923Ec9771a3A2805` - logs: - upgraded on May 10, 2024 at commit `4903bec` + - upgraded on Jun 10, 2024 at commit `d5965bb` ### guardian_minority - proxy: `0x31d4d27da5c299d4b6CE19c869B8891C0002795d` -- impl: `0x22DC7e70B810822EB8DdDDb341021c252f480f2D` +- impl: `0x7eA0a9d62cF26Bd81D62AEf6D6D67a86A580aFA3` - owner: `0x13cfc60c900a927C48f5c2a4923Ec9771a3A2805` - logs: - deployed on May 20, 2024 at commit `6e56475` + - upgraded on Jun 10, 2024 at commit `d5965bb` ## L2 Contracts ### bridge - proxy: `0x1670090000000000000000000000000000000001` -- impl: `0x8CC29961a0329D033C6A5fF5Ab915cceB53aEDce` +- impl: `0xD981DaF607bb6D4249f943d1b13a9AE071E8E3B4` - owner: `0x1D2D1bb9D180541E88a6a682aCf3f61c1605B190` - logs: - upgraded on May 10, 2024 at commit `4903bec` + - upgraded on Jun 10, 2024 at commit `d5965bb` ### erc20_vault - proxy: `0x1670090000000000000000000000000000000002` -- impl: `0xFefDE79d88264E26fb1fea40f83b8C549d09075E` +- impl: `0x18D098279287b3e72A9BC5c6CCfa05475567Ee32` - owner: `0x1D2D1bb9D180541E88a6a682aCf3f61c1605B190` - logs: - upgraded on May 10, 2024 at commit `4903bec` + - upgraded on Jun 10, 2024 at commit `d5965bb` ### erc721_vault - proxy: `0x1670090000000000000000000000000000000003` -- impl: `0x598Ee9B7EdbB2A838156823Ae28E2Ca98c0b5BB7` +- impl: `0x7bbacc9FFd29442DF3173b7685560fCE96E01b62` - owner: `0x1D2D1bb9D180541E88a6a682aCf3f61c1605B190` - logs: - upgraded on May 10, 2024 at commit `4903bec` + - upgraded on Jun 10, 2024 at commit `d5965bb` ### erc1155_vault - proxy: `0x1670090000000000000000000000000000000004` -- impl: `0x63Ff7f4Fac6275a598DF5d86cC5e1278Db2D7346` +- impl: `0xEEF23D0aa5d19Ba17A652d98378c670b9A3aD30A` - owner: `0x1D2D1bb9D180541E88a6a682aCf3f61c1605B190` - logs: - upgraded on May 10, 2024 at commit `4903bec` + - upgraded on Jun 10, 2024 at commit `d5965bb` ### signal_service - proxy: `0x1670090000000000000000000000000000000005` -- impl: `0x6EFDeff4E88a24063aAaeF6f50470E3305eCf1Ce` +- impl: `0x4c70b7F5E153D497faFa0476575903F9299ed811` - owner: `0x1D2D1bb9D180541E88a6a682aCf3f61c1605B190` - logs: - upgraded on May 10, 2024 at commit `4903bec` + - upgraded on Jun 10, 2024 at commit `d5965bb` ### shared_address_manager - proxy: `0x1670090000000000000000000000000000000006` -- impl: `0x38969CEc9C1524D81264dE493b18988920C1f74b` +- impl: `0x91Cf5766Fbc35bb1a2226DE5052C308a5EDd1d47` - owner: `0x1D2D1bb9D180541E88a6a682aCf3f61c1605B190` - logs: - upgraded on May 10, 2024 at commit `4903bec` + - upgraded on Jun 10, 2024 at commit `d5965bb` ### taikoL2 - proxy: `0x1670090000000000000000000000000000010001` -- impl: `0x5b927DF807f84D6A993BD04f6EC0C17f7fa4cEFb` +- impl: `0x0C74010473C066Cdd20BA32044D1f6E28527A725` - owner: `0x1D2D1bb9D180541E88a6a682aCf3f61c1605B190` - logs: - upgraded on May 10, 2024 at commit `4903bec` + - upgraded on Jun 10, 2024 at commit `d5965bb` ### rollup_address_manager - proxy: `0x1670090000000000000000000000000000010002` -- impl: `0xF74340b7E8816FA0351be5AF5fDF91b28495B99A` +- impl: `0xd41f03dF5f46a0686807d9DBDd94a1223FC73AEe` - owner: `0x1D2D1bb9D180541E88a6a682aCf3f61c1605B190` - logs: - upgraded on May 10, 2024 at commit `4903bec` + - upgraded on Jun 10, 2024 at commit `d5965bb` ### bridged_erc20 From 5781b338221dbe1e8ab2a1556ffeeaa239b8d957 Mon Sep 17 00:00:00 2001 From: Korbinian <KorbinianK@users.noreply.github.com> Date: Mon, 10 Jun 2024 18:48:03 +0200 Subject: [PATCH 5/8] fix(bridge-ui): lock continue button when fee is calculating (#17548) Co-authored-by: Daniel Wang <99078276+dantaik@users.noreply.github.com> --- .../StepNavigation/StepNavigation.svelte | 4 ++-- .../StepNavigation/StepNavigation.svelte | 4 ++-- .../ProcessingFee/ProcessingFee.svelte | 16 ++++++---------- .../ProcessingFee/RecommendedFee.svelte | 7 +++---- .../bridge-ui/src/components/Bridge/state.ts | 1 + packages/bridge-ui/src/i18n/en.json | 6 +++--- 6 files changed, 17 insertions(+), 21 deletions(-) diff --git a/packages/bridge-ui/src/components/Bridge/FungibleBridgeComponents/StepNavigation/StepNavigation.svelte b/packages/bridge-ui/src/components/Bridge/FungibleBridgeComponents/StepNavigation/StepNavigation.svelte index b81a7285e0d..83d86fd7ce6 100644 --- a/packages/bridge-ui/src/components/Bridge/FungibleBridgeComponents/StepNavigation/StepNavigation.svelte +++ b/packages/bridge-ui/src/components/Bridge/FungibleBridgeComponents/StepNavigation/StepNavigation.svelte @@ -1,7 +1,7 @@ <script lang="ts"> import { t } from 'svelte-i18n'; - import { importDone } from '$components/Bridge/state'; + import { calculatingProcessingFee, importDone } from '$components/Bridge/state'; import { BridgeSteps, BridgingStatus } from '$components/Bridge/types'; import { ActionButton } from '$components/Button'; import { Icon } from '$components/Icon'; @@ -66,7 +66,7 @@ manuallyConfirmedRecipientStep = false; }; - $: disabled = !$account || !$account.isConnected; + $: disabled = !$account || !$account.isConnected || $calculatingProcessingFee; $: nextStepButtonText = getStepText(); diff --git a/packages/bridge-ui/src/components/Bridge/NFTBridgeComponents/StepNavigation/StepNavigation.svelte b/packages/bridge-ui/src/components/Bridge/NFTBridgeComponents/StepNavigation/StepNavigation.svelte index 3c64ba8af19..8d508846d7d 100644 --- a/packages/bridge-ui/src/components/Bridge/NFTBridgeComponents/StepNavigation/StepNavigation.svelte +++ b/packages/bridge-ui/src/components/Bridge/NFTBridgeComponents/StepNavigation/StepNavigation.svelte @@ -1,7 +1,7 @@ <script lang="ts"> import { t } from 'svelte-i18n'; - import { importDone } from '$components/Bridge/state'; + import { calculatingProcessingFee, importDone } from '$components/Bridge/state'; import { BridgeSteps, BridgingStatus, ImportMethod } from '$components/Bridge/types'; import { ActionButton } from '$components/Button'; import { StepBack } from '$components/Stepper'; @@ -69,7 +69,7 @@ {/if} {/if} {#if activeStep === BridgeSteps.REVIEW} - <ActionButton priority="primary" on:click={() => handleNextStep()}> + <ActionButton priority="primary" disabled={$calculatingProcessingFee} on:click={() => handleNextStep()}> <span class="body-bold">{nextStepButtonText}</span> </ActionButton> diff --git a/packages/bridge-ui/src/components/Bridge/SharedBridgeComponents/ProcessingFee/ProcessingFee.svelte b/packages/bridge-ui/src/components/Bridge/SharedBridgeComponents/ProcessingFee/ProcessingFee.svelte index f3108530292..8a1ee843239 100644 --- a/packages/bridge-ui/src/components/Bridge/SharedBridgeComponents/ProcessingFee/ProcessingFee.svelte +++ b/packages/bridge-ui/src/components/Bridge/SharedBridgeComponents/ProcessingFee/ProcessingFee.svelte @@ -5,7 +5,7 @@ import Alert from '$components/Alert/Alert.svelte'; import FlatAlert from '$components/Alert/FlatAlert.svelte'; - import { gasLimitZero, processingFee, processingFeeMethod } from '$components/Bridge/state'; + import { calculatingProcessingFee, gasLimitZero, processingFee, processingFeeMethod } from '$components/Bridge/state'; import { ActionButton, CloseButton } from '$components/Button'; import { InputBox } from '$components/InputBox'; import { LoadingText } from '$components/LoadingText'; @@ -26,7 +26,6 @@ let dialogId = `dialog-${uid()}`; let recommendedAmount = BigInt(0); - let calculatingRecommendedAmount = false; let errorCalculatingRecommendedAmount = false; let calculatingEnoughEth = false; @@ -161,7 +160,7 @@ <div class="f-between-center"> <span class="text-secondary-content">{$t('processing_fee.title')}</span> <span class=" text-primary-content mt-[4px]"> - {#if calculatingRecommendedAmount} + {#if $calculatingProcessingFee} <LoadingText mask="0.0017730224073" /> ETH {:else if errorCalculatingRecommendedAmount && $processingFeeMethod === ProcessingFeeMethod.RECOMMENDED} <FlatAlert type="warning" message={$t('processing_fee.recommended.error')} /> @@ -175,7 +174,7 @@ </div> {:else if textOnly} <span class="text-primary-content mt-[4px] {$$props.class}"> - {#if calculatingRecommendedAmount} + {#if $calculatingProcessingFee} <LoadingText mask="0.0017730224073" /> {:else if errorCalculatingRecommendedAmount && $processingFeeMethod === ProcessingFeeMethod.RECOMMENDED} <span class="text-warning-sentiment">{$t('processing_fee.recommended.error')}</span> @@ -201,7 +200,7 @@ </div> <span class="body-small-regular text-secondary-content mt-[4px]"> - {#if calculatingRecommendedAmount} + {#if $calculatingProcessingFee} <LoadingText mask="0.0001" /> ETH {:else if errorCalculatingRecommendedAmount && $processingFeeMethod === ProcessingFeeMethod.RECOMMENDED} <FlatAlert type="warning" message={$t('processing_fee.recommended.error')} /> @@ -234,7 +233,7 @@ </label> <span class="body-small-regular text-secondary-content"> <!-- TODO: think about the UI for this part. Talk to Jane --> - {#if calculatingRecommendedAmount} + {#if $calculatingProcessingFee} <LoadingText mask="0.0001" /> ETH {:else if errorCalculatingRecommendedAmount} <FlatAlert type="warning" message={$t('processing_fee.recommended.error')} /> @@ -383,10 +382,7 @@ </div> {/if} -<RecommendedFee - bind:amount={recommendedAmount} - bind:calculating={calculatingRecommendedAmount} - bind:error={errorCalculatingRecommendedAmount} /> +<RecommendedFee bind:amount={recommendedAmount} bind:error={errorCalculatingRecommendedAmount} /> <NoneOption bind:enoughEth={hasEnoughEth} diff --git a/packages/bridge-ui/src/components/Bridge/SharedBridgeComponents/ProcessingFee/RecommendedFee.svelte b/packages/bridge-ui/src/components/Bridge/SharedBridgeComponents/ProcessingFee/RecommendedFee.svelte index c7c783890a9..9c6a1ee7193 100644 --- a/packages/bridge-ui/src/components/Bridge/SharedBridgeComponents/ProcessingFee/RecommendedFee.svelte +++ b/packages/bridge-ui/src/components/Bridge/SharedBridgeComponents/ProcessingFee/RecommendedFee.svelte @@ -1,14 +1,13 @@ <script lang="ts"> import { onDestroy, onMount } from 'svelte'; - import { destNetwork, selectedToken } from '$components/Bridge/state'; + import { calculatingProcessingFee, destNetwork, selectedToken } from '$components/Bridge/state'; import { processingFeeComponent } from '$config'; import { recommendProcessingFee } from '$libs/fee'; import type { NFT, Token } from '$libs/token'; import { connectedSourceChain } from '$stores/network'; export let amount: bigint; - export let calculating = false; export let error = false; let interval: ReturnType<typeof setInterval>; @@ -17,7 +16,7 @@ // Without token nor destination chain we cannot compute this fee if (!token || !destChainId) return; - calculating = true; + $calculatingProcessingFee = true; error = false; try { @@ -30,7 +29,7 @@ console.error(err); error = true; } finally { - calculating = false; + $calculatingProcessingFee = false; } } diff --git a/packages/bridge-ui/src/components/Bridge/state.ts b/packages/bridge-ui/src/components/Bridge/state.ts index 2b33509e229..f6089db2618 100644 --- a/packages/bridge-ui/src/components/Bridge/state.ts +++ b/packages/bridge-ui/src/components/Bridge/state.ts @@ -35,6 +35,7 @@ export const bridging = writable<boolean>(false); export const approving = writable<boolean>(false); export const computingBalance = writable<boolean>(false); export const validatingAmount = writable<boolean>(false); +export const calculatingProcessingFee = writable<boolean>(false); // Errors state export const errorComputingBalance = writable<boolean>(false); diff --git a/packages/bridge-ui/src/i18n/en.json b/packages/bridge-ui/src/i18n/en.json index 7b9b503c630..04879abbfd7 100644 --- a/packages/bridge-ui/src/i18n/en.json +++ b/packages/bridge-ui/src/i18n/en.json @@ -39,7 +39,7 @@ "nft_scan_again": "Scan again" }, "alerts": { - "not_enough_funds": "You do not have enough ETH to cover the processing fee and transaction fee", + "not_enough_funds": "You do not have enough ETH to cover the processing fee and transaction fee. Please add more ETH to your wallet (>= 0.0015 ETH).", "slow_bridging": "Please note: Bridging to L1 will take around 24hrs!", "smart_contract_wallet": "It seems you are using a smart contract wallet. Please double check that the recipient matches your wallet on the destination or change it accordingly.", "stable_coin": "You are bridging a stable coin. For USDC, we are currently partnering with <a target=\"_blank\" href=\"https://stargate.finance/transfer\" class=\"link\">Stargate Bridge</a> for liquidity. Consider using their bridge, as the ecosystem partners are likely using their bridged version", @@ -291,7 +291,7 @@ }, "title": "Faucet", "warning": { - "insufficient_balance": "You don't have enough ETH to complete the transaction. Please add some ETH to your wallet.", + "insufficient_balance": "You don't have enough ETH to complete the transaction. Please add more ETH to your wallet (>= 0.0015 ETH)", "no_connected": "Please connect your wallet to mint tokens.", "not_mintable": "This token is not mintable on this network. Please switch to the correct network.", "token_minted": "You have already minted this token.", @@ -503,7 +503,7 @@ "title": "What is \"Connected to the correct chain\"?" }, "funds": { - "description": "In order to claim the transaction yourself, you need enough funds on the destination chain. If you've kept the default processing fee, the relayer will likely claim for you soon.", + "description": "In order to claim the transaction yourself, you need enough funds on the destination chain (>= 0.0015 ETH). If you've kept the default processing fee, the relayer will likely claim for you soon.", "title": "What is \"Sufficient funds to claim\"?" }, "quota": { From 2ebcac5c6ad63b6130dd696c96537c12b791535b Mon Sep 17 00:00:00 2001 From: xiaodino <ruby@taiko.xyz> Date: Mon, 10 Jun 2024 10:21:55 -0700 Subject: [PATCH 6/8] chore(relayer): prevent indexing halts and add error monitoring metrics (#17525) --- packages/relayer/cmd/flags/common.go | 4 +++- packages/relayer/indexer/indexer.go | 13 +++++++++---- packages/relayer/prometheus.go | 16 ++++++++++++++++ 3 files changed, 28 insertions(+), 5 deletions(-) diff --git a/packages/relayer/cmd/flags/common.go b/packages/relayer/cmd/flags/common.go index c56cbdd31da..30eb6d87beb 100644 --- a/packages/relayer/cmd/flags/common.go +++ b/packages/relayer/cmd/flags/common.go @@ -105,12 +105,14 @@ var ( Usage: "Retry interval in seconds when there is an error", Category: processorCategory, Value: 12, + EnvVars: []string{"BACKOFF_RETRY_INTERVAL"}, } BackOffMaxRetrys = &cli.Uint64Flag{ Name: "backoff.maxRetrys", Usage: "Max retry times when there is an error", Category: processorCategory, - Value: 3, + Value: 5, + EnvVars: []string{"BACKOFF_MAX_RETRYS"}, } ) diff --git a/packages/relayer/indexer/indexer.go b/packages/relayer/indexer/indexer.go index dfc0f36e89d..dc88e75c7b5 100644 --- a/packages/relayer/indexer/indexer.go +++ b/packages/relayer/indexer/indexer.go @@ -384,7 +384,9 @@ func (i *Indexer) filter(ctx context.Context) error { switch i.eventName { case relayer.EventNameMessageSent: if err := i.withRetry(func() error { return i.indexMessageSentEvents(ctx, filterOpts) }); err != nil { - return errors.Wrap(err, "i.indexMessageSentEvents") + // We will skip the error after retrying, as we want the indexer to continue. + slog.Error("i.indexMessageSentEvents", "error", err) + relayer.MessageSentEventsAfterRetryErrorCount.Inc() } // we dont want to watch for message status changed events @@ -393,17 +395,20 @@ func (i *Indexer) filter(ctx context.Context) error { // since they are related. if i.watchMode != CrawlPastBlocks { if err := i.withRetry(func() error { return i.indexMessageStatusChangedEvents(ctx, filterOpts) }); err != nil { - return errors.Wrap(err, "i.indexMessageStatusChangedEvents") + slog.Error("i.indexMessageStatusChangedEvents", "error", err) + relayer.MessageStatusChangedEventsAfterRetryErrorCount.Inc() } // we also want to index chain data synced events. if err := i.withRetry(func() error { return i.indexChainDataSyncedEvents(ctx, filterOpts) }); err != nil { - return errors.Wrap(err, "i.indexChainDataSyncedEvents") + slog.Error("i.indexChainDataSyncedEvents", "error", err) + relayer.ChainDataSyncedEventsAfterRetryErrorCount.Inc() } } case relayer.EventNameMessageProcessed: if err := i.withRetry(func() error { return i.indexMessageProcessedEvents(ctx, filterOpts) }); err != nil { - return errors.Wrap(err, "i.indexMessageProcessedEvents") + slog.Error("i.indexMessageProcessedEvents", "error", err) + relayer.MessageProcessedEventsAfterRetryErrorCount.Inc() } } diff --git a/packages/relayer/prometheus.go b/packages/relayer/prometheus.go index 80cafab8db6..67f8b64f7cf 100644 --- a/packages/relayer/prometheus.go +++ b/packages/relayer/prometheus.go @@ -130,4 +130,20 @@ var ( Name: "unprofitable_message_after_transacting_ops_total", Help: "The total number of processed events that ended up unprofitable", }) + MessageSentEventsAfterRetryErrorCount = promauto.NewCounter(prometheus.CounterOpts{ + Name: "message_sent_events_after_retry_error_count", + Help: "The total number of errors logged for MessageSent events after retries", + }) + MessageStatusChangedEventsAfterRetryErrorCount = promauto.NewCounter(prometheus.CounterOpts{ + Name: "message_status_changed_events_after_retry_error_count", + Help: "The total number of errors logged for MessageStatusChanged events after retries", + }) + ChainDataSyncedEventsAfterRetryErrorCount = promauto.NewCounter(prometheus.CounterOpts{ + Name: "chain_data_synced_events_after_retry_error_count", + Help: "The total number of errors logged for ChainDataSynced events after retries", + }) + MessageProcessedEventsAfterRetryErrorCount = promauto.NewCounter(prometheus.CounterOpts{ + Name: "message_processed_events_after_retry_error_count", + Help: "The total number of errors logged for MessageProcessed events after retries", + }) ) From d52bbee6c351c5d6f715d35cda59bc6519090b33 Mon Sep 17 00:00:00 2001 From: jeff <113397187+cyberhorsey@users.noreply.github.com> Date: Mon, 10 Jun 2024 11:23:17 -0700 Subject: [PATCH 7/8] feat(relayer): only index messages with non zero gas limit (#17549) --- packages/relayer/indexer/handle_message_sent_event.go | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/packages/relayer/indexer/handle_message_sent_event.go b/packages/relayer/indexer/handle_message_sent_event.go index d7d541baf88..25fd951559b 100644 --- a/packages/relayer/indexer/handle_message_sent_event.go +++ b/packages/relayer/indexer/handle_message_sent_event.go @@ -101,6 +101,13 @@ func (i *Indexer) handleMessageSentEvent( return nil } + // we shouldnt add messages to the queue that will be determined + // unprocessable. + if event.Message.GasLimit == 0 { + slog.Warn("Zero gaslimit message found, will be unprocessable") + return nil + } + msg := queue.QueueMessageSentBody{ ID: id, Event: event, From 0ebd7269a76bc1808a2e9f5dae1a6a8997b1e514 Mon Sep 17 00:00:00 2001 From: Kenk <kenghin_lim@hotmail.com> Date: Tue, 11 Jun 2024 11:21:34 +0700 Subject: [PATCH 8/8] resolve comments --- .../trailblazers-badges/TrailblazersBadges.sol | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/packages/nfts/contracts/trailblazers-badges/TrailblazersBadges.sol b/packages/nfts/contracts/trailblazers-badges/TrailblazersBadges.sol index 71a70f00551..ff723b6bf1c 100644 --- a/packages/nfts/contracts/trailblazers-badges/TrailblazersBadges.sol +++ b/packages/nfts/contracts/trailblazers-badges/TrailblazersBadges.sol @@ -10,12 +10,12 @@ import { Strings } from "@openzeppelin/contracts/utils/Strings.sol"; contract TrailblazersBadges is ERC721EnumerableUpgradeable, ECDSAWhitelist { /// @notice Base URI required to interact with IPFS string private _baseURIExtended; + /// @notice Movement IDs uint256 public constant MOVEMENT_NEUTRAL = 0; uint256 public constant MOVEMENT_BASED = 1; uint256 public constant MOVEMENT_BOOSTED = 2; - /// @notice Wallet-to-Movement mapping - mapping(address _user => uint256 _movement) public movements; + /// @notice Badge IDs uint256 public constant BADGE_RAVERS = 0; uint256 public constant BADGE_ROBOTS = 1; @@ -32,6 +32,8 @@ contract TrailblazersBadges is ERC721EnumerableUpgradeable, ECDSAWhitelist { mapping(address _user => mapping(uint256 _badgeId => uint256 _tokenId)) public userBadges; /// @notice Movement to badge ID, token ID mapping mapping(bytes32 movementBadgeHash => uint256[2] movementBadge) public movementBadges; + /// @notice Wallet-to-Movement mapping + mapping(address _user => uint256 _movement) public movements; /// @notice Token count, used to generate tokenIds uint256 public tokenCount; @@ -61,7 +63,7 @@ contract TrailblazersBadges is ERC721EnumerableUpgradeable, ECDSAWhitelist { external initializer { - __ERC721_init("TrailblazersBadges", "TBB"); + __ERC721_init("Trailblazers Badges", "TBB"); _baseURIExtended = _rootURI; __ECDSAWhitelist_init(_owner, _mintSigner, _blacklistAddress); } @@ -127,7 +129,6 @@ contract TrailblazersBadges is ERC721EnumerableUpgradeable, ECDSAWhitelist { /// @param _badgeId The badge ID to mint function _mintBadgeTo(bytes memory _signature, address _minter, uint256 _badgeId) internal { if (_badgeId > BADGE_SHINTO) revert INVALID_BADGE_ID(); - if (!canMint(_signature, _minter, _badgeId)) revert MINTER_NOT_WHITELISTED(); _consumeMint(_signature, _minter, _badgeId); @@ -136,7 +137,7 @@ contract TrailblazersBadges is ERC721EnumerableUpgradeable, ECDSAWhitelist { _mint(_minter, tokenCount); emit BadgeCreated(tokenCount, _minter, _badgeId); - tokenCount++; + ++tokenCount; } /// @notice Sets movement for the calling wallet @@ -182,9 +183,7 @@ contract TrailblazersBadges is ERC721EnumerableUpgradeable, ECDSAWhitelist { returns (uint256[] memory) { uint256[] memory balances = new uint256[](_owners.length); - for (uint256 i; i < _owners.length; i++) { - balances[i] = userBadges[_owners[i]][_ids[i]] == 0 ? 0 : 1; - } + for (uint256 i; i < _owners.length; ++i) { } return balances; } }