From 9757e8d37ac383f79661be96ced1b9142257a1de Mon Sep 17 00:00:00 2001 From: t4sk Date: Mon, 13 Jan 2025 07:35:24 +0900 Subject: [PATCH] Updates --- 404.html | 2 +- abi-decode/index.html | 2 +- abi-encode/index.html | 2 +- app/airdrop/index.html | 2 +- app/assembly-bin-exp/index.html | 2 +- app/bi-directional-payment-channel/index.html | 2 +- app/create2/index.html | 2 +- app/crowd-fund/index.html | 2 +- app/deploy-any-contract/index.html | 2 +- app/dutch-auction/index.html | 2 +- app/english-auction/index.html | 2 +- app/erc1155/index.html | 2 +- app/erc20/index.html | 2 +- app/erc721/index.html | 2 +- app/ether-wallet/index.html | 2 +- app/gasless-token-transfer/index.html | 2 +- app/iterable-mapping/index.html | 2 +- app/merkle-tree/index.html | 2 +- app/minimal-proxy/index.html | 2 +- app/multi-call/index.html | 2 +- app/multi-delegatecall/index.html | 2 +- app/multi-sig-wallet/index.html | 2 +- app/simple-bytecode-contract/index.html | 2 +- app/time-lock/index.html | 2 +- .../index.html | 2 +- app/upgradeable-proxy/index.html | 2 +- app/write-to-any-slot/index.html | 2 +- array/index.html | 2 +- assembly-error/index.html | 2 +- assembly-if/index.html | 2 +- assembly-loop/index.html | 2 +- assembly-math/index.html | 2 +- assembly-variable/index.html | 2 +- .../{index-DHsLPM5t.js => index-CL9_7EdO.js} | 46 +++++++++---------- bitwise/index.html | 2 +- call/index.html | 2 +- calling-contract/index.html | 2 +- constants/index.html | 2 +- constructor/index.html | 2 +- data-locations/index.html | 2 +- defi/chainlink-price-oracle/index.html | 2 +- defi/constant-product-amm/index.html | 2 +- defi/constant-sum-amm/index.html | 2 +- defi/dai-proxy/index.html | 2 +- defi/discrete-staking-rewards/index.html | 2 +- defi/stable-swap-amm/index.html | 2 +- defi/staking-rewards/index.html | 2 +- .../index.html | 2 +- defi/uniswap-v2-flash-swap/index.html | 2 +- .../index.html | 2 +- defi/uniswap-v2/index.html | 2 +- defi/uniswap-v3-flash-swap/index.html | 2 +- defi/uniswap-v3-flash/index.html | 2 +- defi/uniswap-v3-liquidity/index.html | 2 +- defi/uniswap-v3-swap/index.html | 2 +- defi/vault/index.html | 2 +- delegatecall/index.html | 2 +- enum/index.html | 2 +- error/index.html | 2 +- ether-units/index.html | 2 +- events-advanced/index.html | 2 +- events/index.html | 2 +- evm/memory/index.html | 2 +- evm/storage/index.html | 2 +- fallback/index.html | 2 +- first-app/index.html | 2 +- foundry/auth/index.html | 2 +- foundry/basic/index.html | 2 +- foundry/error/index.html | 2 +- foundry/event/index.html | 2 +- foundry/label/index.html | 2 +- foundry/mock-call/index.html | 2 +- foundry/send/index.html | 2 +- foundry/sign/index.html | 2 +- foundry/time/index.html | 2 +- function-modifier/index.html | 2 +- function-selector/index.html | 2 +- function/index.html | 2 +- gas-golf/index.html | 2 +- gas/index.html | 2 +- hacks/accessing-private-data/index.html | 2 +- hacks/block-timestamp-manipulation/index.html | 2 +- hacks/contract-size/index.html | 2 +- hacks/delegatecall/index.html | 2 +- hacks/denial-of-service/index.html | 2 +- .../index.html | 2 +- hacks/front-running/index.html | 2 +- .../index.html | 2 +- hacks/honeypot/index.html | 2 +- hacks/overflow/index.html | 2 +- hacks/phishing-with-tx-origin/index.html | 2 +- hacks/randomness/index.html | 2 +- hacks/re-entrancy/index.html | 2 +- hacks/self-destruct/index.html | 2 +- hacks/signature-replay/index.html | 2 +- hacks/vault-inflation/index.html | 2 +- hacks/weth-permit/index.html | 2 +- hashing/index.html | 2 +- hello-world/index.html | 2 +- if-else/index.html | 2 +- immutable/index.html | 2 +- import/index.html | 2 +- index.html | 2 +- inheritance/index.html | 2 +- interface/index.html | 2 +- library/index.html | 2 +- loop/index.html | 2 +- mapping/index.html | 2 +- new-contract/index.html | 2 +- payable/index.html | 2 +- primitives/index.html | 2 +- sending-ether/index.html | 2 +- .../index.html | 2 +- signature/index.html | 2 +- state-variables/index.html | 2 +- structs/index.html | 2 +- super/index.html | 2 +- tests/echidna/index.html | 2 +- transient-storage/index.html | 2 +- try-catch/index.html | 2 +- unchecked-math/index.html | 2 +- user-defined-value-types/index.html | 2 +- variables/index.html | 2 +- view-and-pure-functions/index.html | 2 +- visibility/index.html | 2 +- 125 files changed, 147 insertions(+), 147 deletions(-) rename assets/{index-DHsLPM5t.js => index-CL9_7EdO.js} (95%) diff --git a/404.html b/404.html index 8ca1d1125..1ad15188f 100644 --- a/404.html +++ b/404.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/abi-decode/index.html b/abi-decode/index.html index 8ca1d1125..1ad15188f 100644 --- a/abi-decode/index.html +++ b/abi-decode/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/abi-encode/index.html b/abi-encode/index.html index 8ca1d1125..1ad15188f 100644 --- a/abi-encode/index.html +++ b/abi-encode/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/app/airdrop/index.html b/app/airdrop/index.html index 8ca1d1125..1ad15188f 100644 --- a/app/airdrop/index.html +++ b/app/airdrop/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/app/assembly-bin-exp/index.html b/app/assembly-bin-exp/index.html index 8ca1d1125..1ad15188f 100644 --- a/app/assembly-bin-exp/index.html +++ b/app/assembly-bin-exp/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/app/bi-directional-payment-channel/index.html b/app/bi-directional-payment-channel/index.html index 8ca1d1125..1ad15188f 100644 --- a/app/bi-directional-payment-channel/index.html +++ b/app/bi-directional-payment-channel/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/app/create2/index.html b/app/create2/index.html index 8ca1d1125..1ad15188f 100644 --- a/app/create2/index.html +++ b/app/create2/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/app/crowd-fund/index.html b/app/crowd-fund/index.html index 8ca1d1125..1ad15188f 100644 --- a/app/crowd-fund/index.html +++ b/app/crowd-fund/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/app/deploy-any-contract/index.html b/app/deploy-any-contract/index.html index 8ca1d1125..1ad15188f 100644 --- a/app/deploy-any-contract/index.html +++ b/app/deploy-any-contract/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/app/dutch-auction/index.html b/app/dutch-auction/index.html index 8ca1d1125..1ad15188f 100644 --- a/app/dutch-auction/index.html +++ b/app/dutch-auction/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/app/english-auction/index.html b/app/english-auction/index.html index 8ca1d1125..1ad15188f 100644 --- a/app/english-auction/index.html +++ b/app/english-auction/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/app/erc1155/index.html b/app/erc1155/index.html index 8ca1d1125..1ad15188f 100644 --- a/app/erc1155/index.html +++ b/app/erc1155/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/app/erc20/index.html b/app/erc20/index.html index 8ca1d1125..1ad15188f 100644 --- a/app/erc20/index.html +++ b/app/erc20/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/app/erc721/index.html b/app/erc721/index.html index 8ca1d1125..1ad15188f 100644 --- a/app/erc721/index.html +++ b/app/erc721/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/app/ether-wallet/index.html b/app/ether-wallet/index.html index 8ca1d1125..1ad15188f 100644 --- a/app/ether-wallet/index.html +++ b/app/ether-wallet/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/app/gasless-token-transfer/index.html b/app/gasless-token-transfer/index.html index 8ca1d1125..1ad15188f 100644 --- a/app/gasless-token-transfer/index.html +++ b/app/gasless-token-transfer/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/app/iterable-mapping/index.html b/app/iterable-mapping/index.html index 8ca1d1125..1ad15188f 100644 --- a/app/iterable-mapping/index.html +++ b/app/iterable-mapping/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/app/merkle-tree/index.html b/app/merkle-tree/index.html index 8ca1d1125..1ad15188f 100644 --- a/app/merkle-tree/index.html +++ b/app/merkle-tree/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/app/minimal-proxy/index.html b/app/minimal-proxy/index.html index 8ca1d1125..1ad15188f 100644 --- a/app/minimal-proxy/index.html +++ b/app/minimal-proxy/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/app/multi-call/index.html b/app/multi-call/index.html index 8ca1d1125..1ad15188f 100644 --- a/app/multi-call/index.html +++ b/app/multi-call/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/app/multi-delegatecall/index.html b/app/multi-delegatecall/index.html index 8ca1d1125..1ad15188f 100644 --- a/app/multi-delegatecall/index.html +++ b/app/multi-delegatecall/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/app/multi-sig-wallet/index.html b/app/multi-sig-wallet/index.html index 8ca1d1125..1ad15188f 100644 --- a/app/multi-sig-wallet/index.html +++ b/app/multi-sig-wallet/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/app/simple-bytecode-contract/index.html b/app/simple-bytecode-contract/index.html index 8ca1d1125..1ad15188f 100644 --- a/app/simple-bytecode-contract/index.html +++ b/app/simple-bytecode-contract/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/app/time-lock/index.html b/app/time-lock/index.html index 8ca1d1125..1ad15188f 100644 --- a/app/time-lock/index.html +++ b/app/time-lock/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/app/uni-directional-payment-channel/index.html b/app/uni-directional-payment-channel/index.html index 8ca1d1125..1ad15188f 100644 --- a/app/uni-directional-payment-channel/index.html +++ b/app/uni-directional-payment-channel/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/app/upgradeable-proxy/index.html b/app/upgradeable-proxy/index.html index 8ca1d1125..1ad15188f 100644 --- a/app/upgradeable-proxy/index.html +++ b/app/upgradeable-proxy/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/app/write-to-any-slot/index.html b/app/write-to-any-slot/index.html index 8ca1d1125..1ad15188f 100644 --- a/app/write-to-any-slot/index.html +++ b/app/write-to-any-slot/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/array/index.html b/array/index.html index 8ca1d1125..1ad15188f 100644 --- a/array/index.html +++ b/array/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/assembly-error/index.html b/assembly-error/index.html index 8ca1d1125..1ad15188f 100644 --- a/assembly-error/index.html +++ b/assembly-error/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/assembly-if/index.html b/assembly-if/index.html index 8ca1d1125..1ad15188f 100644 --- a/assembly-if/index.html +++ b/assembly-if/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/assembly-loop/index.html b/assembly-loop/index.html index 8ca1d1125..1ad15188f 100644 --- a/assembly-loop/index.html +++ b/assembly-loop/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/assembly-math/index.html b/assembly-math/index.html index 8ca1d1125..1ad15188f 100644 --- a/assembly-math/index.html +++ b/assembly-math/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/assembly-variable/index.html b/assembly-variable/index.html index 8ca1d1125..1ad15188f 100644 --- a/assembly-variable/index.html +++ b/assembly-variable/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/assets/index-DHsLPM5t.js b/assets/index-CL9_7EdO.js similarity index 95% rename from assets/index-DHsLPM5t.js rename to assets/index-CL9_7EdO.js index 24c33e13b..4d755024b 100644 --- a/assets/index-DHsLPM5t.js +++ b/assets/index-CL9_7EdO.js @@ -949,12 +949,12 @@ Closing a channel when Alice and Bob do not agree on the final balances return address(this).balance; } } -`,Yj=({prev:s,next:a})=>r.jsx(A,{version:Zj,title:Wj,description:Gj,cyfrinLink:Bj,html:Vj,prev:s,next:a,codes:fj}),Rj="0.8.26",Xj="Crowd Fund",vj="An example of crowd funding contract",Nj="https://www.cyfrin.io/glossary/crowd-fund-solidity-code-example",Hj=[{fileName:"CrowdFund.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNjsKCmludGVyZmFjZSBJRVJDMjAgewogICAgZnVuY3Rpb24gdHJhbnNmZXIoYWRkcmVzcywgdWludDI1NikgZXh0ZXJuYWwgcmV0dXJucyAoYm9vbCk7CiAgICBmdW5jdGlvbiB0cmFuc2ZlckZyb20oYWRkcmVzcywgYWRkcmVzcywgdWludDI1NikgZXh0ZXJuYWwgcmV0dXJucyAoYm9vbCk7Cn0KCmNvbnRyYWN0IENyb3dkRnVuZCB7CiAgICBldmVudCBMYXVuY2goCiAgICAgICAgdWludDI1NiBpZCwKICAgICAgICBhZGRyZXNzIGluZGV4ZWQgY3JlYXRvciwKICAgICAgICB1aW50MjU2IGdvYWwsCiAgICAgICAgdWludDMyIHN0YXJ0QXQsCiAgICAgICAgdWludDMyIGVuZEF0CiAgICApOwogICAgZXZlbnQgQ2FuY2VsKHVpbnQyNTYgaWQpOwogICAgZXZlbnQgUGxlZGdlKHVpbnQyNTYgaW5kZXhlZCBpZCwgYWRkcmVzcyBpbmRleGVkIGNhbGxlciwgdWludDI1NiBhbW91bnQpOwogICAgZXZlbnQgVW5wbGVkZ2UodWludDI1NiBpbmRleGVkIGlkLCBhZGRyZXNzIGluZGV4ZWQgY2FsbGVyLCB1aW50MjU2IGFtb3VudCk7CiAgICBldmVudCBDbGFpbSh1aW50MjU2IGlkKTsKICAgIGV2ZW50IFJlZnVuZCh1aW50MjU2IGlkLCBhZGRyZXNzIGluZGV4ZWQgY2FsbGVyLCB1aW50MjU2IGFtb3VudCk7CgogICAgc3RydWN0IENhbXBhaWduIHsKICAgICAgICAvLyBDcmVhdG9yIG9mIGNhbXBhaWduCiAgICAgICAgYWRkcmVzcyBjcmVhdG9yOwogICAgICAgIC8vIEFtb3VudCBvZiB0b2tlbnMgdG8gcmFpc2UKICAgICAgICB1aW50MjU2IGdvYWw7CiAgICAgICAgLy8gVG90YWwgYW1vdW50IHBsZWRnZWQKICAgICAgICB1aW50MjU2IHBsZWRnZWQ7CiAgICAgICAgLy8gVGltZXN0YW1wIG9mIHN0YXJ0IG9mIGNhbXBhaWduCiAgICAgICAgdWludDMyIHN0YXJ0QXQ7CiAgICAgICAgLy8gVGltZXN0YW1wIG9mIGVuZCBvZiBjYW1wYWlnbgogICAgICAgIHVpbnQzMiBlbmRBdDsKICAgICAgICAvLyBUcnVlIGlmIGdvYWwgd2FzIHJlYWNoZWQgYW5kIGNyZWF0b3IgaGFzIGNsYWltZWQgdGhlIHRva2Vucy4KICAgICAgICBib29sIGNsYWltZWQ7CiAgICB9CgogICAgSUVSQzIwIHB1YmxpYyBpbW11dGFibGUgdG9rZW47CiAgICAvLyBUb3RhbCBjb3VudCBvZiBjYW1wYWlnbnMgY3JlYXRlZC4KICAgIC8vIEl0IGlzIGFsc28gdXNlZCB0byBnZW5lcmF0ZSBpZCBmb3IgbmV3IGNhbXBhaWducy4KICAgIHVpbnQyNTYgcHVibGljIGNvdW50OwogICAgLy8gTWFwcGluZyBmcm9tIGlkIHRvIENhbXBhaWduCiAgICBtYXBwaW5nKHVpbnQyNTYgPT4gQ2FtcGFpZ24pIHB1YmxpYyBjYW1wYWlnbnM7CiAgICAvLyBNYXBwaW5nIGZyb20gY2FtcGFpZ24gaWQgPT4gcGxlZGdlciA9PiBhbW91bnQgcGxlZGdlZAogICAgbWFwcGluZyh1aW50MjU2ID0+IG1hcHBpbmcoYWRkcmVzcyA9PiB1aW50MjU2KSkgcHVibGljIHBsZWRnZWRBbW91bnQ7CgogICAgY29uc3RydWN0b3IoYWRkcmVzcyBfdG9rZW4pIHsKICAgICAgICB0b2tlbiA9IElFUkMyMChfdG9rZW4pOwogICAgfQoKICAgIGZ1bmN0aW9uIGxhdW5jaCh1aW50MjU2IF9nb2FsLCB1aW50MzIgX3N0YXJ0QXQsIHVpbnQzMiBfZW5kQXQpIGV4dGVybmFsIHsKICAgICAgICByZXF1aXJlKF9zdGFydEF0ID49IGJsb2NrLnRpbWVzdGFtcCwgInN0YXJ0IGF0IDwgbm93Iik7CiAgICAgICAgcmVxdWlyZShfZW5kQXQgPj0gX3N0YXJ0QXQsICJlbmQgYXQgPCBzdGFydCBhdCIpOwogICAgICAgIHJlcXVpcmUoX2VuZEF0IDw9IGJsb2NrLnRpbWVzdGFtcCArIDkwIGRheXMsICJlbmQgYXQgPiBtYXggZHVyYXRpb24iKTsKCiAgICAgICAgY291bnQgKz0gMTsKICAgICAgICBjYW1wYWlnbnNbY291bnRdID0gQ2FtcGFpZ24oewogICAgICAgICAgICBjcmVhdG9yOiBtc2cuc2VuZGVyLAogICAgICAgICAgICBnb2FsOiBfZ29hbCwKICAgICAgICAgICAgcGxlZGdlZDogMCwKICAgICAgICAgICAgc3RhcnRBdDogX3N0YXJ0QXQsCiAgICAgICAgICAgIGVuZEF0OiBfZW5kQXQsCiAgICAgICAgICAgIGNsYWltZWQ6IGZhbHNlCiAgICAgICAgfSk7CgogICAgICAgIGVtaXQgTGF1bmNoKGNvdW50LCBtc2cuc2VuZGVyLCBfZ29hbCwgX3N0YXJ0QXQsIF9lbmRBdCk7CiAgICB9CgogICAgZnVuY3Rpb24gY2FuY2VsKHVpbnQyNTYgX2lkKSBleHRlcm5hbCB7CiAgICAgICAgQ2FtcGFpZ24gbWVtb3J5IGNhbXBhaWduID0gY2FtcGFpZ25zW19pZF07CiAgICAgICAgcmVxdWlyZShjYW1wYWlnbi5jcmVhdG9yID09IG1zZy5zZW5kZXIsICJub3QgY3JlYXRvciIpOwogICAgICAgIHJlcXVpcmUoYmxvY2sudGltZXN0YW1wIDwgY2FtcGFpZ24uc3RhcnRBdCwgInN0YXJ0ZWQiKTsKCiAgICAgICAgZGVsZXRlIGNhbXBhaWduc1tfaWRdOwogICAgICAgIGVtaXQgQ2FuY2VsKF9pZCk7CiAgICB9CgogICAgZnVuY3Rpb24gcGxlZGdlKHVpbnQyNTYgX2lkLCB1aW50MjU2IF9hbW91bnQpIGV4dGVybmFsIHsKICAgICAgICBDYW1wYWlnbiBzdG9yYWdlIGNhbXBhaWduID0gY2FtcGFpZ25zW19pZF07CiAgICAgICAgcmVxdWlyZShibG9jay50aW1lc3RhbXAgPj0gY2FtcGFpZ24uc3RhcnRBdCwgIm5vdCBzdGFydGVkIik7CiAgICAgICAgcmVxdWlyZShibG9jay50aW1lc3RhbXAgPD0gY2FtcGFpZ24uZW5kQXQsICJlbmRlZCIpOwoKICAgICAgICBjYW1wYWlnbi5wbGVkZ2VkICs9IF9hbW91bnQ7CiAgICAgICAgcGxlZGdlZEFtb3VudFtfaWRdW21zZy5zZW5kZXJdICs9IF9hbW91bnQ7CiAgICAgICAgdG9rZW4udHJhbnNmZXJGcm9tKG1zZy5zZW5kZXIsIGFkZHJlc3ModGhpcyksIF9hbW91bnQpOwoKICAgICAgICBlbWl0IFBsZWRnZShfaWQsIG1zZy5zZW5kZXIsIF9hbW91bnQpOwogICAgfQoKICAgIGZ1bmN0aW9uIHVucGxlZGdlKHVpbnQyNTYgX2lkLCB1aW50MjU2IF9hbW91bnQpIGV4dGVybmFsIHsKICAgICAgICBDYW1wYWlnbiBzdG9yYWdlIGNhbXBhaWduID0gY2FtcGFpZ25zW19pZF07CiAgICAgICAgcmVxdWlyZShibG9jay50aW1lc3RhbXAgPD0gY2FtcGFpZ24uZW5kQXQsICJlbmRlZCIpOwoKICAgICAgICBjYW1wYWlnbi5wbGVkZ2VkIC09IF9hbW91bnQ7CiAgICAgICAgcGxlZGdlZEFtb3VudFtfaWRdW21zZy5zZW5kZXJdIC09IF9hbW91bnQ7CiAgICAgICAgdG9rZW4udHJhbnNmZXIobXNnLnNlbmRlciwgX2Ftb3VudCk7CgogICAgICAgIGVtaXQgVW5wbGVkZ2UoX2lkLCBtc2cuc2VuZGVyLCBfYW1vdW50KTsKICAgIH0KCiAgICBmdW5jdGlvbiBjbGFpbSh1aW50MjU2IF9pZCkgZXh0ZXJuYWwgewogICAgICAgIENhbXBhaWduIHN0b3JhZ2UgY2FtcGFpZ24gPSBjYW1wYWlnbnNbX2lkXTsKICAgICAgICByZXF1aXJlKGNhbXBhaWduLmNyZWF0b3IgPT0gbXNnLnNlbmRlciwgIm5vdCBjcmVhdG9yIik7CiAgICAgICAgcmVxdWlyZShibG9jay50aW1lc3RhbXAgPiBjYW1wYWlnbi5lbmRBdCwgIm5vdCBlbmRlZCIpOwogICAgICAgIHJlcXVpcmUoY2FtcGFpZ24ucGxlZGdlZCA+PSBjYW1wYWlnbi5nb2FsLCAicGxlZGdlZCA8IGdvYWwiKTsKICAgICAgICByZXF1aXJlKCFjYW1wYWlnbi5jbGFpbWVkLCAiY2xhaW1lZCIpOwoKICAgICAgICBjYW1wYWlnbi5jbGFpbWVkID0gdHJ1ZTsKICAgICAgICB0b2tlbi50cmFuc2ZlcihjYW1wYWlnbi5jcmVhdG9yLCBjYW1wYWlnbi5wbGVkZ2VkKTsKCiAgICAgICAgZW1pdCBDbGFpbShfaWQpOwogICAgfQoKICAgIGZ1bmN0aW9uIHJlZnVuZCh1aW50MjU2IF9pZCkgZXh0ZXJuYWwgewogICAgICAgIENhbXBhaWduIG1lbW9yeSBjYW1wYWlnbiA9IGNhbXBhaWduc1tfaWRdOwogICAgICAgIHJlcXVpcmUoYmxvY2sudGltZXN0YW1wID4gY2FtcGFpZ24uZW5kQXQsICJub3QgZW5kZWQiKTsKICAgICAgICByZXF1aXJlKGNhbXBhaWduLnBsZWRnZWQgPCBjYW1wYWlnbi5nb2FsLCAicGxlZGdlZCA+PSBnb2FsIik7CgogICAgICAgIHVpbnQyNTYgYmFsID0gcGxlZGdlZEFtb3VudFtfaWRdW21zZy5zZW5kZXJdOwogICAgICAgIHBsZWRnZWRBbW91bnRbX2lkXVttc2cuc2VuZGVyXSA9IDA7CiAgICAgICAgdG9rZW4udHJhbnNmZXIobXNnLnNlbmRlciwgYmFsKTsKCiAgICAgICAgZW1pdCBSZWZ1bmQoX2lkLCBtc2cuc2VuZGVyLCBiYWwpOwogICAgfQp9Cg=="}],Kj=`

Crowd fund ERC20 token

+`,Yj=({prev:s,next:a})=>r.jsx(A,{version:Zj,title:Wj,description:Gj,cyfrinLink:Bj,html:Vj,prev:s,next:a,codes:fj}),Rj="0.8.26",Xj="Crowd Fund",vj="An example of crowdfunding contract",Nj="https://www.cyfrin.io/glossary/crowd-fund-solidity-code-example",Hj=[{fileName:"CrowdFund.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNjsKCmludGVyZmFjZSBJRVJDMjAgewogICAgZnVuY3Rpb24gdHJhbnNmZXIoYWRkcmVzcywgdWludDI1NikgZXh0ZXJuYWwgcmV0dXJucyAoYm9vbCk7CiAgICBmdW5jdGlvbiB0cmFuc2ZlckZyb20oYWRkcmVzcywgYWRkcmVzcywgdWludDI1NikgZXh0ZXJuYWwgcmV0dXJucyAoYm9vbCk7Cn0KCmNvbnRyYWN0IENyb3dkRnVuZCB7CiAgICBldmVudCBMYXVuY2goCiAgICAgICAgdWludDI1NiBpZCwKICAgICAgICBhZGRyZXNzIGluZGV4ZWQgY3JlYXRvciwKICAgICAgICB1aW50MjU2IGdvYWwsCiAgICAgICAgdWludDMyIHN0YXJ0QXQsCiAgICAgICAgdWludDMyIGVuZEF0CiAgICApOwogICAgZXZlbnQgQ2FuY2VsKHVpbnQyNTYgaWQpOwogICAgZXZlbnQgUGxlZGdlKHVpbnQyNTYgaW5kZXhlZCBpZCwgYWRkcmVzcyBpbmRleGVkIGNhbGxlciwgdWludDI1NiBhbW91bnQpOwogICAgZXZlbnQgVW5wbGVkZ2UodWludDI1NiBpbmRleGVkIGlkLCBhZGRyZXNzIGluZGV4ZWQgY2FsbGVyLCB1aW50MjU2IGFtb3VudCk7CiAgICBldmVudCBDbGFpbSh1aW50MjU2IGlkKTsKICAgIGV2ZW50IFJlZnVuZCh1aW50MjU2IGlkLCBhZGRyZXNzIGluZGV4ZWQgY2FsbGVyLCB1aW50MjU2IGFtb3VudCk7CgogICAgc3RydWN0IENhbXBhaWduIHsKICAgICAgICAvLyBDcmVhdG9yIG9mIGNhbXBhaWduCiAgICAgICAgYWRkcmVzcyBjcmVhdG9yOwogICAgICAgIC8vIEFtb3VudCBvZiB0b2tlbnMgdG8gcmFpc2UKICAgICAgICB1aW50MjU2IGdvYWw7CiAgICAgICAgLy8gVG90YWwgYW1vdW50IHBsZWRnZWQKICAgICAgICB1aW50MjU2IHBsZWRnZWQ7CiAgICAgICAgLy8gVGltZXN0YW1wIG9mIHN0YXJ0IG9mIGNhbXBhaWduCiAgICAgICAgdWludDMyIHN0YXJ0QXQ7CiAgICAgICAgLy8gVGltZXN0YW1wIG9mIGVuZCBvZiBjYW1wYWlnbgogICAgICAgIHVpbnQzMiBlbmRBdDsKICAgICAgICAvLyBUcnVlIGlmIGdvYWwgd2FzIHJlYWNoZWQgYW5kIGNyZWF0b3IgaGFzIGNsYWltZWQgdGhlIHRva2Vucy4KICAgICAgICBib29sIGNsYWltZWQ7CiAgICB9CgogICAgSUVSQzIwIHB1YmxpYyBpbW11dGFibGUgdG9rZW47CiAgICAvLyBUb3RhbCBjb3VudCBvZiBjYW1wYWlnbnMgY3JlYXRlZC4KICAgIC8vIEl0IGlzIGFsc28gdXNlZCB0byBnZW5lcmF0ZSBpZCBmb3IgbmV3IGNhbXBhaWducy4KICAgIHVpbnQyNTYgcHVibGljIGNvdW50OwogICAgLy8gTWFwcGluZyBmcm9tIGlkIHRvIENhbXBhaWduCiAgICBtYXBwaW5nKHVpbnQyNTYgPT4gQ2FtcGFpZ24pIHB1YmxpYyBjYW1wYWlnbnM7CiAgICAvLyBNYXBwaW5nIGZyb20gY2FtcGFpZ24gaWQgPT4gcGxlZGdlciA9PiBhbW91bnQgcGxlZGdlZAogICAgbWFwcGluZyh1aW50MjU2ID0+IG1hcHBpbmcoYWRkcmVzcyA9PiB1aW50MjU2KSkgcHVibGljIHBsZWRnZWRBbW91bnQ7CgogICAgY29uc3RydWN0b3IoYWRkcmVzcyBfdG9rZW4pIHsKICAgICAgICB0b2tlbiA9IElFUkMyMChfdG9rZW4pOwogICAgfQoKICAgIGZ1bmN0aW9uIGxhdW5jaCh1aW50MjU2IF9nb2FsLCB1aW50MzIgX3N0YXJ0QXQsIHVpbnQzMiBfZW5kQXQpIGV4dGVybmFsIHsKICAgICAgICByZXF1aXJlKF9zdGFydEF0ID49IGJsb2NrLnRpbWVzdGFtcCwgInN0YXJ0IGF0IDwgbm93Iik7CiAgICAgICAgcmVxdWlyZShfZW5kQXQgPj0gX3N0YXJ0QXQsICJlbmQgYXQgPCBzdGFydCBhdCIpOwogICAgICAgIHJlcXVpcmUoX2VuZEF0IDw9IGJsb2NrLnRpbWVzdGFtcCArIDkwIGRheXMsICJlbmQgYXQgPiBtYXggZHVyYXRpb24iKTsKCiAgICAgICAgY291bnQgKz0gMTsKICAgICAgICBjYW1wYWlnbnNbY291bnRdID0gQ2FtcGFpZ24oewogICAgICAgICAgICBjcmVhdG9yOiBtc2cuc2VuZGVyLAogICAgICAgICAgICBnb2FsOiBfZ29hbCwKICAgICAgICAgICAgcGxlZGdlZDogMCwKICAgICAgICAgICAgc3RhcnRBdDogX3N0YXJ0QXQsCiAgICAgICAgICAgIGVuZEF0OiBfZW5kQXQsCiAgICAgICAgICAgIGNsYWltZWQ6IGZhbHNlCiAgICAgICAgfSk7CgogICAgICAgIGVtaXQgTGF1bmNoKGNvdW50LCBtc2cuc2VuZGVyLCBfZ29hbCwgX3N0YXJ0QXQsIF9lbmRBdCk7CiAgICB9CgogICAgZnVuY3Rpb24gY2FuY2VsKHVpbnQyNTYgX2lkKSBleHRlcm5hbCB7CiAgICAgICAgQ2FtcGFpZ24gbWVtb3J5IGNhbXBhaWduID0gY2FtcGFpZ25zW19pZF07CiAgICAgICAgcmVxdWlyZShjYW1wYWlnbi5jcmVhdG9yID09IG1zZy5zZW5kZXIsICJub3QgY3JlYXRvciIpOwogICAgICAgIHJlcXVpcmUoYmxvY2sudGltZXN0YW1wIDwgY2FtcGFpZ24uc3RhcnRBdCwgInN0YXJ0ZWQiKTsKCiAgICAgICAgZGVsZXRlIGNhbXBhaWduc1tfaWRdOwogICAgICAgIGVtaXQgQ2FuY2VsKF9pZCk7CiAgICB9CgogICAgZnVuY3Rpb24gcGxlZGdlKHVpbnQyNTYgX2lkLCB1aW50MjU2IF9hbW91bnQpIGV4dGVybmFsIHsKICAgICAgICBDYW1wYWlnbiBzdG9yYWdlIGNhbXBhaWduID0gY2FtcGFpZ25zW19pZF07CiAgICAgICAgcmVxdWlyZShibG9jay50aW1lc3RhbXAgPj0gY2FtcGFpZ24uc3RhcnRBdCwgIm5vdCBzdGFydGVkIik7CiAgICAgICAgcmVxdWlyZShibG9jay50aW1lc3RhbXAgPD0gY2FtcGFpZ24uZW5kQXQsICJlbmRlZCIpOwoKICAgICAgICBjYW1wYWlnbi5wbGVkZ2VkICs9IF9hbW91bnQ7CiAgICAgICAgcGxlZGdlZEFtb3VudFtfaWRdW21zZy5zZW5kZXJdICs9IF9hbW91bnQ7CiAgICAgICAgdG9rZW4udHJhbnNmZXJGcm9tKG1zZy5zZW5kZXIsIGFkZHJlc3ModGhpcyksIF9hbW91bnQpOwoKICAgICAgICBlbWl0IFBsZWRnZShfaWQsIG1zZy5zZW5kZXIsIF9hbW91bnQpOwogICAgfQoKICAgIGZ1bmN0aW9uIHVucGxlZGdlKHVpbnQyNTYgX2lkLCB1aW50MjU2IF9hbW91bnQpIGV4dGVybmFsIHsKICAgICAgICBDYW1wYWlnbiBzdG9yYWdlIGNhbXBhaWduID0gY2FtcGFpZ25zW19pZF07CiAgICAgICAgcmVxdWlyZShibG9jay50aW1lc3RhbXAgPD0gY2FtcGFpZ24uZW5kQXQsICJlbmRlZCIpOwoKICAgICAgICBjYW1wYWlnbi5wbGVkZ2VkIC09IF9hbW91bnQ7CiAgICAgICAgcGxlZGdlZEFtb3VudFtfaWRdW21zZy5zZW5kZXJdIC09IF9hbW91bnQ7CiAgICAgICAgdG9rZW4udHJhbnNmZXIobXNnLnNlbmRlciwgX2Ftb3VudCk7CgogICAgICAgIGVtaXQgVW5wbGVkZ2UoX2lkLCBtc2cuc2VuZGVyLCBfYW1vdW50KTsKICAgIH0KCiAgICBmdW5jdGlvbiBjbGFpbSh1aW50MjU2IF9pZCkgZXh0ZXJuYWwgewogICAgICAgIENhbXBhaWduIHN0b3JhZ2UgY2FtcGFpZ24gPSBjYW1wYWlnbnNbX2lkXTsKICAgICAgICByZXF1aXJlKGNhbXBhaWduLmNyZWF0b3IgPT0gbXNnLnNlbmRlciwgIm5vdCBjcmVhdG9yIik7CiAgICAgICAgcmVxdWlyZShibG9jay50aW1lc3RhbXAgPiBjYW1wYWlnbi5lbmRBdCwgIm5vdCBlbmRlZCIpOwogICAgICAgIHJlcXVpcmUoY2FtcGFpZ24ucGxlZGdlZCA+PSBjYW1wYWlnbi5nb2FsLCAicGxlZGdlZCA8IGdvYWwiKTsKICAgICAgICByZXF1aXJlKCFjYW1wYWlnbi5jbGFpbWVkLCAiY2xhaW1lZCIpOwoKICAgICAgICBjYW1wYWlnbi5jbGFpbWVkID0gdHJ1ZTsKICAgICAgICB0b2tlbi50cmFuc2ZlcihjYW1wYWlnbi5jcmVhdG9yLCBjYW1wYWlnbi5wbGVkZ2VkKTsKCiAgICAgICAgZW1pdCBDbGFpbShfaWQpOwogICAgfQoKICAgIGZ1bmN0aW9uIHJlZnVuZCh1aW50MjU2IF9pZCkgZXh0ZXJuYWwgewogICAgICAgIENhbXBhaWduIG1lbW9yeSBjYW1wYWlnbiA9IGNhbXBhaWduc1tfaWRdOwogICAgICAgIHJlcXVpcmUoYmxvY2sudGltZXN0YW1wID4gY2FtcGFpZ24uZW5kQXQsICJub3QgZW5kZWQiKTsKICAgICAgICByZXF1aXJlKGNhbXBhaWduLnBsZWRnZWQgPCBjYW1wYWlnbi5nb2FsLCAicGxlZGdlZCA+PSBnb2FsIik7CgogICAgICAgIHVpbnQyNTYgYmFsID0gcGxlZGdlZEFtb3VudFtfaWRdW21zZy5zZW5kZXJdOwogICAgICAgIHBsZWRnZWRBbW91bnRbX2lkXVttc2cuc2VuZGVyXSA9IDA7CiAgICAgICAgdG9rZW4udHJhbnNmZXIobXNnLnNlbmRlciwgYmFsKTsKCiAgICAgICAgZW1pdCBSZWZ1bmQoX2lkLCBtc2cuc2VuZGVyLCBiYWwpOwogICAgfQp9Cg=="}],Kj=`

Crowd fund ERC20 token

  1. User creates a campaign.
  2. Users can pledge, transferring their token to a campaign.
  3. After the campaign ends, campaign creator can claim the funds if total amount pledged is more than the campaign goal.
  4. -
  5. Otherwise, campaign did not reach it's goal, users can withdraw their pledge.
  6. +
  7. Otherwise, campaign did not reach its goal, users can withdraw their pledge.
// SPDX-License-Identifier: MIT
 pragma solidity ^0.8.26;
@@ -1777,7 +1777,7 @@ How to swap tokens
         require(sent, "Token transfer failed");
     }
 }
-
`,uA=({prev:s,next:a})=>r.jsx(A,{version:hA,title:IA,description:dA,cyfrinLink:CA,html:AA,prev:s,next:a,codes:jA}),yA="0.8.26",mA="ERC721",bA="Example of ERC721 non fungible token in Solidity",wA="https://www.cyfrin.io/glossary/erc-721-solidity-code-example",kA=[{fileName:"ERC721.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNjsKCmludGVyZmFjZSBJRVJDMTY1IHsKICAgIGZ1bmN0aW9uIHN1cHBvcnRzSW50ZXJmYWNlKGJ5dGVzNCBpbnRlcmZhY2VJRCkKICAgICAgICBleHRlcm5hbAogICAgICAgIHZpZXcKICAgICAgICByZXR1cm5zIChib29sKTsKfQoKaW50ZXJmYWNlIElFUkM3MjEgaXMgSUVSQzE2NSB7CiAgICBmdW5jdGlvbiBiYWxhbmNlT2YoYWRkcmVzcyBvd25lcikgZXh0ZXJuYWwgdmlldyByZXR1cm5zICh1aW50MjU2IGJhbGFuY2UpOwogICAgZnVuY3Rpb24gb3duZXJPZih1aW50MjU2IHRva2VuSWQpIGV4dGVybmFsIHZpZXcgcmV0dXJucyAoYWRkcmVzcyBvd25lcik7CiAgICBmdW5jdGlvbiBzYWZlVHJhbnNmZXJGcm9tKGFkZHJlc3MgZnJvbSwgYWRkcmVzcyB0bywgdWludDI1NiB0b2tlbklkKQogICAgICAgIGV4dGVybmFsOwogICAgZnVuY3Rpb24gc2FmZVRyYW5zZmVyRnJvbSgKICAgICAgICBhZGRyZXNzIGZyb20sCiAgICAgICAgYWRkcmVzcyB0bywKICAgICAgICB1aW50MjU2IHRva2VuSWQsCiAgICAgICAgYnl0ZXMgY2FsbGRhdGEgZGF0YQogICAgKSBleHRlcm5hbDsKICAgIGZ1bmN0aW9uIHRyYW5zZmVyRnJvbShhZGRyZXNzIGZyb20sIGFkZHJlc3MgdG8sIHVpbnQyNTYgdG9rZW5JZCkgZXh0ZXJuYWw7CiAgICBmdW5jdGlvbiBhcHByb3ZlKGFkZHJlc3MgdG8sIHVpbnQyNTYgdG9rZW5JZCkgZXh0ZXJuYWw7CiAgICBmdW5jdGlvbiBnZXRBcHByb3ZlZCh1aW50MjU2IHRva2VuSWQpCiAgICAgICAgZXh0ZXJuYWwKICAgICAgICB2aWV3CiAgICAgICAgcmV0dXJucyAoYWRkcmVzcyBvcGVyYXRvcik7CiAgICBmdW5jdGlvbiBzZXRBcHByb3ZhbEZvckFsbChhZGRyZXNzIG9wZXJhdG9yLCBib29sIF9hcHByb3ZlZCkgZXh0ZXJuYWw7CiAgICBmdW5jdGlvbiBpc0FwcHJvdmVkRm9yQWxsKGFkZHJlc3Mgb3duZXIsIGFkZHJlc3Mgb3BlcmF0b3IpCiAgICAgICAgZXh0ZXJuYWwKICAgICAgICB2aWV3CiAgICAgICAgcmV0dXJucyAoYm9vbCk7Cn0KCmludGVyZmFjZSBJRVJDNzIxUmVjZWl2ZXIgewogICAgZnVuY3Rpb24gb25FUkM3MjFSZWNlaXZlZCgKICAgICAgICBhZGRyZXNzIG9wZXJhdG9yLAogICAgICAgIGFkZHJlc3MgZnJvbSwKICAgICAgICB1aW50MjU2IHRva2VuSWQsCiAgICAgICAgYnl0ZXMgY2FsbGRhdGEgZGF0YQogICAgKSBleHRlcm5hbCByZXR1cm5zIChieXRlczQpOwp9Cgpjb250cmFjdCBFUkM3MjEgaXMgSUVSQzcyMSB7CiAgICBldmVudCBUcmFuc2ZlcigKICAgICAgICBhZGRyZXNzIGluZGV4ZWQgZnJvbSwgYWRkcmVzcyBpbmRleGVkIHRvLCB1aW50MjU2IGluZGV4ZWQgaWQKICAgICk7CiAgICBldmVudCBBcHByb3ZhbCgKICAgICAgICBhZGRyZXNzIGluZGV4ZWQgb3duZXIsIGFkZHJlc3MgaW5kZXhlZCBzcGVuZGVyLCB1aW50MjU2IGluZGV4ZWQgaWQKICAgICk7CiAgICBldmVudCBBcHByb3ZhbEZvckFsbCgKICAgICAgICBhZGRyZXNzIGluZGV4ZWQgb3duZXIsIGFkZHJlc3MgaW5kZXhlZCBvcGVyYXRvciwgYm9vbCBhcHByb3ZlZAogICAgKTsKCiAgICAvLyBNYXBwaW5nIGZyb20gdG9rZW4gSUQgdG8gb3duZXIgYWRkcmVzcwogICAgbWFwcGluZyh1aW50MjU2ID0+IGFkZHJlc3MpIGludGVybmFsIF9vd25lck9mOwoKICAgIC8vIE1hcHBpbmcgb3duZXIgYWRkcmVzcyB0byB0b2tlbiBjb3VudAogICAgbWFwcGluZyhhZGRyZXNzID0+IHVpbnQyNTYpIGludGVybmFsIF9iYWxhbmNlT2Y7CgogICAgLy8gTWFwcGluZyBmcm9tIHRva2VuIElEIHRvIGFwcHJvdmVkIGFkZHJlc3MKICAgIG1hcHBpbmcodWludDI1NiA9PiBhZGRyZXNzKSBpbnRlcm5hbCBfYXBwcm92YWxzOwoKICAgIC8vIE1hcHBpbmcgZnJvbSBvd25lciB0byBvcGVyYXRvciBhcHByb3ZhbHMKICAgIG1hcHBpbmcoYWRkcmVzcyA9PiBtYXBwaW5nKGFkZHJlc3MgPT4gYm9vbCkpIHB1YmxpYyBpc0FwcHJvdmVkRm9yQWxsOwoKICAgIGZ1bmN0aW9uIHN1cHBvcnRzSW50ZXJmYWNlKGJ5dGVzNCBpbnRlcmZhY2VJZCkKICAgICAgICBleHRlcm5hbAogICAgICAgIHB1cmUKICAgICAgICByZXR1cm5zIChib29sKQogICAgewogICAgICAgIHJldHVybiBpbnRlcmZhY2VJZCA9PSB0eXBlKElFUkM3MjEpLmludGVyZmFjZUlkCiAgICAgICAgICAgIHx8IGludGVyZmFjZUlkID09IHR5cGUoSUVSQzE2NSkuaW50ZXJmYWNlSWQ7CiAgICB9CgogICAgZnVuY3Rpb24gb3duZXJPZih1aW50MjU2IGlkKSBleHRlcm5hbCB2aWV3IHJldHVybnMgKGFkZHJlc3Mgb3duZXIpIHsKICAgICAgICBvd25lciA9IF9vd25lck9mW2lkXTsKICAgICAgICByZXF1aXJlKG93bmVyICE9IGFkZHJlc3MoMCksICJ0b2tlbiBkb2Vzbid0IGV4aXN0Iik7CiAgICB9CgogICAgZnVuY3Rpb24gYmFsYW5jZU9mKGFkZHJlc3Mgb3duZXIpIGV4dGVybmFsIHZpZXcgcmV0dXJucyAodWludDI1NikgewogICAgICAgIHJlcXVpcmUob3duZXIgIT0gYWRkcmVzcygwKSwgIm93bmVyID0gemVybyBhZGRyZXNzIik7CiAgICAgICAgcmV0dXJuIF9iYWxhbmNlT2Zbb3duZXJdOwogICAgfQoKICAgIGZ1bmN0aW9uIHNldEFwcHJvdmFsRm9yQWxsKGFkZHJlc3Mgb3BlcmF0b3IsIGJvb2wgYXBwcm92ZWQpIGV4dGVybmFsIHsKICAgICAgICBpc0FwcHJvdmVkRm9yQWxsW21zZy5zZW5kZXJdW29wZXJhdG9yXSA9IGFwcHJvdmVkOwogICAgICAgIGVtaXQgQXBwcm92YWxGb3JBbGwobXNnLnNlbmRlciwgb3BlcmF0b3IsIGFwcHJvdmVkKTsKICAgIH0KCiAgICBmdW5jdGlvbiBhcHByb3ZlKGFkZHJlc3Mgc3BlbmRlciwgdWludDI1NiBpZCkgZXh0ZXJuYWwgewogICAgICAgIGFkZHJlc3Mgb3duZXIgPSBfb3duZXJPZltpZF07CiAgICAgICAgcmVxdWlyZSgKICAgICAgICAgICAgbXNnLnNlbmRlciA9PSBvd25lciB8fCBpc0FwcHJvdmVkRm9yQWxsW293bmVyXVttc2cuc2VuZGVyXSwKICAgICAgICAgICAgIm5vdCBhdXRob3JpemVkIgogICAgICAgICk7CgogICAgICAgIF9hcHByb3ZhbHNbaWRdID0gc3BlbmRlcjsKCiAgICAgICAgZW1pdCBBcHByb3ZhbChvd25lciwgc3BlbmRlciwgaWQpOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldEFwcHJvdmVkKHVpbnQyNTYgaWQpIGV4dGVybmFsIHZpZXcgcmV0dXJucyAoYWRkcmVzcykgewogICAgICAgIHJlcXVpcmUoX293bmVyT2ZbaWRdICE9IGFkZHJlc3MoMCksICJ0b2tlbiBkb2Vzbid0IGV4aXN0Iik7CiAgICAgICAgcmV0dXJuIF9hcHByb3ZhbHNbaWRdOwogICAgfQoKICAgIGZ1bmN0aW9uIF9pc0FwcHJvdmVkT3JPd25lcihhZGRyZXNzIG93bmVyLCBhZGRyZXNzIHNwZW5kZXIsIHVpbnQyNTYgaWQpCiAgICAgICAgaW50ZXJuYWwKICAgICAgICB2aWV3CiAgICAgICAgcmV0dXJucyAoYm9vbCkKICAgIHsKICAgICAgICByZXR1cm4gKAogICAgICAgICAgICBzcGVuZGVyID09IG93bmVyIHx8IGlzQXBwcm92ZWRGb3JBbGxbb3duZXJdW3NwZW5kZXJdCiAgICAgICAgICAgICAgICB8fCBzcGVuZGVyID09IF9hcHByb3ZhbHNbaWRdCiAgICAgICAgKTsKICAgIH0KCiAgICBmdW5jdGlvbiB0cmFuc2ZlckZyb20oYWRkcmVzcyBmcm9tLCBhZGRyZXNzIHRvLCB1aW50MjU2IGlkKSBwdWJsaWMgewogICAgICAgIHJlcXVpcmUoZnJvbSA9PSBfb3duZXJPZltpZF0sICJmcm9tICE9IG93bmVyIik7CiAgICAgICAgcmVxdWlyZSh0byAhPSBhZGRyZXNzKDApLCAidHJhbnNmZXIgdG8gemVybyBhZGRyZXNzIik7CgogICAgICAgIHJlcXVpcmUoX2lzQXBwcm92ZWRPck93bmVyKGZyb20sIG1zZy5zZW5kZXIsIGlkKSwgIm5vdCBhdXRob3JpemVkIik7CgogICAgICAgIF9iYWxhbmNlT2ZbZnJvbV0tLTsKICAgICAgICBfYmFsYW5jZU9mW3RvXSsrOwogICAgICAgIF9vd25lck9mW2lkXSA9IHRvOwoKICAgICAgICBkZWxldGUgX2FwcHJvdmFsc1tpZF07CgogICAgICAgIGVtaXQgVHJhbnNmZXIoZnJvbSwgdG8sIGlkKTsKICAgIH0KCiAgICBmdW5jdGlvbiBzYWZlVHJhbnNmZXJGcm9tKGFkZHJlc3MgZnJvbSwgYWRkcmVzcyB0bywgdWludDI1NiBpZCkgZXh0ZXJuYWwgewogICAgICAgIHRyYW5zZmVyRnJvbShmcm9tLCB0bywgaWQpOwoKICAgICAgICByZXF1aXJlKAogICAgICAgICAgICB0by5jb2RlLmxlbmd0aCA9PSAwCiAgICAgICAgICAgICAgICB8fCBJRVJDNzIxUmVjZWl2ZXIodG8pLm9uRVJDNzIxUmVjZWl2ZWQobXNnLnNlbmRlciwgZnJvbSwgaWQsICIiKQogICAgICAgICAgICAgICAgICAgID09IElFUkM3MjFSZWNlaXZlci5vbkVSQzcyMVJlY2VpdmVkLnNlbGVjdG9yLAogICAgICAgICAgICAidW5zYWZlIHJlY2lwaWVudCIKICAgICAgICApOwogICAgfQoKICAgIGZ1bmN0aW9uIHNhZmVUcmFuc2ZlckZyb20oCiAgICAgICAgYWRkcmVzcyBmcm9tLAogICAgICAgIGFkZHJlc3MgdG8sCiAgICAgICAgdWludDI1NiBpZCwKICAgICAgICBieXRlcyBjYWxsZGF0YSBkYXRhCiAgICApIGV4dGVybmFsIHsKICAgICAgICB0cmFuc2ZlckZyb20oZnJvbSwgdG8sIGlkKTsKCiAgICAgICAgcmVxdWlyZSgKICAgICAgICAgICAgdG8uY29kZS5sZW5ndGggPT0gMAogICAgICAgICAgICAgICAgfHwgSUVSQzcyMVJlY2VpdmVyKHRvKS5vbkVSQzcyMVJlY2VpdmVkKG1zZy5zZW5kZXIsIGZyb20sIGlkLCBkYXRhKQogICAgICAgICAgICAgICAgICAgID09IElFUkM3MjFSZWNlaXZlci5vbkVSQzcyMVJlY2VpdmVkLnNlbGVjdG9yLAogICAgICAgICAgICAidW5zYWZlIHJlY2lwaWVudCIKICAgICAgICApOwogICAgfQoKICAgIGZ1bmN0aW9uIF9taW50KGFkZHJlc3MgdG8sIHVpbnQyNTYgaWQpIGludGVybmFsIHsKICAgICAgICByZXF1aXJlKHRvICE9IGFkZHJlc3MoMCksICJtaW50IHRvIHplcm8gYWRkcmVzcyIpOwogICAgICAgIHJlcXVpcmUoX293bmVyT2ZbaWRdID09IGFkZHJlc3MoMCksICJhbHJlYWR5IG1pbnRlZCIpOwoKICAgICAgICBfYmFsYW5jZU9mW3RvXSsrOwogICAgICAgIF9vd25lck9mW2lkXSA9IHRvOwoKICAgICAgICBlbWl0IFRyYW5zZmVyKGFkZHJlc3MoMCksIHRvLCBpZCk7CiAgICB9CgogICAgZnVuY3Rpb24gX2J1cm4odWludDI1NiBpZCkgaW50ZXJuYWwgewogICAgICAgIGFkZHJlc3Mgb3duZXIgPSBfb3duZXJPZltpZF07CiAgICAgICAgcmVxdWlyZShvd25lciAhPSBhZGRyZXNzKDApLCAibm90IG1pbnRlZCIpOwoKICAgICAgICBfYmFsYW5jZU9mW293bmVyXSAtPSAxOwoKICAgICAgICBkZWxldGUgX293bmVyT2ZbaWRdOwogICAgICAgIGRlbGV0ZSBfYXBwcm92YWxzW2lkXTsKCiAgICAgICAgZW1pdCBUcmFuc2Zlcihvd25lciwgYWRkcmVzcygwKSwgaWQpOwogICAgfQp9Cgpjb250cmFjdCBNeU5GVCBpcyBFUkM3MjEgewogICAgZnVuY3Rpb24gbWludChhZGRyZXNzIHRvLCB1aW50MjU2IGlkKSBleHRlcm5hbCB7CiAgICAgICAgX21pbnQodG8sIGlkKTsKICAgIH0KCiAgICBmdW5jdGlvbiBidXJuKHVpbnQyNTYgaWQpIGV4dGVybmFsIHsKICAgICAgICByZXF1aXJlKG1zZy5zZW5kZXIgPT0gX293bmVyT2ZbaWRdLCAibm90IG93bmVyIik7CiAgICAgICAgX2J1cm4oaWQpOwogICAgfQp9Cg=="}],ZA=`

Example of ERC721

+`,uA=({prev:s,next:a})=>r.jsx(A,{version:hA,title:IA,description:dA,cyfrinLink:CA,html:AA,prev:s,next:a,codes:jA}),yA="0.8.26",mA="ERC721",bA="Example of ERC721 non-fungible token in Solidity",wA="https://www.cyfrin.io/glossary/erc-721-solidity-code-example",kA=[{fileName:"ERC721.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNjsKCmludGVyZmFjZSBJRVJDMTY1IHsKICAgIGZ1bmN0aW9uIHN1cHBvcnRzSW50ZXJmYWNlKGJ5dGVzNCBpbnRlcmZhY2VJRCkKICAgICAgICBleHRlcm5hbAogICAgICAgIHZpZXcKICAgICAgICByZXR1cm5zIChib29sKTsKfQoKaW50ZXJmYWNlIElFUkM3MjEgaXMgSUVSQzE2NSB7CiAgICBmdW5jdGlvbiBiYWxhbmNlT2YoYWRkcmVzcyBvd25lcikgZXh0ZXJuYWwgdmlldyByZXR1cm5zICh1aW50MjU2IGJhbGFuY2UpOwogICAgZnVuY3Rpb24gb3duZXJPZih1aW50MjU2IHRva2VuSWQpIGV4dGVybmFsIHZpZXcgcmV0dXJucyAoYWRkcmVzcyBvd25lcik7CiAgICBmdW5jdGlvbiBzYWZlVHJhbnNmZXJGcm9tKGFkZHJlc3MgZnJvbSwgYWRkcmVzcyB0bywgdWludDI1NiB0b2tlbklkKQogICAgICAgIGV4dGVybmFsOwogICAgZnVuY3Rpb24gc2FmZVRyYW5zZmVyRnJvbSgKICAgICAgICBhZGRyZXNzIGZyb20sCiAgICAgICAgYWRkcmVzcyB0bywKICAgICAgICB1aW50MjU2IHRva2VuSWQsCiAgICAgICAgYnl0ZXMgY2FsbGRhdGEgZGF0YQogICAgKSBleHRlcm5hbDsKICAgIGZ1bmN0aW9uIHRyYW5zZmVyRnJvbShhZGRyZXNzIGZyb20sIGFkZHJlc3MgdG8sIHVpbnQyNTYgdG9rZW5JZCkgZXh0ZXJuYWw7CiAgICBmdW5jdGlvbiBhcHByb3ZlKGFkZHJlc3MgdG8sIHVpbnQyNTYgdG9rZW5JZCkgZXh0ZXJuYWw7CiAgICBmdW5jdGlvbiBnZXRBcHByb3ZlZCh1aW50MjU2IHRva2VuSWQpCiAgICAgICAgZXh0ZXJuYWwKICAgICAgICB2aWV3CiAgICAgICAgcmV0dXJucyAoYWRkcmVzcyBvcGVyYXRvcik7CiAgICBmdW5jdGlvbiBzZXRBcHByb3ZhbEZvckFsbChhZGRyZXNzIG9wZXJhdG9yLCBib29sIF9hcHByb3ZlZCkgZXh0ZXJuYWw7CiAgICBmdW5jdGlvbiBpc0FwcHJvdmVkRm9yQWxsKGFkZHJlc3Mgb3duZXIsIGFkZHJlc3Mgb3BlcmF0b3IpCiAgICAgICAgZXh0ZXJuYWwKICAgICAgICB2aWV3CiAgICAgICAgcmV0dXJucyAoYm9vbCk7Cn0KCmludGVyZmFjZSBJRVJDNzIxUmVjZWl2ZXIgewogICAgZnVuY3Rpb24gb25FUkM3MjFSZWNlaXZlZCgKICAgICAgICBhZGRyZXNzIG9wZXJhdG9yLAogICAgICAgIGFkZHJlc3MgZnJvbSwKICAgICAgICB1aW50MjU2IHRva2VuSWQsCiAgICAgICAgYnl0ZXMgY2FsbGRhdGEgZGF0YQogICAgKSBleHRlcm5hbCByZXR1cm5zIChieXRlczQpOwp9Cgpjb250cmFjdCBFUkM3MjEgaXMgSUVSQzcyMSB7CiAgICBldmVudCBUcmFuc2ZlcigKICAgICAgICBhZGRyZXNzIGluZGV4ZWQgZnJvbSwgYWRkcmVzcyBpbmRleGVkIHRvLCB1aW50MjU2IGluZGV4ZWQgaWQKICAgICk7CiAgICBldmVudCBBcHByb3ZhbCgKICAgICAgICBhZGRyZXNzIGluZGV4ZWQgb3duZXIsIGFkZHJlc3MgaW5kZXhlZCBzcGVuZGVyLCB1aW50MjU2IGluZGV4ZWQgaWQKICAgICk7CiAgICBldmVudCBBcHByb3ZhbEZvckFsbCgKICAgICAgICBhZGRyZXNzIGluZGV4ZWQgb3duZXIsIGFkZHJlc3MgaW5kZXhlZCBvcGVyYXRvciwgYm9vbCBhcHByb3ZlZAogICAgKTsKCiAgICAvLyBNYXBwaW5nIGZyb20gdG9rZW4gSUQgdG8gb3duZXIgYWRkcmVzcwogICAgbWFwcGluZyh1aW50MjU2ID0+IGFkZHJlc3MpIGludGVybmFsIF9vd25lck9mOwoKICAgIC8vIE1hcHBpbmcgb3duZXIgYWRkcmVzcyB0byB0b2tlbiBjb3VudAogICAgbWFwcGluZyhhZGRyZXNzID0+IHVpbnQyNTYpIGludGVybmFsIF9iYWxhbmNlT2Y7CgogICAgLy8gTWFwcGluZyBmcm9tIHRva2VuIElEIHRvIGFwcHJvdmVkIGFkZHJlc3MKICAgIG1hcHBpbmcodWludDI1NiA9PiBhZGRyZXNzKSBpbnRlcm5hbCBfYXBwcm92YWxzOwoKICAgIC8vIE1hcHBpbmcgZnJvbSBvd25lciB0byBvcGVyYXRvciBhcHByb3ZhbHMKICAgIG1hcHBpbmcoYWRkcmVzcyA9PiBtYXBwaW5nKGFkZHJlc3MgPT4gYm9vbCkpIHB1YmxpYyBpc0FwcHJvdmVkRm9yQWxsOwoKICAgIGZ1bmN0aW9uIHN1cHBvcnRzSW50ZXJmYWNlKGJ5dGVzNCBpbnRlcmZhY2VJZCkKICAgICAgICBleHRlcm5hbAogICAgICAgIHB1cmUKICAgICAgICByZXR1cm5zIChib29sKQogICAgewogICAgICAgIHJldHVybiBpbnRlcmZhY2VJZCA9PSB0eXBlKElFUkM3MjEpLmludGVyZmFjZUlkCiAgICAgICAgICAgIHx8IGludGVyZmFjZUlkID09IHR5cGUoSUVSQzE2NSkuaW50ZXJmYWNlSWQ7CiAgICB9CgogICAgZnVuY3Rpb24gb3duZXJPZih1aW50MjU2IGlkKSBleHRlcm5hbCB2aWV3IHJldHVybnMgKGFkZHJlc3Mgb3duZXIpIHsKICAgICAgICBvd25lciA9IF9vd25lck9mW2lkXTsKICAgICAgICByZXF1aXJlKG93bmVyICE9IGFkZHJlc3MoMCksICJ0b2tlbiBkb2Vzbid0IGV4aXN0Iik7CiAgICB9CgogICAgZnVuY3Rpb24gYmFsYW5jZU9mKGFkZHJlc3Mgb3duZXIpIGV4dGVybmFsIHZpZXcgcmV0dXJucyAodWludDI1NikgewogICAgICAgIHJlcXVpcmUob3duZXIgIT0gYWRkcmVzcygwKSwgIm93bmVyID0gemVybyBhZGRyZXNzIik7CiAgICAgICAgcmV0dXJuIF9iYWxhbmNlT2Zbb3duZXJdOwogICAgfQoKICAgIGZ1bmN0aW9uIHNldEFwcHJvdmFsRm9yQWxsKGFkZHJlc3Mgb3BlcmF0b3IsIGJvb2wgYXBwcm92ZWQpIGV4dGVybmFsIHsKICAgICAgICBpc0FwcHJvdmVkRm9yQWxsW21zZy5zZW5kZXJdW29wZXJhdG9yXSA9IGFwcHJvdmVkOwogICAgICAgIGVtaXQgQXBwcm92YWxGb3JBbGwobXNnLnNlbmRlciwgb3BlcmF0b3IsIGFwcHJvdmVkKTsKICAgIH0KCiAgICBmdW5jdGlvbiBhcHByb3ZlKGFkZHJlc3Mgc3BlbmRlciwgdWludDI1NiBpZCkgZXh0ZXJuYWwgewogICAgICAgIGFkZHJlc3Mgb3duZXIgPSBfb3duZXJPZltpZF07CiAgICAgICAgcmVxdWlyZSgKICAgICAgICAgICAgbXNnLnNlbmRlciA9PSBvd25lciB8fCBpc0FwcHJvdmVkRm9yQWxsW293bmVyXVttc2cuc2VuZGVyXSwKICAgICAgICAgICAgIm5vdCBhdXRob3JpemVkIgogICAgICAgICk7CgogICAgICAgIF9hcHByb3ZhbHNbaWRdID0gc3BlbmRlcjsKCiAgICAgICAgZW1pdCBBcHByb3ZhbChvd25lciwgc3BlbmRlciwgaWQpOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldEFwcHJvdmVkKHVpbnQyNTYgaWQpIGV4dGVybmFsIHZpZXcgcmV0dXJucyAoYWRkcmVzcykgewogICAgICAgIHJlcXVpcmUoX293bmVyT2ZbaWRdICE9IGFkZHJlc3MoMCksICJ0b2tlbiBkb2Vzbid0IGV4aXN0Iik7CiAgICAgICAgcmV0dXJuIF9hcHByb3ZhbHNbaWRdOwogICAgfQoKICAgIGZ1bmN0aW9uIF9pc0FwcHJvdmVkT3JPd25lcihhZGRyZXNzIG93bmVyLCBhZGRyZXNzIHNwZW5kZXIsIHVpbnQyNTYgaWQpCiAgICAgICAgaW50ZXJuYWwKICAgICAgICB2aWV3CiAgICAgICAgcmV0dXJucyAoYm9vbCkKICAgIHsKICAgICAgICByZXR1cm4gKAogICAgICAgICAgICBzcGVuZGVyID09IG93bmVyIHx8IGlzQXBwcm92ZWRGb3JBbGxbb3duZXJdW3NwZW5kZXJdCiAgICAgICAgICAgICAgICB8fCBzcGVuZGVyID09IF9hcHByb3ZhbHNbaWRdCiAgICAgICAgKTsKICAgIH0KCiAgICBmdW5jdGlvbiB0cmFuc2ZlckZyb20oYWRkcmVzcyBmcm9tLCBhZGRyZXNzIHRvLCB1aW50MjU2IGlkKSBwdWJsaWMgewogICAgICAgIHJlcXVpcmUoZnJvbSA9PSBfb3duZXJPZltpZF0sICJmcm9tICE9IG93bmVyIik7CiAgICAgICAgcmVxdWlyZSh0byAhPSBhZGRyZXNzKDApLCAidHJhbnNmZXIgdG8gemVybyBhZGRyZXNzIik7CgogICAgICAgIHJlcXVpcmUoX2lzQXBwcm92ZWRPck93bmVyKGZyb20sIG1zZy5zZW5kZXIsIGlkKSwgIm5vdCBhdXRob3JpemVkIik7CgogICAgICAgIF9iYWxhbmNlT2ZbZnJvbV0tLTsKICAgICAgICBfYmFsYW5jZU9mW3RvXSsrOwogICAgICAgIF9vd25lck9mW2lkXSA9IHRvOwoKICAgICAgICBkZWxldGUgX2FwcHJvdmFsc1tpZF07CgogICAgICAgIGVtaXQgVHJhbnNmZXIoZnJvbSwgdG8sIGlkKTsKICAgIH0KCiAgICBmdW5jdGlvbiBzYWZlVHJhbnNmZXJGcm9tKGFkZHJlc3MgZnJvbSwgYWRkcmVzcyB0bywgdWludDI1NiBpZCkgZXh0ZXJuYWwgewogICAgICAgIHRyYW5zZmVyRnJvbShmcm9tLCB0bywgaWQpOwoKICAgICAgICByZXF1aXJlKAogICAgICAgICAgICB0by5jb2RlLmxlbmd0aCA9PSAwCiAgICAgICAgICAgICAgICB8fCBJRVJDNzIxUmVjZWl2ZXIodG8pLm9uRVJDNzIxUmVjZWl2ZWQobXNnLnNlbmRlciwgZnJvbSwgaWQsICIiKQogICAgICAgICAgICAgICAgICAgID09IElFUkM3MjFSZWNlaXZlci5vbkVSQzcyMVJlY2VpdmVkLnNlbGVjdG9yLAogICAgICAgICAgICAidW5zYWZlIHJlY2lwaWVudCIKICAgICAgICApOwogICAgfQoKICAgIGZ1bmN0aW9uIHNhZmVUcmFuc2ZlckZyb20oCiAgICAgICAgYWRkcmVzcyBmcm9tLAogICAgICAgIGFkZHJlc3MgdG8sCiAgICAgICAgdWludDI1NiBpZCwKICAgICAgICBieXRlcyBjYWxsZGF0YSBkYXRhCiAgICApIGV4dGVybmFsIHsKICAgICAgICB0cmFuc2ZlckZyb20oZnJvbSwgdG8sIGlkKTsKCiAgICAgICAgcmVxdWlyZSgKICAgICAgICAgICAgdG8uY29kZS5sZW5ndGggPT0gMAogICAgICAgICAgICAgICAgfHwgSUVSQzcyMVJlY2VpdmVyKHRvKS5vbkVSQzcyMVJlY2VpdmVkKG1zZy5zZW5kZXIsIGZyb20sIGlkLCBkYXRhKQogICAgICAgICAgICAgICAgICAgID09IElFUkM3MjFSZWNlaXZlci5vbkVSQzcyMVJlY2VpdmVkLnNlbGVjdG9yLAogICAgICAgICAgICAidW5zYWZlIHJlY2lwaWVudCIKICAgICAgICApOwogICAgfQoKICAgIGZ1bmN0aW9uIF9taW50KGFkZHJlc3MgdG8sIHVpbnQyNTYgaWQpIGludGVybmFsIHsKICAgICAgICByZXF1aXJlKHRvICE9IGFkZHJlc3MoMCksICJtaW50IHRvIHplcm8gYWRkcmVzcyIpOwogICAgICAgIHJlcXVpcmUoX293bmVyT2ZbaWRdID09IGFkZHJlc3MoMCksICJhbHJlYWR5IG1pbnRlZCIpOwoKICAgICAgICBfYmFsYW5jZU9mW3RvXSsrOwogICAgICAgIF9vd25lck9mW2lkXSA9IHRvOwoKICAgICAgICBlbWl0IFRyYW5zZmVyKGFkZHJlc3MoMCksIHRvLCBpZCk7CiAgICB9CgogICAgZnVuY3Rpb24gX2J1cm4odWludDI1NiBpZCkgaW50ZXJuYWwgewogICAgICAgIGFkZHJlc3Mgb3duZXIgPSBfb3duZXJPZltpZF07CiAgICAgICAgcmVxdWlyZShvd25lciAhPSBhZGRyZXNzKDApLCAibm90IG1pbnRlZCIpOwoKICAgICAgICBfYmFsYW5jZU9mW293bmVyXSAtPSAxOwoKICAgICAgICBkZWxldGUgX293bmVyT2ZbaWRdOwogICAgICAgIGRlbGV0ZSBfYXBwcm92YWxzW2lkXTsKCiAgICAgICAgZW1pdCBUcmFuc2Zlcihvd25lciwgYWRkcmVzcygwKSwgaWQpOwogICAgfQp9Cgpjb250cmFjdCBNeU5GVCBpcyBFUkM3MjEgewogICAgZnVuY3Rpb24gbWludChhZGRyZXNzIHRvLCB1aW50MjU2IGlkKSBleHRlcm5hbCB7CiAgICAgICAgX21pbnQodG8sIGlkKTsKICAgIH0KCiAgICBmdW5jdGlvbiBidXJuKHVpbnQyNTYgaWQpIGV4dGVybmFsIHsKICAgICAgICByZXF1aXJlKG1zZy5zZW5kZXIgPT0gX293bmVyT2ZbaWRdLCAibm90IG93bmVyIik7CiAgICAgICAgX2J1cm4oaWQpOwogICAgfQp9Cg=="}],ZA=`

Example of ERC721

// SPDX-License-Identifier: MIT
 pragma solidity ^0.8.26;
 
@@ -9643,7 +9643,7 @@ assertion probably means that there is a bug.
         total = _total;
     }
 }
-
`,LZ=({prev:s,next:a})=>r.jsx(A,{version:zZ,title:DZ,description:EZ,cyfrinLink:TZ,html:UZ,prev:s,next:a,codes:QZ}),_Z="0.8.26",OZ="Accessing Private Data",PZ="An example of accessing private data from a Solidity smart contract",$Z="",qZ=[{fileName:"Vault.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNjsKCi8qCk5vdGU6IGNhbm5vdCB1c2Ugd2ViMyBvbiBKVk0sIHNvIHVzZSB0aGUgY29udHJhY3QgZGVwbG95ZWQgb24gR29lcmxpCk5vdGU6IGJyb3dzZXIgV2ViMyBpcyBvbGQgc28gdXNlIFdlYjMgZnJvbSB0cnVmZmxlIGNvbnNvbGUKCkNvbnRyYWN0IGRlcGxveWVkIG9uIEdvZXJsaQoweDUzNEU0Q2UwZmZGNzc5NTEzNzkzY2ZkNzAzMDhBRjE5NTgyN0JEMzEKKi8KCi8qCiMgU3RvcmFnZQotIDIgKiogMjU2IHNsb3RzCi0gMzIgYnl0ZXMgZm9yIGVhY2ggc2xvdAotIGRhdGEgaXMgc3RvcmVkIHNlcXVlbnRpYWxseSBpbiB0aGUgb3JkZXIgb2YgZGVjbGFyYXRpb24KLSBzdG9yYWdlIGlzIG9wdGltaXplZCB0byBzYXZlIHNwYWNlLiBJZiBuZWlnaGJvcmluZyB2YXJpYWJsZXMgZml0IGluIGEgc2luZ2xlCiAgMzIgYnl0ZXMsIHRoZW4gdGhleSBhcmUgcGFja2VkIGludG8gdGhlIHNhbWUgc2xvdCwgc3RhcnRpbmcgZnJvbSB0aGUgcmlnaHQKKi8KCmNvbnRyYWN0IFZhdWx0IHsKICAgIC8vIHNsb3QgMAogICAgdWludDI1NiBwdWJsaWMgY291bnQgPSAxMjM7CiAgICAvLyBzbG90IDEKICAgIGFkZHJlc3MgcHVibGljIG93bmVyID0gbXNnLnNlbmRlcjsKICAgIGJvb2wgcHVibGljIGlzVHJ1ZSA9IHRydWU7CiAgICB1aW50MTYgcHVibGljIHUxNiA9IDMxOwogICAgLy8gc2xvdCAyCiAgICBieXRlczMyIHByaXZhdGUgcGFzc3dvcmQ7CgogICAgLy8gY29uc3RhbnRzIGRvIG5vdCB1c2Ugc3RvcmFnZQogICAgdWludDI1NiBwdWJsaWMgY29uc3RhbnQgc29tZUNvbnN0ID0gMTIzOwoKICAgIC8vIHNsb3QgMywgNCwgNSAob25lIGZvciBlYWNoIGFycmF5IGVsZW1lbnQpCiAgICBieXRlczMyWzNdIHB1YmxpYyBkYXRhOwoKICAgIHN0cnVjdCBVc2VyIHsKICAgICAgICB1aW50MjU2IGlkOwogICAgICAgIGJ5dGVzMzIgcGFzc3dvcmQ7CiAgICB9CgogICAgLy8gc2xvdCA2IC0gbGVuZ3RoIG9mIGFycmF5CiAgICAvLyBzdGFydGluZyBmcm9tIHNsb3QgaGFzaCg2KSAtIGFycmF5IGVsZW1lbnRzCiAgICAvLyBzbG90IHdoZXJlIGFycmF5IGVsZW1lbnQgaXMgc3RvcmVkID0ga2VjY2FrMjU2KHNsb3QpKSArIChpbmRleCAqIGVsZW1lbnRTaXplKQogICAgLy8gd2hlcmUgc2xvdCA9IDYgYW5kIGVsZW1lbnRTaXplID0gMiAoMSAodWludCkgKyAgMSAoYnl0ZXMzMikpCiAgICBVc2VyW10gcHJpdmF0ZSB1c2VyczsKCiAgICAvLyBzbG90IDcgLSBlbXB0eQogICAgLy8gZW50cmllcyBhcmUgc3RvcmVkIGF0IGhhc2goa2V5LCBzbG90KQogICAgLy8gd2hlcmUgc2xvdCA9IDcsIGtleSA9IG1hcCBrZXkKICAgIG1hcHBpbmcodWludDI1NiA9PiBVc2VyKSBwcml2YXRlIGlkVG9Vc2VyOwoKICAgIGNvbnN0cnVjdG9yKGJ5dGVzMzIgX3Bhc3N3b3JkKSB7CiAgICAgICAgcGFzc3dvcmQgPSBfcGFzc3dvcmQ7CiAgICB9CgogICAgZnVuY3Rpb24gYWRkVXNlcihieXRlczMyIF9wYXNzd29yZCkgcHVibGljIHsKICAgICAgICBVc2VyIG1lbW9yeSB1c2VyID0gVXNlcih7aWQ6IHVzZXJzLmxlbmd0aCwgcGFzc3dvcmQ6IF9wYXNzd29yZH0pOwoKICAgICAgICB1c2Vycy5wdXNoKHVzZXIpOwogICAgICAgIGlkVG9Vc2VyW3VzZXIuaWRdID0gdXNlcjsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRBcnJheUxvY2F0aW9uKHVpbnQyNTYgc2xvdCwgdWludDI1NiBpbmRleCwgdWludDI1NiBlbGVtZW50U2l6ZSkKICAgICAgICBwdWJsaWMKICAgICAgICBwdXJlCiAgICAgICAgcmV0dXJucyAodWludDI1NikKICAgIHsKICAgICAgICByZXR1cm4KICAgICAgICAgICAgdWludDI1NihrZWNjYWsyNTYoYWJpLmVuY29kZVBhY2tlZChzbG90KSkpICsgKGluZGV4ICogZWxlbWVudFNpemUpOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldE1hcExvY2F0aW9uKHVpbnQyNTYgc2xvdCwgdWludDI1NiBrZXkpCiAgICAgICAgcHVibGljCiAgICAgICAgcHVyZQogICAgICAgIHJldHVybnMgKHVpbnQyNTYpCiAgICB7CiAgICAgICAgcmV0dXJuIHVpbnQyNTYoa2VjY2FrMjU2KGFiaS5lbmNvZGVQYWNrZWQoa2V5LCBzbG90KSkpOwogICAgfQp9CgovKgpzbG90IDAgLSBjb3VudAp3ZWIzLmV0aC5nZXRTdG9yYWdlQXQoIjB4NTM0RTRDZTBmZkY3Nzk1MTM3OTNjZmQ3MDMwOEFGMTk1ODI3QkQzMSIsIDAsIGNvbnNvbGUubG9nKQpzbG90IDEgLSB1MTYsIGlzVHJ1ZSwgb3duZXIKd2ViMy5ldGguZ2V0U3RvcmFnZUF0KCIweDUzNEU0Q2UwZmZGNzc5NTEzNzkzY2ZkNzAzMDhBRjE5NTgyN0JEMzEiLCAxLCBjb25zb2xlLmxvZykKc2xvdCAyIC0gcGFzc3dvcmQKd2ViMy5ldGguZ2V0U3RvcmFnZUF0KCIweDUzNEU0Q2UwZmZGNzc5NTEzNzkzY2ZkNzAzMDhBRjE5NTgyN0JEMzEiLCAyLCBjb25zb2xlLmxvZykKCnNsb3QgNiAtIGFycmF5IGxlbmd0aApnZXRBcnJheUxvY2F0aW9uKDYsIDAsIDIpCndlYjMudXRpbHMubnVtYmVyVG9IZXgoIjExMTQxNDA3NzgxNTg2MzQwMDUxMDAwNDA2NDYyOTk3MzU5NTk2MTU3OTE3MzY2NTU4OTIyNDIwMzUwMzY2MjE0OTM3MzcyNDk4NjY4NyIpCk5vdGU6IFdlIGNhbiBhbHNvIHVzZSB3ZWIzIHRvIGdldCBkYXRhIGxvY2F0aW9uCndlYjMudXRpbHMuc29saWRpdHlTaGEzKHsgdHlwZTogInVpbnQiLCB2YWx1ZTogNiB9KQoxc3QgdXNlcgp3ZWIzLmV0aC5nZXRTdG9yYWdlQXQoIjB4NTM0RTRDZTBmZkY3Nzk1MTM3OTNjZmQ3MDMwOEFGMTk1ODI3QkQzMSIsICIweGY2NTIyMjIzMTNlMjg0NTk1MjhkOTIwYjY1MTE1YzE2YzA0ZjNlZmM4MmFhZWRjOTdiZTU5ZjNmMzc3YzBkM2YiLCBjb25zb2xlLmxvZykKd2ViMy5ldGguZ2V0U3RvcmFnZUF0KCIweDUzNEU0Q2UwZmZGNzc5NTEzNzkzY2ZkNzAzMDhBRjE5NTgyN0JEMzEiLCAiMHhmNjUyMjIyMzEzZTI4NDU5NTI4ZDkyMGI2NTExNWMxNmMwNGYzZWZjODJhYWVkYzk3YmU1OWYzZjM3N2MwZDQwIiwgY29uc29sZS5sb2cpCk5vdGU6IHVzZSB3ZWIzLnRvQXNjaWkgdG8gY29udmVydCBieXRlczMyIHRvIGFscGhhYmV0CjJuZCB1c2VyCndlYjMuZXRoLmdldFN0b3JhZ2VBdCgiMHg1MzRFNENlMGZmRjc3OTUxMzc5M2NmZDcwMzA4QUYxOTU4MjdCRDMxIiwgIjB4ZjY1MjIyMjMxM2UyODQ1OTUyOGQ5MjBiNjUxMTVjMTZjMDRmM2VmYzgyYWFlZGM5N2JlNTlmM2YzNzdjMGQ0MSIsIGNvbnNvbGUubG9nKQp3ZWIzLmV0aC5nZXRTdG9yYWdlQXQoIjB4NTM0RTRDZTBmZkY3Nzk1MTM3OTNjZmQ3MDMwOEFGMTk1ODI3QkQzMSIsICIweGY2NTIyMjIzMTNlMjg0NTk1MjhkOTIwYjY1MTE1YzE2YzA0ZjNlZmM4MmFhZWRjOTdiZTU5ZjNmMzc3YzBkNDIiLCBjb25zb2xlLmxvZykKCnNsb3QgNyAtIGVtcHR5CmdldE1hcExvY2F0aW9uKDcsIDEpCndlYjMudXRpbHMubnVtYmVyVG9IZXgoIjgxMjIyMTkxOTg2MjI2ODA5MTAzMjc5MTE5OTk0NzA3ODY4MzIyODU1NzQxODE5OTA1OTA0NDE3OTUzMDkyNjY2Njk5MDk2OTYzMTEyIikKTm90ZTogV2UgY2FuIGFsc28gdXNlIHdlYjMgdG8gZ2V0IGRhdGEgbG9jYXRpb24Kd2ViMy51dGlscy5zb2xpZGl0eVNoYTMoeyB0eXBlOiAidWludCIsIHZhbHVlOiAxIH0sIHt0eXBlOiAidWludCIsIHZhbHVlOiA3fSkKdXNlciAxCndlYjMuZXRoLmdldFN0b3JhZ2VBdCgiMHg1MzRFNENlMGZmRjc3OTUxMzc5M2NmZDcwMzA4QUYxOTU4MjdCRDMxIiwgIjB4YjM5MjIxYWNlMDUzNDY1ZWMzNDUzY2UyYjM2NDMwYmQxMzhiOTk3ZWNlYTI1YzEwNDNkYTBjMzY2ODEyYjgyOCIsIGNvbnNvbGUubG9nKQp3ZWIzLmV0aC5nZXRTdG9yYWdlQXQoIjB4NTM0RTRDZTBmZkY3Nzk1MTM3OTNjZmQ3MDMwOEFGMTk1ODI3QkQzMSIsICIweGIzOTIyMWFjZTA1MzQ2NWVjMzQ1M2NlMmIzNjQzMGJkMTM4Yjk5N2VjZWEyNWMxMDQzZGEwYzM2NjgxMmI4MjkiLCBjb25zb2xlLmxvZykKKi8K"}],sW=`

Vulnerability

+`,LZ=({prev:s,next:a})=>r.jsx(A,{version:zZ,title:DZ,description:EZ,cyfrinLink:TZ,html:UZ,prev:s,next:a,codes:QZ}),_Z="0.8.26",OZ="Accessing Private Data",PZ="An example of accessing private data from a Solidity smart contract",$Z="https://solidity-by-example.org/hacks/accessing-private-data/",qZ=[{fileName:"Vault.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNjsKCi8qCk5vdGU6IGNhbm5vdCB1c2Ugd2ViMyBvbiBKVk0sIHNvIHVzZSB0aGUgY29udHJhY3QgZGVwbG95ZWQgb24gR29lcmxpCk5vdGU6IGJyb3dzZXIgV2ViMyBpcyBvbGQgc28gdXNlIFdlYjMgZnJvbSB0cnVmZmxlIGNvbnNvbGUKCkNvbnRyYWN0IGRlcGxveWVkIG9uIEdvZXJsaQoweDUzNEU0Q2UwZmZGNzc5NTEzNzkzY2ZkNzAzMDhBRjE5NTgyN0JEMzEKKi8KCi8qCiMgU3RvcmFnZQotIDIgKiogMjU2IHNsb3RzCi0gMzIgYnl0ZXMgZm9yIGVhY2ggc2xvdAotIGRhdGEgaXMgc3RvcmVkIHNlcXVlbnRpYWxseSBpbiB0aGUgb3JkZXIgb2YgZGVjbGFyYXRpb24KLSBzdG9yYWdlIGlzIG9wdGltaXplZCB0byBzYXZlIHNwYWNlLiBJZiBuZWlnaGJvcmluZyB2YXJpYWJsZXMgZml0IGluIGEgc2luZ2xlCiAgMzIgYnl0ZXMsIHRoZW4gdGhleSBhcmUgcGFja2VkIGludG8gdGhlIHNhbWUgc2xvdCwgc3RhcnRpbmcgZnJvbSB0aGUgcmlnaHQKKi8KCmNvbnRyYWN0IFZhdWx0IHsKICAgIC8vIHNsb3QgMAogICAgdWludDI1NiBwdWJsaWMgY291bnQgPSAxMjM7CiAgICAvLyBzbG90IDEKICAgIGFkZHJlc3MgcHVibGljIG93bmVyID0gbXNnLnNlbmRlcjsKICAgIGJvb2wgcHVibGljIGlzVHJ1ZSA9IHRydWU7CiAgICB1aW50MTYgcHVibGljIHUxNiA9IDMxOwogICAgLy8gc2xvdCAyCiAgICBieXRlczMyIHByaXZhdGUgcGFzc3dvcmQ7CgogICAgLy8gY29uc3RhbnRzIGRvIG5vdCB1c2Ugc3RvcmFnZQogICAgdWludDI1NiBwdWJsaWMgY29uc3RhbnQgc29tZUNvbnN0ID0gMTIzOwoKICAgIC8vIHNsb3QgMywgNCwgNSAob25lIGZvciBlYWNoIGFycmF5IGVsZW1lbnQpCiAgICBieXRlczMyWzNdIHB1YmxpYyBkYXRhOwoKICAgIHN0cnVjdCBVc2VyIHsKICAgICAgICB1aW50MjU2IGlkOwogICAgICAgIGJ5dGVzMzIgcGFzc3dvcmQ7CiAgICB9CgogICAgLy8gc2xvdCA2IC0gbGVuZ3RoIG9mIGFycmF5CiAgICAvLyBzdGFydGluZyBmcm9tIHNsb3QgaGFzaCg2KSAtIGFycmF5IGVsZW1lbnRzCiAgICAvLyBzbG90IHdoZXJlIGFycmF5IGVsZW1lbnQgaXMgc3RvcmVkID0ga2VjY2FrMjU2KHNsb3QpKSArIChpbmRleCAqIGVsZW1lbnRTaXplKQogICAgLy8gd2hlcmUgc2xvdCA9IDYgYW5kIGVsZW1lbnRTaXplID0gMiAoMSAodWludCkgKyAgMSAoYnl0ZXMzMikpCiAgICBVc2VyW10gcHJpdmF0ZSB1c2VyczsKCiAgICAvLyBzbG90IDcgLSBlbXB0eQogICAgLy8gZW50cmllcyBhcmUgc3RvcmVkIGF0IGhhc2goa2V5LCBzbG90KQogICAgLy8gd2hlcmUgc2xvdCA9IDcsIGtleSA9IG1hcCBrZXkKICAgIG1hcHBpbmcodWludDI1NiA9PiBVc2VyKSBwcml2YXRlIGlkVG9Vc2VyOwoKICAgIGNvbnN0cnVjdG9yKGJ5dGVzMzIgX3Bhc3N3b3JkKSB7CiAgICAgICAgcGFzc3dvcmQgPSBfcGFzc3dvcmQ7CiAgICB9CgogICAgZnVuY3Rpb24gYWRkVXNlcihieXRlczMyIF9wYXNzd29yZCkgcHVibGljIHsKICAgICAgICBVc2VyIG1lbW9yeSB1c2VyID0gVXNlcih7aWQ6IHVzZXJzLmxlbmd0aCwgcGFzc3dvcmQ6IF9wYXNzd29yZH0pOwoKICAgICAgICB1c2Vycy5wdXNoKHVzZXIpOwogICAgICAgIGlkVG9Vc2VyW3VzZXIuaWRdID0gdXNlcjsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRBcnJheUxvY2F0aW9uKHVpbnQyNTYgc2xvdCwgdWludDI1NiBpbmRleCwgdWludDI1NiBlbGVtZW50U2l6ZSkKICAgICAgICBwdWJsaWMKICAgICAgICBwdXJlCiAgICAgICAgcmV0dXJucyAodWludDI1NikKICAgIHsKICAgICAgICByZXR1cm4KICAgICAgICAgICAgdWludDI1NihrZWNjYWsyNTYoYWJpLmVuY29kZVBhY2tlZChzbG90KSkpICsgKGluZGV4ICogZWxlbWVudFNpemUpOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldE1hcExvY2F0aW9uKHVpbnQyNTYgc2xvdCwgdWludDI1NiBrZXkpCiAgICAgICAgcHVibGljCiAgICAgICAgcHVyZQogICAgICAgIHJldHVybnMgKHVpbnQyNTYpCiAgICB7CiAgICAgICAgcmV0dXJuIHVpbnQyNTYoa2VjY2FrMjU2KGFiaS5lbmNvZGVQYWNrZWQoa2V5LCBzbG90KSkpOwogICAgfQp9CgovKgpzbG90IDAgLSBjb3VudAp3ZWIzLmV0aC5nZXRTdG9yYWdlQXQoIjB4NTM0RTRDZTBmZkY3Nzk1MTM3OTNjZmQ3MDMwOEFGMTk1ODI3QkQzMSIsIDAsIGNvbnNvbGUubG9nKQpzbG90IDEgLSB1MTYsIGlzVHJ1ZSwgb3duZXIKd2ViMy5ldGguZ2V0U3RvcmFnZUF0KCIweDUzNEU0Q2UwZmZGNzc5NTEzNzkzY2ZkNzAzMDhBRjE5NTgyN0JEMzEiLCAxLCBjb25zb2xlLmxvZykKc2xvdCAyIC0gcGFzc3dvcmQKd2ViMy5ldGguZ2V0U3RvcmFnZUF0KCIweDUzNEU0Q2UwZmZGNzc5NTEzNzkzY2ZkNzAzMDhBRjE5NTgyN0JEMzEiLCAyLCBjb25zb2xlLmxvZykKCnNsb3QgNiAtIGFycmF5IGxlbmd0aApnZXRBcnJheUxvY2F0aW9uKDYsIDAsIDIpCndlYjMudXRpbHMubnVtYmVyVG9IZXgoIjExMTQxNDA3NzgxNTg2MzQwMDUxMDAwNDA2NDYyOTk3MzU5NTk2MTU3OTE3MzY2NTU4OTIyNDIwMzUwMzY2MjE0OTM3MzcyNDk4NjY4NyIpCk5vdGU6IFdlIGNhbiBhbHNvIHVzZSB3ZWIzIHRvIGdldCBkYXRhIGxvY2F0aW9uCndlYjMudXRpbHMuc29saWRpdHlTaGEzKHsgdHlwZTogInVpbnQiLCB2YWx1ZTogNiB9KQoxc3QgdXNlcgp3ZWIzLmV0aC5nZXRTdG9yYWdlQXQoIjB4NTM0RTRDZTBmZkY3Nzk1MTM3OTNjZmQ3MDMwOEFGMTk1ODI3QkQzMSIsICIweGY2NTIyMjIzMTNlMjg0NTk1MjhkOTIwYjY1MTE1YzE2YzA0ZjNlZmM4MmFhZWRjOTdiZTU5ZjNmMzc3YzBkM2YiLCBjb25zb2xlLmxvZykKd2ViMy5ldGguZ2V0U3RvcmFnZUF0KCIweDUzNEU0Q2UwZmZGNzc5NTEzNzkzY2ZkNzAzMDhBRjE5NTgyN0JEMzEiLCAiMHhmNjUyMjIyMzEzZTI4NDU5NTI4ZDkyMGI2NTExNWMxNmMwNGYzZWZjODJhYWVkYzk3YmU1OWYzZjM3N2MwZDQwIiwgY29uc29sZS5sb2cpCk5vdGU6IHVzZSB3ZWIzLnRvQXNjaWkgdG8gY29udmVydCBieXRlczMyIHRvIGFscGhhYmV0CjJuZCB1c2VyCndlYjMuZXRoLmdldFN0b3JhZ2VBdCgiMHg1MzRFNENlMGZmRjc3OTUxMzc5M2NmZDcwMzA4QUYxOTU4MjdCRDMxIiwgIjB4ZjY1MjIyMjMxM2UyODQ1OTUyOGQ5MjBiNjUxMTVjMTZjMDRmM2VmYzgyYWFlZGM5N2JlNTlmM2YzNzdjMGQ0MSIsIGNvbnNvbGUubG9nKQp3ZWIzLmV0aC5nZXRTdG9yYWdlQXQoIjB4NTM0RTRDZTBmZkY3Nzk1MTM3OTNjZmQ3MDMwOEFGMTk1ODI3QkQzMSIsICIweGY2NTIyMjIzMTNlMjg0NTk1MjhkOTIwYjY1MTE1YzE2YzA0ZjNlZmM4MmFhZWRjOTdiZTU5ZjNmMzc3YzBkNDIiLCBjb25zb2xlLmxvZykKCnNsb3QgNyAtIGVtcHR5CmdldE1hcExvY2F0aW9uKDcsIDEpCndlYjMudXRpbHMubnVtYmVyVG9IZXgoIjgxMjIyMTkxOTg2MjI2ODA5MTAzMjc5MTE5OTk0NzA3ODY4MzIyODU1NzQxODE5OTA1OTA0NDE3OTUzMDkyNjY2Njk5MDk2OTYzMTEyIikKTm90ZTogV2UgY2FuIGFsc28gdXNlIHdlYjMgdG8gZ2V0IGRhdGEgbG9jYXRpb24Kd2ViMy51dGlscy5zb2xpZGl0eVNoYTMoeyB0eXBlOiAidWludCIsIHZhbHVlOiAxIH0sIHt0eXBlOiAidWludCIsIHZhbHVlOiA3fSkKdXNlciAxCndlYjMuZXRoLmdldFN0b3JhZ2VBdCgiMHg1MzRFNENlMGZmRjc3OTUxMzc5M2NmZDcwMzA4QUYxOTU4MjdCRDMxIiwgIjB4YjM5MjIxYWNlMDUzNDY1ZWMzNDUzY2UyYjM2NDMwYmQxMzhiOTk3ZWNlYTI1YzEwNDNkYTBjMzY2ODEyYjgyOCIsIGNvbnNvbGUubG9nKQp3ZWIzLmV0aC5nZXRTdG9yYWdlQXQoIjB4NTM0RTRDZTBmZkY3Nzk1MTM3OTNjZmQ3MDMwOEFGMTk1ODI3QkQzMSIsICIweGIzOTIyMWFjZTA1MzQ2NWVjMzQ1M2NlMmIzNjQzMGJkMTM4Yjk5N2VjZWEyNWMxMDQzZGEwYzM2NjgxMmI4MjkiLCBjb25zb2xlLmxvZykKKi8K"}],sW=`

Vulnerability

All data on a smart contract can be read.

Let's see how we can read private data. In the process you will learn how Solidity stores state variables.

// SPDX-License-Identifier: MIT
@@ -9761,7 +9761,7 @@ web3.eth.getStorageAt("0x534E4Ce0ffF779513793cfd70308AF195827BD31", "0xb39221ace
 
  • Don't store sensitive information on the blockchain.
-`,aW=({prev:s,next:a})=>r.jsx(A,{version:_Z,title:OZ,description:PZ,cyfrinLink:$Z,html:sW,prev:s,next:a,codes:qZ}),nW="0.8.26",lW="Block Timestamp Manipulation",pW="An example of a Solidity contract vulnerable to block timestamp manipulation",eW="",cW=[{fileName:"BlockTimestamp.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNjsKCi8qClJvdWxldHRlIGlzIGEgZ2FtZSB3aGVyZSB5b3UgY2FuIHdpbiBhbGwgb2YgdGhlIEV0aGVyIGluIHRoZSBjb250cmFjdAppZiB5b3UgY2FuIHN1Ym1pdCBhIHRyYW5zYWN0aW9uIGF0IGEgc3BlY2lmaWMgdGltaW5nLgpBIHBsYXllciBuZWVkcyB0byBzZW5kIDEwIEV0aGVyIGFuZCB3aW5zIGlmIHRoZSBibG9jay50aW1lc3RhbXAgJSAxNSA9PSAwLgoqLwoKLyoKMS4gRGVwbG95IFJvdWxldHRlIHdpdGggMTAgRXRoZXIKMi4gRXZlIHJ1bnMgYSBwb3dlcmZ1bCBtaW5lciB0aGF0IGNhbiBtYW5pcHVsYXRlIHRoZSBibG9jayB0aW1lc3RhbXAuCjMuIEV2ZSBzZXRzIHRoZSBibG9jay50aW1lc3RhbXAgdG8gYSBudW1iZXIgaW4gdGhlIGZ1dHVyZSB0aGF0IGlzIGRpdmlzaWJsZSBieQogICAxNSBhbmQgZmluZHMgdGhlIHRhcmdldCBibG9jayBoYXNoLgo0LiBFdmUncyBibG9jayBpcyBzdWNjZXNzZnVsbHkgaW5jbHVkZWQgaW50byB0aGUgY2hhaW4sIEV2ZSB3aW5zIHRoZQogICBSb3VsZXR0ZSBnYW1lLgoqLwoKY29udHJhY3QgUm91bGV0dGUgewogICAgdWludDI1NiBwdWJsaWMgcGFzdEJsb2NrVGltZTsKCiAgICBjb25zdHJ1Y3RvcigpIHBheWFibGUge30KCiAgICBmdW5jdGlvbiBzcGluKCkgZXh0ZXJuYWwgcGF5YWJsZSB7CiAgICAgICAgcmVxdWlyZShtc2cudmFsdWUgPT0gMTAgZXRoZXIpOyAvLyBtdXN0IHNlbmQgMTAgZXRoZXIgdG8gcGxheQogICAgICAgIHJlcXVpcmUoYmxvY2sudGltZXN0YW1wICE9IHBhc3RCbG9ja1RpbWUpOyAvLyBvbmx5IDEgdHJhbnNhY3Rpb24gcGVyIGJsb2NrCgogICAgICAgIHBhc3RCbG9ja1RpbWUgPSBibG9jay50aW1lc3RhbXA7CgogICAgICAgIGlmIChibG9jay50aW1lc3RhbXAgJSAxNSA9PSAwKSB7CiAgICAgICAgICAgIChib29sIHNlbnQsKSA9IG1zZy5zZW5kZXIuY2FsbHt2YWx1ZTogYWRkcmVzcyh0aGlzKS5iYWxhbmNlfSgiIik7CiAgICAgICAgICAgIHJlcXVpcmUoc2VudCwgIkZhaWxlZCB0byBzZW5kIEV0aGVyIik7CiAgICAgICAgfQogICAgfQp9Cg=="}],tW=`

Vulnerability

+`,aW=({prev:s,next:a})=>r.jsx(A,{version:_Z,title:OZ,description:PZ,cyfrinLink:$Z,html:sW,prev:s,next:a,codes:qZ}),nW="0.8.26",lW="Block Timestamp Manipulation",pW="An example of a Solidity contract vulnerable to block timestamp manipulation",eW="https://solidity-by-example.org/hacks/block-timestamp-manipulation/",cW=[{fileName:"BlockTimestamp.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNjsKCi8qClJvdWxldHRlIGlzIGEgZ2FtZSB3aGVyZSB5b3UgY2FuIHdpbiBhbGwgb2YgdGhlIEV0aGVyIGluIHRoZSBjb250cmFjdAppZiB5b3UgY2FuIHN1Ym1pdCBhIHRyYW5zYWN0aW9uIGF0IGEgc3BlY2lmaWMgdGltaW5nLgpBIHBsYXllciBuZWVkcyB0byBzZW5kIDEwIEV0aGVyIGFuZCB3aW5zIGlmIHRoZSBibG9jay50aW1lc3RhbXAgJSAxNSA9PSAwLgoqLwoKLyoKMS4gRGVwbG95IFJvdWxldHRlIHdpdGggMTAgRXRoZXIKMi4gRXZlIHJ1bnMgYSBwb3dlcmZ1bCBtaW5lciB0aGF0IGNhbiBtYW5pcHVsYXRlIHRoZSBibG9jayB0aW1lc3RhbXAuCjMuIEV2ZSBzZXRzIHRoZSBibG9jay50aW1lc3RhbXAgdG8gYSBudW1iZXIgaW4gdGhlIGZ1dHVyZSB0aGF0IGlzIGRpdmlzaWJsZSBieQogICAxNSBhbmQgZmluZHMgdGhlIHRhcmdldCBibG9jayBoYXNoLgo0LiBFdmUncyBibG9jayBpcyBzdWNjZXNzZnVsbHkgaW5jbHVkZWQgaW50byB0aGUgY2hhaW4sIEV2ZSB3aW5zIHRoZQogICBSb3VsZXR0ZSBnYW1lLgoqLwoKY29udHJhY3QgUm91bGV0dGUgewogICAgdWludDI1NiBwdWJsaWMgcGFzdEJsb2NrVGltZTsKCiAgICBjb25zdHJ1Y3RvcigpIHBheWFibGUge30KCiAgICBmdW5jdGlvbiBzcGluKCkgZXh0ZXJuYWwgcGF5YWJsZSB7CiAgICAgICAgcmVxdWlyZShtc2cudmFsdWUgPT0gMTAgZXRoZXIpOyAvLyBtdXN0IHNlbmQgMTAgZXRoZXIgdG8gcGxheQogICAgICAgIHJlcXVpcmUoYmxvY2sudGltZXN0YW1wICE9IHBhc3RCbG9ja1RpbWUpOyAvLyBvbmx5IDEgdHJhbnNhY3Rpb24gcGVyIGJsb2NrCgogICAgICAgIHBhc3RCbG9ja1RpbWUgPSBibG9jay50aW1lc3RhbXA7CgogICAgICAgIGlmIChibG9jay50aW1lc3RhbXAgJSAxNSA9PSAwKSB7CiAgICAgICAgICAgIChib29sIHNlbnQsKSA9IG1zZy5zZW5kZXIuY2FsbHt2YWx1ZTogYWRkcmVzcyh0aGlzKS5iYWxhbmNlfSgiIik7CiAgICAgICAgICAgIHJlcXVpcmUoc2VudCwgIkZhaWxlZCB0byBzZW5kIEV0aGVyIik7CiAgICAgICAgfQogICAgfQp9Cg=="}],tW=`

Vulnerability

block.timestamp can be manipulated by miners with the following constraints

`,CW=({prev:s,next:a})=>r.jsx(A,{version:rW,title:iW,description:gW,cyfrinLink:hW,html:dW,prev:s,next:a,codes:IW}),jW="0.8.26",AW="Delegatecall",uW="An example of exploits using delegatecall in Solidity",yW="https://solidity-by-example.org/hacks/delegatecall/",mW=[{fileName:"Delegatecall_1.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNjsKCi8qCkhhY2tNZSBpcyBhIGNvbnRyYWN0IHRoYXQgdXNlcyBkZWxlZ2F0ZWNhbGwgdG8gZXhlY3V0ZSBjb2RlLgpJdCBpcyBub3Qgb2J2aW91cyB0aGF0IHRoZSBvd25lciBvZiBIYWNrTWUgY2FuIGJlIGNoYW5nZWQgc2luY2UgdGhlcmUgaXMgbm8KZnVuY3Rpb24gaW5zaWRlIEhhY2tNZSB0byBkbyBzby4gSG93ZXZlciBhbiBhdHRhY2tlciBjYW4gaGlqYWNrIHRoZQpjb250cmFjdCBieSBleHBsb2l0aW5nIGRlbGVnYXRlY2FsbC4gTGV0J3Mgc2VlIGhvdy4KCjEuIEFsaWNlIGRlcGxveXMgTGliCjIuIEFsaWNlIGRlcGxveXMgSGFja01lIHdpdGggYWRkcmVzcyBvZiBMaWIKMy4gRXZlIGRlcGxveXMgQXR0YWNrIHdpdGggYWRkcmVzcyBvZiBIYWNrTWUKNC4gRXZlIGNhbGxzIEF0dGFjay5hdHRhY2soKQo1LiBBdHRhY2sgaXMgbm93IHRoZSBvd25lciBvZiBIYWNrTWUKCldoYXQgaGFwcGVuZWQ/CkV2ZSBjYWxsZWQgQXR0YWNrLmF0dGFjaygpLgpBdHRhY2sgY2FsbGVkIHRoZSBmYWxsYmFjayBmdW5jdGlvbiBvZiBIYWNrTWUgc2VuZGluZyB0aGUgZnVuY3Rpb24Kc2VsZWN0b3Igb2YgcHduKCkuIEhhY2tNZSBmb3J3YXJkcyB0aGUgY2FsbCB0byBMaWIgdXNpbmcgZGVsZWdhdGVjYWxsLgpIZXJlIG1zZy5kYXRhIGNvbnRhaW5zIHRoZSBmdW5jdGlvbiBzZWxlY3RvciBvZiBwd24oKS4KVGhpcyB0ZWxscyBTb2xpZGl0eSB0byBjYWxsIHRoZSBmdW5jdGlvbiBwd24oKSBpbnNpZGUgTGliLgpUaGUgZnVuY3Rpb24gcHduKCkgdXBkYXRlcyB0aGUgb3duZXIgdG8gbXNnLnNlbmRlci4KRGVsZWdhdGVjYWxsIHJ1bnMgdGhlIGNvZGUgb2YgTGliIHVzaW5nIHRoZSBjb250ZXh0IG9mIEhhY2tNZS4KVGhlcmVmb3JlIEhhY2tNZSdzIHN0b3JhZ2Ugd2FzIHVwZGF0ZWQgdG8gbXNnLnNlbmRlciB3aGVyZSBtc2cuc2VuZGVyIGlzIHRoZQpjYWxsZXIgb2YgSGFja01lLCBpbiB0aGlzIGNhc2UgQXR0YWNrLgoqLwoKY29udHJhY3QgTGliIHsKICAgIGFkZHJlc3MgcHVibGljIG93bmVyOwoKICAgIGZ1bmN0aW9uIHB3bigpIHB1YmxpYyB7CiAgICAgICAgb3duZXIgPSBtc2cuc2VuZGVyOwogICAgfQp9Cgpjb250cmFjdCBIYWNrTWUgewogICAgYWRkcmVzcyBwdWJsaWMgb3duZXI7CiAgICBMaWIgcHVibGljIGxpYjsKCiAgICBjb25zdHJ1Y3RvcihMaWIgX2xpYikgewogICAgICAgIG93bmVyID0gbXNnLnNlbmRlcjsKICAgICAgICBsaWIgPSBMaWIoX2xpYik7CiAgICB9CgogICAgZmFsbGJhY2soKSBleHRlcm5hbCBwYXlhYmxlIHsKICAgICAgICBhZGRyZXNzKGxpYikuZGVsZWdhdGVjYWxsKG1zZy5kYXRhKTsKICAgIH0KfQoKY29udHJhY3QgQXR0YWNrIHsKICAgIGFkZHJlc3MgcHVibGljIGhhY2tNZTsKCiAgICBjb25zdHJ1Y3RvcihhZGRyZXNzIF9oYWNrTWUpIHsKICAgICAgICBoYWNrTWUgPSBfaGFja01lOwogICAgfQoKICAgIGZ1bmN0aW9uIGF0dGFjaygpIHB1YmxpYyB7CiAgICAgICAgaGFja01lLmNhbGwoYWJpLmVuY29kZVdpdGhTaWduYXR1cmUoInB3bigpIikpOwogICAgfQp9Cg=="},{fileName:"Delegatecall_2.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNjsKCi8qClRoaXMgaXMgYSBtb3JlIHNvcGhpc3RpY2F0ZWQgdmVyc2lvbiBvZiB0aGUgcHJldmlvdXMgZXhwbG9pdC4KCjEuIEFsaWNlIGRlcGxveXMgTGliIGFuZCBIYWNrTWUgd2l0aCB0aGUgYWRkcmVzcyBvZiBMaWIKMi4gRXZlIGRlcGxveXMgQXR0YWNrIHdpdGggdGhlIGFkZHJlc3Mgb2YgSGFja01lCjMuIEV2ZSBjYWxscyBBdHRhY2suYXR0YWNrKCkKNC4gQXR0YWNrIGlzIG5vdyB0aGUgb3duZXIgb2YgSGFja01lCgpXaGF0IGhhcHBlbmVkPwpOb3RpY2UgdGhhdCB0aGUgc3RhdGUgdmFyaWFibGVzIGFyZSBub3QgZGVmaW5lZCBpbiB0aGUgc2FtZSBtYW5uZXIgaW4gTGliCmFuZCBIYWNrTWUuIFRoaXMgbWVhbnMgdGhhdCBjYWxsaW5nIExpYi5kb1NvbWV0aGluZygpIHdpbGwgY2hhbmdlIHRoZSBmaXJzdApzdGF0ZSB2YXJpYWJsZSBpbnNpZGUgSGFja01lLCB3aGljaCBoYXBwZW5zIHRvIGJlIHRoZSBhZGRyZXNzIG9mIGxpYi4KCkluc2lkZSBhdHRhY2soKSwgdGhlIGZpcnN0IGNhbGwgdG8gZG9Tb21ldGhpbmcoKSBjaGFuZ2VzIHRoZSBhZGRyZXNzIG9mIGxpYgpzdG9yZSBpbiBIYWNrTWUuIEFkZHJlc3Mgb2YgbGliIGlzIG5vdyBzZXQgdG8gQXR0YWNrLgpUaGUgc2Vjb25kIGNhbGwgdG8gZG9Tb21ldGhpbmcoKSBjYWxscyBBdHRhY2suZG9Tb21ldGhpbmcoKSBhbmQgaGVyZSB3ZQpjaGFuZ2UgdGhlIG93bmVyLgoqLwoKY29udHJhY3QgTGliIHsKICAgIHVpbnQyNTYgcHVibGljIHNvbWVOdW1iZXI7CgogICAgZnVuY3Rpb24gZG9Tb21ldGhpbmcodWludDI1NiBfbnVtKSBwdWJsaWMgewogICAgICAgIHNvbWVOdW1iZXIgPSBfbnVtOwogICAgfQp9Cgpjb250cmFjdCBIYWNrTWUgewogICAgYWRkcmVzcyBwdWJsaWMgbGliOwogICAgYWRkcmVzcyBwdWJsaWMgb3duZXI7CiAgICB1aW50MjU2IHB1YmxpYyBzb21lTnVtYmVyOwoKICAgIGNvbnN0cnVjdG9yKGFkZHJlc3MgX2xpYikgewogICAgICAgIGxpYiA9IF9saWI7CiAgICAgICAgb3duZXIgPSBtc2cuc2VuZGVyOwogICAgfQoKICAgIGZ1bmN0aW9uIGRvU29tZXRoaW5nKHVpbnQyNTYgX251bSkgcHVibGljIHsKICAgICAgICBsaWIuZGVsZWdhdGVjYWxsKGFiaS5lbmNvZGVXaXRoU2lnbmF0dXJlKCJkb1NvbWV0aGluZyh1aW50MjU2KSIsIF9udW0pKTsKICAgIH0KfQoKY29udHJhY3QgQXR0YWNrIHsKICAgIC8vIE1ha2Ugc3VyZSB0aGUgc3RvcmFnZSBsYXlvdXQgaXMgdGhlIHNhbWUgYXMgSGFja01lCiAgICAvLyBUaGlzIHdpbGwgYWxsb3cgdXMgdG8gY29ycmVjdGx5IHVwZGF0ZSB0aGUgc3RhdGUgdmFyaWFibGVzCiAgICBhZGRyZXNzIHB1YmxpYyBsaWI7CiAgICBhZGRyZXNzIHB1YmxpYyBvd25lcjsKICAgIHVpbnQyNTYgcHVibGljIHNvbWVOdW1iZXI7CgogICAgSGFja01lIHB1YmxpYyBoYWNrTWU7CgogICAgY29uc3RydWN0b3IoSGFja01lIF9oYWNrTWUpIHsKICAgICAgICBoYWNrTWUgPSBIYWNrTWUoX2hhY2tNZSk7CiAgICB9CgogICAgZnVuY3Rpb24gYXR0YWNrKCkgcHVibGljIHsKICAgICAgICAvLyBvdmVycmlkZSBhZGRyZXNzIG9mIGxpYgogICAgICAgIGhhY2tNZS5kb1NvbWV0aGluZyh1aW50MjU2KHVpbnQxNjAoYWRkcmVzcyh0aGlzKSkpKTsKICAgICAgICAvLyBwYXNzIGFueSBudW1iZXIgYXMgaW5wdXQsIHRoZSBmdW5jdGlvbiBkb1NvbWV0aGluZygpIGJlbG93IHdpbGwKICAgICAgICAvLyBiZSBjYWxsZWQKICAgICAgICBoYWNrTWUuZG9Tb21ldGhpbmcoMSk7CiAgICB9CgogICAgLy8gZnVuY3Rpb24gc2lnbmF0dXJlIG11c3QgbWF0Y2ggSGFja01lLmRvU29tZXRoaW5nKCkKICAgIGZ1bmN0aW9uIGRvU29tZXRoaW5nKHVpbnQyNTYgX251bSkgcHVibGljIHsKICAgICAgICBvd25lciA9IG1zZy5zZW5kZXI7CiAgICB9Cn0K"}],bW=`

Vulnerability

delegatecall is tricky to use and wrong usage or incorrect understanding can lead to devastating results.

You must keep 2 things in mind when using delegatecall

@@ -10000,7 +10000,7 @@ change the owner. -`,wW=({prev:s,next:a})=>r.jsx(A,{version:jW,title:AW,description:uW,cyfrinLink:yW,html:bW,prev:s,next:a,codes:mW}),kW="0.8.26",ZW="Denial of Service",WW="An example of denial of service hack in Solidity",GW="",BW=[{fileName:"DenialOfService.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNjsKCi8qClRoZSBnb2FsIG9mIEtpbmdPZkV0aGVyIGlzIHRvIGJlY29tZSB0aGUga2luZyBieSBzZW5kaW5nIG1vcmUgRXRoZXIgdGhhbgp0aGUgcHJldmlvdXMga2luZy4gUHJldmlvdXMga2luZyB3aWxsIGJlIHJlZnVuZGVkIHdpdGggdGhlIGFtb3VudCBvZiBFdGhlcgpoZSBzZW50LgoqLwoKLyoKMS4gRGVwbG95IEtpbmdPZkV0aGVyCjIuIEFsaWNlIGJlY29tZXMgdGhlIGtpbmcgYnkgc2VuZGluZyAxIEV0aGVyIHRvIGNsYWltVGhyb25lKCkuCjIuIEJvYiBiZWNvbWVzIHRoZSBraW5nIGJ5IHNlbmRpbmcgMiBFdGhlciB0byBjbGFpbVRocm9uZSgpLgogICBBbGljZSByZWNlaXZlcyBhIHJlZnVuZCBvZiAxIEV0aGVyLgozLiBEZXBsb3kgQXR0YWNrIHdpdGggYWRkcmVzcyBvZiBLaW5nT2ZFdGhlci4KNC4gQ2FsbCBhdHRhY2sgd2l0aCAzIEV0aGVyLgo1LiBDdXJyZW50IGtpbmcgaXMgdGhlIEF0dGFjayBjb250cmFjdCBhbmQgbm8gb25lIGNhbiBiZWNvbWUgdGhlIG5ldyBraW5nLgoKV2hhdCBoYXBwZW5lZD8KQXR0YWNrIGJlY2FtZSB0aGUga2luZy4gQWxsIG5ldyBjaGFsbGVuZ2UgdG8gY2xhaW0gdGhlIHRocm9uZSB3aWxsIGJlIHJlamVjdGVkCnNpbmNlIEF0dGFjayBjb250cmFjdCBkb2VzIG5vdCBoYXZlIGEgZmFsbGJhY2sgZnVuY3Rpb24sIGRlbnlpbmcgdG8gYWNjZXB0IHRoZQpFdGhlciBzZW50IGZyb20gS2luZ09mRXRoZXIgYmVmb3JlIHRoZSBuZXcga2luZyBpcyBzZXQuCiovCgpjb250cmFjdCBLaW5nT2ZFdGhlciB7CiAgICBhZGRyZXNzIHB1YmxpYyBraW5nOwogICAgdWludDI1NiBwdWJsaWMgYmFsYW5jZTsKCiAgICBmdW5jdGlvbiBjbGFpbVRocm9uZSgpIGV4dGVybmFsIHBheWFibGUgewogICAgICAgIHJlcXVpcmUobXNnLnZhbHVlID4gYmFsYW5jZSwgIk5lZWQgdG8gcGF5IG1vcmUgdG8gYmVjb21lIHRoZSBraW5nIik7CgogICAgICAgIChib29sIHNlbnQsKSA9IGtpbmcuY2FsbHt2YWx1ZTogYmFsYW5jZX0oIiIpOwogICAgICAgIHJlcXVpcmUoc2VudCwgIkZhaWxlZCB0byBzZW5kIEV0aGVyIik7CgogICAgICAgIGJhbGFuY2UgPSBtc2cudmFsdWU7CiAgICAgICAga2luZyA9IG1zZy5zZW5kZXI7CiAgICB9Cn0KCmNvbnRyYWN0IEF0dGFjayB7CiAgICBLaW5nT2ZFdGhlciBraW5nT2ZFdGhlcjsKCiAgICBjb25zdHJ1Y3RvcihLaW5nT2ZFdGhlciBfa2luZ09mRXRoZXIpIHsKICAgICAgICBraW5nT2ZFdGhlciA9IEtpbmdPZkV0aGVyKF9raW5nT2ZFdGhlcik7CiAgICB9CgogICAgLy8gWW91IGNhbiBhbHNvIHBlcmZvcm0gYSBET1MgYnkgY29uc3VtaW5nIGFsbCBnYXMgdXNpbmcgYXNzZXJ0LgogICAgLy8gVGhpcyBhdHRhY2sgd2lsbCB3b3JrIGV2ZW4gaWYgdGhlIGNhbGxpbmcgY29udHJhY3QgZG9lcyBub3QgY2hlY2sKICAgIC8vIHdoZXRoZXIgdGhlIGNhbGwgd2FzIHN1Y2Nlc3NmdWwgb3Igbm90LgogICAgLy8KICAgIC8vIGZ1bmN0aW9uICgpIGV4dGVybmFsIHBheWFibGUgewogICAgLy8gICAgIGFzc2VydChmYWxzZSk7CiAgICAvLyB9CgogICAgZnVuY3Rpb24gYXR0YWNrKCkgcHVibGljIHBheWFibGUgewogICAgICAgIGtpbmdPZkV0aGVyLmNsYWltVGhyb25le3ZhbHVlOiBtc2cudmFsdWV9KCk7CiAgICB9Cn0K"},{fileName:"PreventDenialOfService.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNjsKCmNvbnRyYWN0IEtpbmdPZkV0aGVyIHsKICAgIGFkZHJlc3MgcHVibGljIGtpbmc7CiAgICB1aW50MjU2IHB1YmxpYyBiYWxhbmNlOwogICAgbWFwcGluZyhhZGRyZXNzID0+IHVpbnQyNTYpIHB1YmxpYyBiYWxhbmNlczsKCiAgICBmdW5jdGlvbiBjbGFpbVRocm9uZSgpIGV4dGVybmFsIHBheWFibGUgewogICAgICAgIHJlcXVpcmUobXNnLnZhbHVlID4gYmFsYW5jZSwgIk5lZWQgdG8gcGF5IG1vcmUgdG8gYmVjb21lIHRoZSBraW5nIik7CgogICAgICAgIGJhbGFuY2VzW2tpbmddICs9IGJhbGFuY2U7CgogICAgICAgIGJhbGFuY2UgPSBtc2cudmFsdWU7CiAgICAgICAga2luZyA9IG1zZy5zZW5kZXI7CiAgICB9CgogICAgZnVuY3Rpb24gd2l0aGRyYXcoKSBwdWJsaWMgewogICAgICAgIHJlcXVpcmUobXNnLnNlbmRlciAhPSBraW5nLCAiQ3VycmVudCBraW5nIGNhbm5vdCB3aXRoZHJhdyIpOwoKICAgICAgICB1aW50MjU2IGFtb3VudCA9IGJhbGFuY2VzW21zZy5zZW5kZXJdOwogICAgICAgIGJhbGFuY2VzW21zZy5zZW5kZXJdID0gMDsKCiAgICAgICAgKGJvb2wgc2VudCwpID0gbXNnLnNlbmRlci5jYWxse3ZhbHVlOiBhbW91bnR9KCIiKTsKICAgICAgICByZXF1aXJlKHNlbnQsICJGYWlsZWQgdG8gc2VuZCBFdGhlciIpOwogICAgfQp9Cg=="}],fW=`

Vulnerability

+`,wW=({prev:s,next:a})=>r.jsx(A,{version:jW,title:AW,description:uW,cyfrinLink:yW,html:bW,prev:s,next:a,codes:mW}),kW="0.8.26",ZW="Denial of Service",WW="An example of denial of service hack in Solidity",GW="https://solidity-by-example.org/hacks/denial-of-service/",BW=[{fileName:"DenialOfService.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNjsKCi8qClRoZSBnb2FsIG9mIEtpbmdPZkV0aGVyIGlzIHRvIGJlY29tZSB0aGUga2luZyBieSBzZW5kaW5nIG1vcmUgRXRoZXIgdGhhbgp0aGUgcHJldmlvdXMga2luZy4gUHJldmlvdXMga2luZyB3aWxsIGJlIHJlZnVuZGVkIHdpdGggdGhlIGFtb3VudCBvZiBFdGhlcgpoZSBzZW50LgoqLwoKLyoKMS4gRGVwbG95IEtpbmdPZkV0aGVyCjIuIEFsaWNlIGJlY29tZXMgdGhlIGtpbmcgYnkgc2VuZGluZyAxIEV0aGVyIHRvIGNsYWltVGhyb25lKCkuCjIuIEJvYiBiZWNvbWVzIHRoZSBraW5nIGJ5IHNlbmRpbmcgMiBFdGhlciB0byBjbGFpbVRocm9uZSgpLgogICBBbGljZSByZWNlaXZlcyBhIHJlZnVuZCBvZiAxIEV0aGVyLgozLiBEZXBsb3kgQXR0YWNrIHdpdGggYWRkcmVzcyBvZiBLaW5nT2ZFdGhlci4KNC4gQ2FsbCBhdHRhY2sgd2l0aCAzIEV0aGVyLgo1LiBDdXJyZW50IGtpbmcgaXMgdGhlIEF0dGFjayBjb250cmFjdCBhbmQgbm8gb25lIGNhbiBiZWNvbWUgdGhlIG5ldyBraW5nLgoKV2hhdCBoYXBwZW5lZD8KQXR0YWNrIGJlY2FtZSB0aGUga2luZy4gQWxsIG5ldyBjaGFsbGVuZ2UgdG8gY2xhaW0gdGhlIHRocm9uZSB3aWxsIGJlIHJlamVjdGVkCnNpbmNlIEF0dGFjayBjb250cmFjdCBkb2VzIG5vdCBoYXZlIGEgZmFsbGJhY2sgZnVuY3Rpb24sIGRlbnlpbmcgdG8gYWNjZXB0IHRoZQpFdGhlciBzZW50IGZyb20gS2luZ09mRXRoZXIgYmVmb3JlIHRoZSBuZXcga2luZyBpcyBzZXQuCiovCgpjb250cmFjdCBLaW5nT2ZFdGhlciB7CiAgICBhZGRyZXNzIHB1YmxpYyBraW5nOwogICAgdWludDI1NiBwdWJsaWMgYmFsYW5jZTsKCiAgICBmdW5jdGlvbiBjbGFpbVRocm9uZSgpIGV4dGVybmFsIHBheWFibGUgewogICAgICAgIHJlcXVpcmUobXNnLnZhbHVlID4gYmFsYW5jZSwgIk5lZWQgdG8gcGF5IG1vcmUgdG8gYmVjb21lIHRoZSBraW5nIik7CgogICAgICAgIChib29sIHNlbnQsKSA9IGtpbmcuY2FsbHt2YWx1ZTogYmFsYW5jZX0oIiIpOwogICAgICAgIHJlcXVpcmUoc2VudCwgIkZhaWxlZCB0byBzZW5kIEV0aGVyIik7CgogICAgICAgIGJhbGFuY2UgPSBtc2cudmFsdWU7CiAgICAgICAga2luZyA9IG1zZy5zZW5kZXI7CiAgICB9Cn0KCmNvbnRyYWN0IEF0dGFjayB7CiAgICBLaW5nT2ZFdGhlciBraW5nT2ZFdGhlcjsKCiAgICBjb25zdHJ1Y3RvcihLaW5nT2ZFdGhlciBfa2luZ09mRXRoZXIpIHsKICAgICAgICBraW5nT2ZFdGhlciA9IEtpbmdPZkV0aGVyKF9raW5nT2ZFdGhlcik7CiAgICB9CgogICAgLy8gWW91IGNhbiBhbHNvIHBlcmZvcm0gYSBET1MgYnkgY29uc3VtaW5nIGFsbCBnYXMgdXNpbmcgYXNzZXJ0LgogICAgLy8gVGhpcyBhdHRhY2sgd2lsbCB3b3JrIGV2ZW4gaWYgdGhlIGNhbGxpbmcgY29udHJhY3QgZG9lcyBub3QgY2hlY2sKICAgIC8vIHdoZXRoZXIgdGhlIGNhbGwgd2FzIHN1Y2Nlc3NmdWwgb3Igbm90LgogICAgLy8KICAgIC8vIGZ1bmN0aW9uICgpIGV4dGVybmFsIHBheWFibGUgewogICAgLy8gICAgIGFzc2VydChmYWxzZSk7CiAgICAvLyB9CgogICAgZnVuY3Rpb24gYXR0YWNrKCkgcHVibGljIHBheWFibGUgewogICAgICAgIGtpbmdPZkV0aGVyLmNsYWltVGhyb25le3ZhbHVlOiBtc2cudmFsdWV9KCk7CiAgICB9Cn0K"},{fileName:"PreventDenialOfService.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNjsKCmNvbnRyYWN0IEtpbmdPZkV0aGVyIHsKICAgIGFkZHJlc3MgcHVibGljIGtpbmc7CiAgICB1aW50MjU2IHB1YmxpYyBiYWxhbmNlOwogICAgbWFwcGluZyhhZGRyZXNzID0+IHVpbnQyNTYpIHB1YmxpYyBiYWxhbmNlczsKCiAgICBmdW5jdGlvbiBjbGFpbVRocm9uZSgpIGV4dGVybmFsIHBheWFibGUgewogICAgICAgIHJlcXVpcmUobXNnLnZhbHVlID4gYmFsYW5jZSwgIk5lZWQgdG8gcGF5IG1vcmUgdG8gYmVjb21lIHRoZSBraW5nIik7CgogICAgICAgIGJhbGFuY2VzW2tpbmddICs9IGJhbGFuY2U7CgogICAgICAgIGJhbGFuY2UgPSBtc2cudmFsdWU7CiAgICAgICAga2luZyA9IG1zZy5zZW5kZXI7CiAgICB9CgogICAgZnVuY3Rpb24gd2l0aGRyYXcoKSBwdWJsaWMgewogICAgICAgIHJlcXVpcmUobXNnLnNlbmRlciAhPSBraW5nLCAiQ3VycmVudCBraW5nIGNhbm5vdCB3aXRoZHJhdyIpOwoKICAgICAgICB1aW50MjU2IGFtb3VudCA9IGJhbGFuY2VzW21zZy5zZW5kZXJdOwogICAgICAgIGJhbGFuY2VzW21zZy5zZW5kZXJdID0gMDsKCiAgICAgICAgKGJvb2wgc2VudCwpID0gbXNnLnNlbmRlci5jYWxse3ZhbHVlOiBhbW91bnR9KCIiKTsKICAgICAgICByZXF1aXJlKHNlbnQsICJGYWlsZWQgdG8gc2VuZCBFdGhlciIpOwogICAgfQp9Cg=="}],fW=`

Vulnerability

There are many ways to attack a smart contract to make it unusable.

One exploit we introduce here is denial of service by making the function to send Ether fail.

// SPDX-License-Identifier: MIT
@@ -10091,7 +10091,7 @@ Ether sent from KingOfEther before the new king is set.
         require(sent, "Failed to send Ether");
     }
 }
-
`,VW=({prev:s,next:a})=>r.jsx(A,{version:kW,title:ZW,description:WW,cyfrinLink:GW,html:fW,prev:s,next:a,codes:BW}),YW="0.8.26",RW="Deploy Different Contracts at the Same Address",XW="An example of a Solidity contract vulnerable to deploy different contracts at the same address",vW="",NW=[{fileName:"TornadoHack.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNjsKCi8qCkNhbGxlZCBieSBBbGljZQowLiBEZXBsb3kgREFPCgpDYWxsZWQgYnkgQXR0YWNrZXIKMS4gRGVwbG95IERlcGxveWVyRGVwbG95ZXIKMi4gQ2FsbCBEZXBsb3llckRlcGxveWVyLmRlcGxveSgpCjMuIENhbGwgRGVwbG95ZXIuZGVwbG95UHJvcG9zYWwoKQoKQ2FsbGVkIGJ5IEFsaWNlCjQuIEdldCBEQU8gYXBwcm92YWwgb2YgUHJvcG9zYWwKCkNhbGxlZCBieSBBdHRhY2tlcgo1LiBEZWxldGUgUHJvcG9zYWwgYW5kIERlcGxveWVyCjYuIFJlLWRlcGxveSBEZXBsb3llcgo3LiBDYWxsIERlcGxveWVyLmRlcGxveUF0dGFjaygpCjguIENhbGwgREFPLmV4ZWN1dGUKOS4gQ2hlY2sgREFPLm93bmVyIGlzIGF0dGFja2VyJ3MgYWRkcmVzcwoKREFPIC0tIGFwcHJvdmVkIC0tPiBQcm9wb3NhbApEZXBsb3llckRlcGxveWVyIC0tIGNyZWF0ZTIgLS0+IERlcGxveWVyIC0tIGNyZWF0ZSAtLT4gUHJvcG9zYWwKRGVwbG95ZXJEZXBsb3llciAtLSBjcmVhdGUyIC0tPiBEZXBsb3llciAtLSBjcmVhdGUgLS0+IEF0dGFjawoqLwoKY29udHJhY3QgREFPIHsKICAgIHN0cnVjdCBQcm9wb3NhbCB7CiAgICAgICAgYWRkcmVzcyB0YXJnZXQ7CiAgICAgICAgYm9vbCBhcHByb3ZlZDsKICAgICAgICBib29sIGV4ZWN1dGVkOwogICAgfQoKICAgIGFkZHJlc3MgcHVibGljIG93bmVyID0gbXNnLnNlbmRlcjsKICAgIFByb3Bvc2FsW10gcHVibGljIHByb3Bvc2FsczsKCiAgICBmdW5jdGlvbiBhcHByb3ZlKGFkZHJlc3MgdGFyZ2V0KSBleHRlcm5hbCB7CiAgICAgICAgcmVxdWlyZShtc2cuc2VuZGVyID09IG93bmVyLCAibm90IGF1dGhvcml6ZWQiKTsKCiAgICAgICAgcHJvcG9zYWxzLnB1c2goCiAgICAgICAgICAgIFByb3Bvc2FsKHt0YXJnZXQ6IHRhcmdldCwgYXBwcm92ZWQ6IHRydWUsIGV4ZWN1dGVkOiBmYWxzZX0pCiAgICAgICAgKTsKICAgIH0KCiAgICBmdW5jdGlvbiBleGVjdXRlKHVpbnQyNTYgcHJvcG9zYWxJZCkgZXh0ZXJuYWwgcGF5YWJsZSB7CiAgICAgICAgUHJvcG9zYWwgc3RvcmFnZSBwcm9wb3NhbCA9IHByb3Bvc2Fsc1twcm9wb3NhbElkXTsKICAgICAgICByZXF1aXJlKHByb3Bvc2FsLmFwcHJvdmVkLCAibm90IGFwcHJvdmVkIik7CiAgICAgICAgcmVxdWlyZSghcHJvcG9zYWwuZXhlY3V0ZWQsICJleGVjdXRlZCIpOwoKICAgICAgICBwcm9wb3NhbC5leGVjdXRlZCA9IHRydWU7CgogICAgICAgIChib29sIG9rLCkgPSBwcm9wb3NhbC50YXJnZXQuZGVsZWdhdGVjYWxsKAogICAgICAgICAgICBhYmkuZW5jb2RlV2l0aFNpZ25hdHVyZSgiZXhlY3V0ZVByb3Bvc2FsKCkiKQogICAgICAgICk7CiAgICAgICAgcmVxdWlyZShvaywgImRlbGVnYXRlY2FsbCBmYWlsZWQiKTsKICAgIH0KfQoKY29udHJhY3QgUHJvcG9zYWwgewogICAgZXZlbnQgTG9nKHN0cmluZyBtZXNzYWdlKTsKCiAgICBmdW5jdGlvbiBleGVjdXRlUHJvcG9zYWwoKSBleHRlcm5hbCB7CiAgICAgICAgZW1pdCBMb2coIkV4ZWN1dGVkIGNvZGUgYXBwcm92ZWQgYnkgREFPIik7CiAgICB9CgogICAgZnVuY3Rpb24gZW1lcmdlbmN5U3RvcCgpIGV4dGVybmFsIHsKICAgICAgICBzZWxmZGVzdHJ1Y3QocGF5YWJsZShhZGRyZXNzKDApKSk7CiAgICB9Cn0KCmNvbnRyYWN0IEF0dGFjayB7CiAgICBldmVudCBMb2coc3RyaW5nIG1lc3NhZ2UpOwoKICAgIGFkZHJlc3MgcHVibGljIG93bmVyOwoKICAgIGZ1bmN0aW9uIGV4ZWN1dGVQcm9wb3NhbCgpIGV4dGVybmFsIHsKICAgICAgICBlbWl0IExvZygiRXhlY3V0ZWQgY29kZSBub3QgYXBwcm92ZWQgYnkgREFPIDopIik7CiAgICAgICAgLy8gRm9yIGV4YW1wbGUgLSBzZXQgREFPJ3Mgb3duZXIgdG8gYXR0YWNrZXIKICAgICAgICBvd25lciA9IG1zZy5zZW5kZXI7CiAgICB9Cn0KCmNvbnRyYWN0IERlcGxveWVyRGVwbG95ZXIgewogICAgZXZlbnQgTG9nKGFkZHJlc3MgYWRkcik7CgogICAgZnVuY3Rpb24gZGVwbG95KCkgZXh0ZXJuYWwgewogICAgICAgIGJ5dGVzMzIgc2FsdCA9IGtlY2NhazI1NihhYmkuZW5jb2RlKHVpbnQyNTYoMTIzKSkpOwogICAgICAgIGFkZHJlc3MgYWRkciA9IGFkZHJlc3MobmV3IERlcGxveWVye3NhbHQ6IHNhbHR9KCkpOwogICAgICAgIGVtaXQgTG9nKGFkZHIpOwogICAgfQp9Cgpjb250cmFjdCBEZXBsb3llciB7CiAgICBldmVudCBMb2coYWRkcmVzcyBhZGRyKTsKCiAgICBmdW5jdGlvbiBkZXBsb3lQcm9wb3NhbCgpIGV4dGVybmFsIHsKICAgICAgICBhZGRyZXNzIGFkZHIgPSBhZGRyZXNzKG5ldyBQcm9wb3NhbCgpKTsKICAgICAgICBlbWl0IExvZyhhZGRyKTsKICAgIH0KCiAgICBmdW5jdGlvbiBkZXBsb3lBdHRhY2soKSBleHRlcm5hbCB7CiAgICAgICAgYWRkcmVzcyBhZGRyID0gYWRkcmVzcyhuZXcgQXR0YWNrKCkpOwogICAgICAgIGVtaXQgTG9nKGFkZHIpOwogICAgfQoKICAgIGZ1bmN0aW9uIGtpbGwoKSBleHRlcm5hbCB7CiAgICAgICAgc2VsZmRlc3RydWN0KHBheWFibGUoYWRkcmVzcygwKSkpOwogICAgfQp9Cg=="}],HW=`

Contract address deployed with create is computed in the following way.

+`,VW=({prev:s,next:a})=>r.jsx(A,{version:kW,title:ZW,description:WW,cyfrinLink:GW,html:fW,prev:s,next:a,codes:BW}),YW="0.8.26",RW="Deploy Different Contracts at the Same Address",XW="An example of a Solidity contract vulnerable to deploy different contracts at the same address",vW="https://solidity-by-example.org/hacks/deploy-different-contracts-same-address/",NW=[{fileName:"TornadoHack.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNjsKCi8qCkNhbGxlZCBieSBBbGljZQowLiBEZXBsb3kgREFPCgpDYWxsZWQgYnkgQXR0YWNrZXIKMS4gRGVwbG95IERlcGxveWVyRGVwbG95ZXIKMi4gQ2FsbCBEZXBsb3llckRlcGxveWVyLmRlcGxveSgpCjMuIENhbGwgRGVwbG95ZXIuZGVwbG95UHJvcG9zYWwoKQoKQ2FsbGVkIGJ5IEFsaWNlCjQuIEdldCBEQU8gYXBwcm92YWwgb2YgUHJvcG9zYWwKCkNhbGxlZCBieSBBdHRhY2tlcgo1LiBEZWxldGUgUHJvcG9zYWwgYW5kIERlcGxveWVyCjYuIFJlLWRlcGxveSBEZXBsb3llcgo3LiBDYWxsIERlcGxveWVyLmRlcGxveUF0dGFjaygpCjguIENhbGwgREFPLmV4ZWN1dGUKOS4gQ2hlY2sgREFPLm93bmVyIGlzIGF0dGFja2VyJ3MgYWRkcmVzcwoKREFPIC0tIGFwcHJvdmVkIC0tPiBQcm9wb3NhbApEZXBsb3llckRlcGxveWVyIC0tIGNyZWF0ZTIgLS0+IERlcGxveWVyIC0tIGNyZWF0ZSAtLT4gUHJvcG9zYWwKRGVwbG95ZXJEZXBsb3llciAtLSBjcmVhdGUyIC0tPiBEZXBsb3llciAtLSBjcmVhdGUgLS0+IEF0dGFjawoqLwoKY29udHJhY3QgREFPIHsKICAgIHN0cnVjdCBQcm9wb3NhbCB7CiAgICAgICAgYWRkcmVzcyB0YXJnZXQ7CiAgICAgICAgYm9vbCBhcHByb3ZlZDsKICAgICAgICBib29sIGV4ZWN1dGVkOwogICAgfQoKICAgIGFkZHJlc3MgcHVibGljIG93bmVyID0gbXNnLnNlbmRlcjsKICAgIFByb3Bvc2FsW10gcHVibGljIHByb3Bvc2FsczsKCiAgICBmdW5jdGlvbiBhcHByb3ZlKGFkZHJlc3MgdGFyZ2V0KSBleHRlcm5hbCB7CiAgICAgICAgcmVxdWlyZShtc2cuc2VuZGVyID09IG93bmVyLCAibm90IGF1dGhvcml6ZWQiKTsKCiAgICAgICAgcHJvcG9zYWxzLnB1c2goCiAgICAgICAgICAgIFByb3Bvc2FsKHt0YXJnZXQ6IHRhcmdldCwgYXBwcm92ZWQ6IHRydWUsIGV4ZWN1dGVkOiBmYWxzZX0pCiAgICAgICAgKTsKICAgIH0KCiAgICBmdW5jdGlvbiBleGVjdXRlKHVpbnQyNTYgcHJvcG9zYWxJZCkgZXh0ZXJuYWwgcGF5YWJsZSB7CiAgICAgICAgUHJvcG9zYWwgc3RvcmFnZSBwcm9wb3NhbCA9IHByb3Bvc2Fsc1twcm9wb3NhbElkXTsKICAgICAgICByZXF1aXJlKHByb3Bvc2FsLmFwcHJvdmVkLCAibm90IGFwcHJvdmVkIik7CiAgICAgICAgcmVxdWlyZSghcHJvcG9zYWwuZXhlY3V0ZWQsICJleGVjdXRlZCIpOwoKICAgICAgICBwcm9wb3NhbC5leGVjdXRlZCA9IHRydWU7CgogICAgICAgIChib29sIG9rLCkgPSBwcm9wb3NhbC50YXJnZXQuZGVsZWdhdGVjYWxsKAogICAgICAgICAgICBhYmkuZW5jb2RlV2l0aFNpZ25hdHVyZSgiZXhlY3V0ZVByb3Bvc2FsKCkiKQogICAgICAgICk7CiAgICAgICAgcmVxdWlyZShvaywgImRlbGVnYXRlY2FsbCBmYWlsZWQiKTsKICAgIH0KfQoKY29udHJhY3QgUHJvcG9zYWwgewogICAgZXZlbnQgTG9nKHN0cmluZyBtZXNzYWdlKTsKCiAgICBmdW5jdGlvbiBleGVjdXRlUHJvcG9zYWwoKSBleHRlcm5hbCB7CiAgICAgICAgZW1pdCBMb2coIkV4ZWN1dGVkIGNvZGUgYXBwcm92ZWQgYnkgREFPIik7CiAgICB9CgogICAgZnVuY3Rpb24gZW1lcmdlbmN5U3RvcCgpIGV4dGVybmFsIHsKICAgICAgICBzZWxmZGVzdHJ1Y3QocGF5YWJsZShhZGRyZXNzKDApKSk7CiAgICB9Cn0KCmNvbnRyYWN0IEF0dGFjayB7CiAgICBldmVudCBMb2coc3RyaW5nIG1lc3NhZ2UpOwoKICAgIGFkZHJlc3MgcHVibGljIG93bmVyOwoKICAgIGZ1bmN0aW9uIGV4ZWN1dGVQcm9wb3NhbCgpIGV4dGVybmFsIHsKICAgICAgICBlbWl0IExvZygiRXhlY3V0ZWQgY29kZSBub3QgYXBwcm92ZWQgYnkgREFPIDopIik7CiAgICAgICAgLy8gRm9yIGV4YW1wbGUgLSBzZXQgREFPJ3Mgb3duZXIgdG8gYXR0YWNrZXIKICAgICAgICBvd25lciA9IG1zZy5zZW5kZXI7CiAgICB9Cn0KCmNvbnRyYWN0IERlcGxveWVyRGVwbG95ZXIgewogICAgZXZlbnQgTG9nKGFkZHJlc3MgYWRkcik7CgogICAgZnVuY3Rpb24gZGVwbG95KCkgZXh0ZXJuYWwgewogICAgICAgIGJ5dGVzMzIgc2FsdCA9IGtlY2NhazI1NihhYmkuZW5jb2RlKHVpbnQyNTYoMTIzKSkpOwogICAgICAgIGFkZHJlc3MgYWRkciA9IGFkZHJlc3MobmV3IERlcGxveWVye3NhbHQ6IHNhbHR9KCkpOwogICAgICAgIGVtaXQgTG9nKGFkZHIpOwogICAgfQp9Cgpjb250cmFjdCBEZXBsb3llciB7CiAgICBldmVudCBMb2coYWRkcmVzcyBhZGRyKTsKCiAgICBmdW5jdGlvbiBkZXBsb3lQcm9wb3NhbCgpIGV4dGVybmFsIHsKICAgICAgICBhZGRyZXNzIGFkZHIgPSBhZGRyZXNzKG5ldyBQcm9wb3NhbCgpKTsKICAgICAgICBlbWl0IExvZyhhZGRyKTsKICAgIH0KCiAgICBmdW5jdGlvbiBkZXBsb3lBdHRhY2soKSBleHRlcm5hbCB7CiAgICAgICAgYWRkcmVzcyBhZGRyID0gYWRkcmVzcyhuZXcgQXR0YWNrKCkpOwogICAgICAgIGVtaXQgTG9nKGFkZHIpOwogICAgfQoKICAgIGZ1bmN0aW9uIGtpbGwoKSBleHRlcm5hbCB7CiAgICAgICAgc2VsZmRlc3RydWN0KHBheWFibGUoYWRkcmVzcygwKSkpOwogICAgfQp9Cg=="}],HW=`

Contract address deployed with create is computed in the following way.

contract address = last 20 bytes of sha3(rlp_encode(sender, nonce))
 

where sender is the address of the deployer and nonce is the number of transactions sent by sender.

Hence it is possible to deploy different contracts at the same address if we can somehow reset the nonce.

@@ -10206,7 +10206,7 @@ DeployerDeployer -- create2 --> Deployer -- create --> Attack selfdestruct(payable(address(0))); } } -`,KW=({prev:s,next:a})=>r.jsx(A,{version:YW,title:RW,description:XW,cyfrinLink:vW,html:HW,prev:s,next:a,codes:NW}),FW="0.8.26",MW="Front Running",SW="An example of a Solidity contract vulnerable to front running",xW="",JW=[{fileName:"FrontRunning.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNjsKCi8qCkFsaWNlIGNyZWF0ZXMgYSBndWVzc2luZyBnYW1lLgpZb3Ugd2luIDEwIGV0aGVyIGlmIHlvdSBjYW4gZmluZCB0aGUgY29ycmVjdCBzdHJpbmcgdGhhdCBoYXNoZXMgdG8gdGhlIHRhcmdldApoYXNoLiBMZXQncyBzZWUgaG93IHRoaXMgY29udHJhY3QgaXMgdnVsbmVyYWJsZSB0byBmcm9udCBydW5uaW5nLgoqLwoKLyoKMS4gQWxpY2UgZGVwbG95cyBGaW5kVGhpc0hhc2ggd2l0aCAxMCBFdGhlci4KMi4gQm9iIGZpbmRzIHRoZSBjb3JyZWN0IHN0cmluZyB0aGF0IHdpbGwgaGFzaCB0byB0aGUgdGFyZ2V0IGhhc2guICgiRXRoZXJldW0iKQozLiBCb2IgY2FsbHMgc29sdmUoIkV0aGVyZXVtIikgd2l0aCBnYXMgcHJpY2Ugc2V0IHRvIDE1IGd3ZWkuCjQuIEV2ZSBpcyB3YXRjaGluZyB0aGUgdHJhbnNhY3Rpb24gcG9vbCBmb3IgdGhlIGFuc3dlciB0byBiZSBzdWJtaXR0ZWQuCjUuIEV2ZSBzZWVzIEJvYidzIGFuc3dlciBhbmQgY2FsbHMgc29sdmUoIkV0aGVyZXVtIikgd2l0aCBhIGhpZ2hlciBnYXMgcHJpY2UKICAgdGhhbiBCb2IgKDEwMCBnd2VpKS4KNi4gRXZlJ3MgdHJhbnNhY3Rpb24gd2FzIG1pbmVkIGJlZm9yZSBCb2IncyB0cmFuc2FjdGlvbi4KICAgRXZlIHdvbiB0aGUgcmV3YXJkIG9mIDEwIGV0aGVyLgoKV2hhdCBoYXBwZW5lZD8KVHJhbnNhY3Rpb25zIHRha2Ugc29tZSB0aW1lIGJlZm9yZSB0aGV5IGFyZSBtaW5lZC4KVHJhbnNhY3Rpb25zIG5vdCB5ZXQgbWluZWQgYXJlIHB1dCBpbiB0aGUgdHJhbnNhY3Rpb24gcG9vbC4KVHJhbnNhY3Rpb25zIHdpdGggaGlnaGVyIGdhcyBwcmljZSBhcmUgdHlwaWNhbGx5IG1pbmVkIGZpcnN0LgpBbiBhdHRhY2tlciBjYW4gZ2V0IHRoZSBhbnN3ZXIgZnJvbSB0aGUgdHJhbnNhY3Rpb24gcG9vbCwgc2VuZCBhIHRyYW5zYWN0aW9uCndpdGggYSBoaWdoZXIgZ2FzIHByaWNlIHNvIHRoYXQgdGhlaXIgdHJhbnNhY3Rpb24gd2lsbCBiZSBpbmNsdWRlZCBpbiBhIGJsb2NrCmJlZm9yZSB0aGUgb3JpZ2luYWwuCiovCgpjb250cmFjdCBGaW5kVGhpc0hhc2ggewogICAgYnl0ZXMzMiBwdWJsaWMgY29uc3RhbnQgaGFzaCA9CiAgICAgICAgMHg1NjRjY2FmNzU5NGQ2NmIxZWFhZWEyNGZlMDFmMDU4NWJmNTJlZTcwODUyYWY0ZWFjMGNjNGIwNDcxMWNkMGUyOwoKICAgIGNvbnN0cnVjdG9yKCkgcGF5YWJsZSB7fQoKICAgIGZ1bmN0aW9uIHNvbHZlKHN0cmluZyBtZW1vcnkgc29sdXRpb24pIHB1YmxpYyB7CiAgICAgICAgcmVxdWlyZSgKICAgICAgICAgICAgaGFzaCA9PSBrZWNjYWsyNTYoYWJpLmVuY29kZVBhY2tlZChzb2x1dGlvbikpLCAiSW5jb3JyZWN0IGFuc3dlciIKICAgICAgICApOwoKICAgICAgICAoYm9vbCBzZW50LCkgPSBtc2cuc2VuZGVyLmNhbGx7dmFsdWU6IDEwIGV0aGVyfSgiIik7CiAgICAgICAgcmVxdWlyZShzZW50LCAiRmFpbGVkIHRvIHNlbmQgRXRoZXIiKTsKICAgIH0KfQo="},{fileName:"PreventFrontRunning.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNjsKCi8qCiAgIE5vdyBMZXQncyBzZWUgaG93IHRvIGd1YXJkIGZyb20gZnJvbnQgcnVubmluZyB1c2luZyBjb21taXQgcmV2ZWFsIHNjaGVtZS4KKi8KCi8qCjEuIEFsaWNlIGRlcGxveXMgU2VjdXJlZEZpbmRUaGlzSGFzaCB3aXRoIDEwIEV0aGVyLgoyLiBCb2IgZmluZHMgdGhlIGNvcnJlY3Qgc3RyaW5nIHRoYXQgd2lsbCBoYXNoIHRvIHRoZSB0YXJnZXQgaGFzaC4gKCJFdGhlcmV1bSIpLgozLiBCb2IgdGhlbiBmaW5kcyB0aGUga2VjY2FrMjU2KEFkZHJlc3MgaW4gbG93ZXJjYXNlICsgU29sdXRpb24gKyBTZWNyZXQpLiAKICAgQWRkcmVzcyBpcyBoaXMgd2FsbGV0IGFkZHJlc3MgaW4gbG93ZXJjYXNlLCBzb2x1dGlvbiBpcyAiRXRoZXJldW0iLCBTZWNyZXQgaXMgbGlrZSBhIHBhc3N3b3JkICgibXlzZWNyZXQiKSAKICAgdGhhdCBvbmx5IEJvYiBrbm93cyB3aGljaCBCb2IgdXNlcyB0byBjb21taXQgYW5kIHJldmVhbCB0aGUgc29sdXRpb24uCiAgIGtlY2NhazI1NjYoIjB4ZjM5RmQ2ZTUxYWFkODhGNkY0Y2U2YUI4ODI3Mjc5Y2ZmRmI5MjI2NkV0aGVyZXVtbXlzZWNyZXQiKSA9ICcweGY5NWIxZGQ2MWVkYzNiZDk2MmNkZWEzOTg3YzZmNTViY2I3MTRhMDJhMmMzZWI3M2JkOTYwZDZiNDM4N2ZjMzYnCjMuIEJvYiB0aGVuIGNhbGxzIGNvbW1pdFNvbHV0aW9uKCIweGY5NWIxZGQ2MWVkYzNiZDk2MmNkZWEzOTg3YzZmNTViY2I3MTRhMDJhMmMzZWI3M2JkOTYwZDZiNDM4N2ZjMzYiKSwgCiAgIHdoZXJlIGhlIGNvbW1pdHMgdGhlIGNhbGN1bGF0ZWQgc29sdXRpb24gaGFzaCB3aXRoIGdhcyBwcmljZSBzZXQgdG8gMTUgZ3dlaS4KNC4gRXZlIGlzIHdhdGNoaW5nIHRoZSB0cmFuc2FjdGlvbiBwb29sIGZvciB0aGUgYW5zd2VyIHRvIGJlIHN1Ym1pdHRlZC4KNS4gRXZlIHNlZXMgQm9iJ3MgYW5zd2VyIGFuZCBoZSBhbHNvIGNhbGxzIGNvbW1pdFNvbHV0aW9uKCIweGY5NWIxZGQ2MWVkYzNiZDk2MmNkZWEzOTg3YzZmNTViY2I3MTRhMDJhMmMzZWI3M2JkOTYwZDZiNDM4N2ZjMzYiKQogICB3aXRoIGEgaGlnaGVyIGdhcyBwcmljZSB0aGFuIEJvYiAoMTAwIGd3ZWkpLgo2LiBFdmUncyB0cmFuc2FjdGlvbiB3YXMgbWluZWQgYmVmb3JlIEJvYidzIHRyYW5zYWN0aW9uLCBidXQgRXZlIGhhcyBub3QgZ290IHRoZSByZXdhcmQgeWV0LgogICBIZSBuZWVkcyB0byBjYWxsIHJldmVhbFNvbHV0aW9uKCkgd2l0aCBleGFjdCBzZWNyZXQgYW5kIHNvbHV0aW9uLCBzbyBsZXRzIHNheSBoZSBpcyB3YXRjaGluZyB0aGUgdHJhbnNhY3Rpb24gcG9vbAogICB0byBmcm9udCBydW4gQm9iIGFzIGhlIGRpZCBwcmV2aW91c2x5CjcuIFRoZW4gQm9iIGNhbGxzIHRoZSByZXZlYWxTb2x1dGlvbigiRXRoZXJldW0iLCAibXlzZWNyZXQiKSB3aXRoIGdhcyBwcmljZSBzZXQgdG8gMTUgZ3dlaTsKOC4gTGV0J3MgY29uc2lkZXIgdGhhdCBFdmUncyB3aG8ncyB3YXRjaGluZyB0aGUgdHJhbnNhY3Rpb24gcG9vbCwgZmluZCdzIEJvYidzIHJldmVhbCBzb2x1dGlvbiB0cmFuc2FjdGlvbiBhbmQgaGUgYWxzbyBjYWxscyAKICAgcmV2ZWFsU29sdXRpb24oIkV0aGVyZXVtIiwgIm15c2VjcmV0Iikgd2l0aCBoaWdoZXIgZ2FzIHByaWNlIHRoYW4gQm9iICgxMDAgZ3dlaSkKOS4gTGV0J3MgY29uc2lkZXIgdGhhdCB0aGlzIHRpbWUgYWxzbyBFdmUncyByZXZlYWwgdHJhbnNhY3Rpb24gd2FzIG1pbmVkIGJlZm9yZSBCb2IncyB0cmFuc2FjdGlvbiwgYnV0IEV2ZSB3aWxsIGJlCiAgIHJldmVydGVkIHdpdGggIkhhc2ggZG9lc24ndCBtYXRjaCIgZXJyb3IuIFNpbmNlIHRoZSByZXZlYWxTb2x1dGlvbigpIGZ1bmN0aW9uIGNoZWNrcyB0aGUgaGFzaCB1c2luZyAKICAga2VjY2FrMjU2KG1zZy5zZW5kZXIgKyBzb2x1dGlvbiArIHNlY3JldCkuIFNvIHRoaXMgdGltZSBldmUgZmFpbHMgdG8gd2luIHRoZSByZXdhcmQuCjEwLkJ1dCBCb2IncyByZXZlYWxTb2x1dGlvbigiRXRoZXJldW0iLCAibXlzZWNyZXQiKSBwYXNzZXMgdGhlIGhhc2ggY2hlY2sgYW5kIGdldHMgdGhlIHJld2FyZCBvZiAxMCBldGhlci4KKi8KCmNvbnRyYWN0IFNlY3VyZWRGaW5kVGhpc0hhc2ggewogICAgLy8gU3RydWN0IGlzIHVzZWQgdG8gc3RvcmUgdGhlIGNvbW1pdCBkZXRhaWxzCiAgICBzdHJ1Y3QgQ29tbWl0IHsKICAgICAgICBieXRlczMyIHNvbHV0aW9uSGFzaDsKICAgICAgICB1aW50MjU2IGNvbW1pdFRpbWU7CiAgICAgICAgYm9vbCByZXZlYWxlZDsKICAgIH0KCiAgICAvLyBUaGUgaGFzaCB0aGF0IGlzIG5lZWRlZCB0byBiZSBzb2x2ZWQKICAgIGJ5dGVzMzIgcHVibGljIGhhc2ggPQogICAgICAgIDB4NTY0Y2NhZjc1OTRkNjZiMWVhYWVhMjRmZTAxZjA1ODViZjUyZWU3MDg1MmFmNGVhYzBjYzRiMDQ3MTFjZDBlMjsKCiAgICAvLyBBZGRyZXNzIG9mIHRoZSB3aW5uZXIKICAgIGFkZHJlc3MgcHVibGljIHdpbm5lcjsKCiAgICAvLyBQcmljZSB0byBiZSByZXdhcmRlZAogICAgdWludDI1NiBwdWJsaWMgcmV3YXJkOwoKICAgIC8vIFN0YXR1cyBvZiBnYW1lCiAgICBib29sIHB1YmxpYyBlbmRlZDsKCiAgICAvLyBNYXBwaW5nIHRvIHN0b3JlIHRoZSBjb21taXQgZGV0YWlscyB3aXRoIGFkZHJlc3MKICAgIG1hcHBpbmcoYWRkcmVzcyA9PiBDb21taXQpIGNvbW1pdHM7CgogICAgLy8gTW9kaWZpZXIgdG8gY2hlY2sgaWYgdGhlIGdhbWUgaXMgYWN0aXZlCiAgICBtb2RpZmllciBnYW1lQWN0aXZlKCkgewogICAgICAgIHJlcXVpcmUoIWVuZGVkLCAiQWxyZWFkeSBlbmRlZCIpOwogICAgICAgIF87CiAgICB9CgogICAgY29uc3RydWN0b3IoKSBwYXlhYmxlIHsKICAgICAgICByZXdhcmQgPSBtc2cudmFsdWU7CiAgICB9CgogICAgLyogCiAgICAgICBDb21taXQgZnVuY3Rpb24gdG8gc3RvcmUgdGhlIGhhc2ggY2FsY3VsYXRlZCB1c2luZyBrZWNjYWsyNTYoYWRkcmVzcyBpbiBsb3dlcmNhc2UgKyBzb2x1dGlvbiArIHNlY3JldCkuIAogICAgICAgVXNlcnMgY2FuIG9ubHkgY29tbWl0IG9uY2UgYW5kIGlmIHRoZSBnYW1lIGlzIGFjdGl2ZS4KICAgICovCiAgICBmdW5jdGlvbiBjb21taXRTb2x1dGlvbihieXRlczMyIF9zb2x1dGlvbkhhc2gpIHB1YmxpYyBnYW1lQWN0aXZlIHsKICAgICAgICBDb21taXQgc3RvcmFnZSBjb21taXQgPSBjb21taXRzW21zZy5zZW5kZXJdOwogICAgICAgIHJlcXVpcmUoY29tbWl0LmNvbW1pdFRpbWUgPT0gMCwgIkFscmVhZHkgY29tbWl0dGVkIik7CiAgICAgICAgY29tbWl0LnNvbHV0aW9uSGFzaCA9IF9zb2x1dGlvbkhhc2g7CiAgICAgICAgY29tbWl0LmNvbW1pdFRpbWUgPSBibG9jay50aW1lc3RhbXA7CiAgICAgICAgY29tbWl0LnJldmVhbGVkID0gZmFsc2U7CiAgICB9CgogICAgLyogCiAgICAgICAgRnVuY3Rpb24gdG8gZ2V0IHRoZSBjb21taXQgZGV0YWlscy4gSXQgcmV0dXJucyBhIHR1cGxlIG9mIChzb2x1dGlvbkhhc2gsIGNvbW1pdFRpbWUsIHJldmVhbFN0YXR1cyk7ICAKICAgICAgICBVc2VycyBjYW4gZ2V0IHNvbHV0aW9uIG9ubHkgaWYgdGhlIGdhbWUgaXMgYWN0aXZlIGFuZCB0aGV5IGhhdmUgY29tbWl0dGVkIGEgc29sdXRpb25IYXNoCiAgICAqLwogICAgZnVuY3Rpb24gZ2V0TXlTb2x1dGlvbigpCiAgICAgICAgcHVibGljCiAgICAgICAgdmlldwogICAgICAgIGdhbWVBY3RpdmUKICAgICAgICByZXR1cm5zIChieXRlczMyLCB1aW50MjU2LCBib29sKQogICAgewogICAgICAgIENvbW1pdCBzdG9yYWdlIGNvbW1pdCA9IGNvbW1pdHNbbXNnLnNlbmRlcl07CiAgICAgICAgcmVxdWlyZShjb21taXQuY29tbWl0VGltZSAhPSAwLCAiTm90IGNvbW1pdHRlZCB5ZXQiKTsKICAgICAgICByZXR1cm4gKGNvbW1pdC5zb2x1dGlvbkhhc2gsIGNvbW1pdC5jb21taXRUaW1lLCBjb21taXQucmV2ZWFsZWQpOwogICAgfQogICAgLyogCiAgICAgICAgRnVuY3Rpb24gdG8gcmV2ZWFsIHRoZSBjb21taXQgYW5kIGdldCB0aGUgcmV3YXJkLiAKICAgICAgICBVc2VycyBjYW4gZ2V0IHJldmVhbCBzb2x1dGlvbiBvbmx5IGlmIHRoZSBnYW1lIGlzIGFjdGl2ZSBhbmQgdGhleSBoYXZlIGNvbW1pdHRlZCBhIHNvbHV0aW9uSGFzaCBiZWZvcmUgdGhpcyBibG9jayBhbmQgbm90IHJldmVhbGVkIHlldC4KICAgICAgICBJdCBnZW5lcmF0ZXMgYSBrZWNjYWsyNTYobXNnLnNlbmRlciArIHNvbHV0aW9uICsgc2VjcmV0KSBhbmQgY2hlY2tzIGl0IHdpdGggdGhlIHByZXZpb3VzbHkgY29tbWl0dGVkIGhhc2guICAKICAgICAgICBBc3N1bWluZyB0aGF0IGEgY29tbWl0IHdhcyBhbHJlYWR5IGluY2x1ZGVkIG9uIGNoYWluLCBmcm9udCBydW5uZXJzIHdpbGwgbm90IGJlIGFibGUgdG8gcGFzcyB0aGlzIGNoZWNrIHNpbmNlIHRoZSBtc2cuc2VuZGVyIGlzIGRpZmZlcmVudC4KICAgICAgICBUaGVuIHRoZSBhY3R1YWwgc29sdXRpb24gaXMgY2hlY2tlZCB1c2luZyBrZWNjYWsyNTYoc29sdXRpb24pLCBpZiB0aGUgc29sdXRpb24gbWF0Y2hlcywgdGhlIHdpbm5lciBpcyBkZWNsYXJlZCwgCiAgICAgICAgdGhlIGdhbWUgaXMgZW5kZWQgYW5kIHRoZSByZXdhcmQgYW1vdW50IGlzIHNlbnQgdG8gdGhlIHdpbm5lci4KICAgICovCgogICAgZnVuY3Rpb24gcmV2ZWFsU29sdXRpb24oc3RyaW5nIG1lbW9yeSBfc29sdXRpb24sIHN0cmluZyBtZW1vcnkgX3NlY3JldCkKICAgICAgICBwdWJsaWMKICAgICAgICBnYW1lQWN0aXZlCiAgICB7CiAgICAgICAgQ29tbWl0IHN0b3JhZ2UgY29tbWl0ID0gY29tbWl0c1ttc2cuc2VuZGVyXTsKICAgICAgICByZXF1aXJlKGNvbW1pdC5jb21taXRUaW1lICE9IDAsICJOb3QgY29tbWl0dGVkIHlldCIpOwogICAgICAgIHJlcXVpcmUoCiAgICAgICAgICAgIGNvbW1pdC5jb21taXRUaW1lIDwgYmxvY2sudGltZXN0YW1wLAogICAgICAgICAgICAiQ2Fubm90IHJldmVhbCBpbiB0aGUgc2FtZSBibG9jayIKICAgICAgICApOwogICAgICAgIHJlcXVpcmUoIWNvbW1pdC5yZXZlYWxlZCwgIkFscmVhZHkgY29tbWl0dGVkIGFuZCByZXZlYWxlZCIpOwoKICAgICAgICBieXRlczMyIHNvbHV0aW9uSGFzaCA9CiAgICAgICAgICAgIGtlY2NhazI1NihhYmkuZW5jb2RlUGFja2VkKG1zZy5zZW5kZXIsIF9zb2x1dGlvbiwgX3NlY3JldCkpOwogICAgICAgIHJlcXVpcmUoc29sdXRpb25IYXNoID09IGNvbW1pdC5zb2x1dGlvbkhhc2gsICJIYXNoIGRvZXNuJ3QgbWF0Y2giKTsKCiAgICAgICAgcmVxdWlyZSgKICAgICAgICAgICAga2VjY2FrMjU2KGFiaS5lbmNvZGVQYWNrZWQoX3NvbHV0aW9uKSkgPT0gaGFzaCwgIkluY29ycmVjdCBhbnN3ZXIiCiAgICAgICAgKTsKCiAgICAgICAgd2lubmVyID0gbXNnLnNlbmRlcjsKICAgICAgICBlbmRlZCA9IHRydWU7CgogICAgICAgIChib29sIHNlbnQsKSA9IHBheWFibGUobXNnLnNlbmRlcikuY2FsbHt2YWx1ZTogcmV3YXJkfSgiIik7CiAgICAgICAgaWYgKCFzZW50KSB7CiAgICAgICAgICAgIHdpbm5lciA9IGFkZHJlc3MoMCk7CiAgICAgICAgICAgIGVuZGVkID0gZmFsc2U7CiAgICAgICAgICAgIHJldmVydCgiRmFpbGVkIHRvIHNlbmQgZXRoZXIuIik7CiAgICAgICAgfQogICAgfQp9Cg=="}],zW=`

Vulnerability

+`,KW=({prev:s,next:a})=>r.jsx(A,{version:YW,title:RW,description:XW,cyfrinLink:vW,html:HW,prev:s,next:a,codes:NW}),FW="0.8.26",MW="Front Running",SW="An example of a Solidity contract vulnerable to front running",xW="https://solidity-by-example.org/hacks/front-running/",JW=[{fileName:"FrontRunning.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNjsKCi8qCkFsaWNlIGNyZWF0ZXMgYSBndWVzc2luZyBnYW1lLgpZb3Ugd2luIDEwIGV0aGVyIGlmIHlvdSBjYW4gZmluZCB0aGUgY29ycmVjdCBzdHJpbmcgdGhhdCBoYXNoZXMgdG8gdGhlIHRhcmdldApoYXNoLiBMZXQncyBzZWUgaG93IHRoaXMgY29udHJhY3QgaXMgdnVsbmVyYWJsZSB0byBmcm9udCBydW5uaW5nLgoqLwoKLyoKMS4gQWxpY2UgZGVwbG95cyBGaW5kVGhpc0hhc2ggd2l0aCAxMCBFdGhlci4KMi4gQm9iIGZpbmRzIHRoZSBjb3JyZWN0IHN0cmluZyB0aGF0IHdpbGwgaGFzaCB0byB0aGUgdGFyZ2V0IGhhc2guICgiRXRoZXJldW0iKQozLiBCb2IgY2FsbHMgc29sdmUoIkV0aGVyZXVtIikgd2l0aCBnYXMgcHJpY2Ugc2V0IHRvIDE1IGd3ZWkuCjQuIEV2ZSBpcyB3YXRjaGluZyB0aGUgdHJhbnNhY3Rpb24gcG9vbCBmb3IgdGhlIGFuc3dlciB0byBiZSBzdWJtaXR0ZWQuCjUuIEV2ZSBzZWVzIEJvYidzIGFuc3dlciBhbmQgY2FsbHMgc29sdmUoIkV0aGVyZXVtIikgd2l0aCBhIGhpZ2hlciBnYXMgcHJpY2UKICAgdGhhbiBCb2IgKDEwMCBnd2VpKS4KNi4gRXZlJ3MgdHJhbnNhY3Rpb24gd2FzIG1pbmVkIGJlZm9yZSBCb2IncyB0cmFuc2FjdGlvbi4KICAgRXZlIHdvbiB0aGUgcmV3YXJkIG9mIDEwIGV0aGVyLgoKV2hhdCBoYXBwZW5lZD8KVHJhbnNhY3Rpb25zIHRha2Ugc29tZSB0aW1lIGJlZm9yZSB0aGV5IGFyZSBtaW5lZC4KVHJhbnNhY3Rpb25zIG5vdCB5ZXQgbWluZWQgYXJlIHB1dCBpbiB0aGUgdHJhbnNhY3Rpb24gcG9vbC4KVHJhbnNhY3Rpb25zIHdpdGggaGlnaGVyIGdhcyBwcmljZSBhcmUgdHlwaWNhbGx5IG1pbmVkIGZpcnN0LgpBbiBhdHRhY2tlciBjYW4gZ2V0IHRoZSBhbnN3ZXIgZnJvbSB0aGUgdHJhbnNhY3Rpb24gcG9vbCwgc2VuZCBhIHRyYW5zYWN0aW9uCndpdGggYSBoaWdoZXIgZ2FzIHByaWNlIHNvIHRoYXQgdGhlaXIgdHJhbnNhY3Rpb24gd2lsbCBiZSBpbmNsdWRlZCBpbiBhIGJsb2NrCmJlZm9yZSB0aGUgb3JpZ2luYWwuCiovCgpjb250cmFjdCBGaW5kVGhpc0hhc2ggewogICAgYnl0ZXMzMiBwdWJsaWMgY29uc3RhbnQgaGFzaCA9CiAgICAgICAgMHg1NjRjY2FmNzU5NGQ2NmIxZWFhZWEyNGZlMDFmMDU4NWJmNTJlZTcwODUyYWY0ZWFjMGNjNGIwNDcxMWNkMGUyOwoKICAgIGNvbnN0cnVjdG9yKCkgcGF5YWJsZSB7fQoKICAgIGZ1bmN0aW9uIHNvbHZlKHN0cmluZyBtZW1vcnkgc29sdXRpb24pIHB1YmxpYyB7CiAgICAgICAgcmVxdWlyZSgKICAgICAgICAgICAgaGFzaCA9PSBrZWNjYWsyNTYoYWJpLmVuY29kZVBhY2tlZChzb2x1dGlvbikpLCAiSW5jb3JyZWN0IGFuc3dlciIKICAgICAgICApOwoKICAgICAgICAoYm9vbCBzZW50LCkgPSBtc2cuc2VuZGVyLmNhbGx7dmFsdWU6IDEwIGV0aGVyfSgiIik7CiAgICAgICAgcmVxdWlyZShzZW50LCAiRmFpbGVkIHRvIHNlbmQgRXRoZXIiKTsKICAgIH0KfQo="},{fileName:"PreventFrontRunning.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNjsKCi8qCiAgIE5vdyBMZXQncyBzZWUgaG93IHRvIGd1YXJkIGZyb20gZnJvbnQgcnVubmluZyB1c2luZyBjb21taXQgcmV2ZWFsIHNjaGVtZS4KKi8KCi8qCjEuIEFsaWNlIGRlcGxveXMgU2VjdXJlZEZpbmRUaGlzSGFzaCB3aXRoIDEwIEV0aGVyLgoyLiBCb2IgZmluZHMgdGhlIGNvcnJlY3Qgc3RyaW5nIHRoYXQgd2lsbCBoYXNoIHRvIHRoZSB0YXJnZXQgaGFzaC4gKCJFdGhlcmV1bSIpLgozLiBCb2IgdGhlbiBmaW5kcyB0aGUga2VjY2FrMjU2KEFkZHJlc3MgaW4gbG93ZXJjYXNlICsgU29sdXRpb24gKyBTZWNyZXQpLiAKICAgQWRkcmVzcyBpcyBoaXMgd2FsbGV0IGFkZHJlc3MgaW4gbG93ZXJjYXNlLCBzb2x1dGlvbiBpcyAiRXRoZXJldW0iLCBTZWNyZXQgaXMgbGlrZSBhIHBhc3N3b3JkICgibXlzZWNyZXQiKSAKICAgdGhhdCBvbmx5IEJvYiBrbm93cyB3aGljaCBCb2IgdXNlcyB0byBjb21taXQgYW5kIHJldmVhbCB0aGUgc29sdXRpb24uCiAgIGtlY2NhazI1NjYoIjB4ZjM5RmQ2ZTUxYWFkODhGNkY0Y2U2YUI4ODI3Mjc5Y2ZmRmI5MjI2NkV0aGVyZXVtbXlzZWNyZXQiKSA9ICcweGY5NWIxZGQ2MWVkYzNiZDk2MmNkZWEzOTg3YzZmNTViY2I3MTRhMDJhMmMzZWI3M2JkOTYwZDZiNDM4N2ZjMzYnCjMuIEJvYiB0aGVuIGNhbGxzIGNvbW1pdFNvbHV0aW9uKCIweGY5NWIxZGQ2MWVkYzNiZDk2MmNkZWEzOTg3YzZmNTViY2I3MTRhMDJhMmMzZWI3M2JkOTYwZDZiNDM4N2ZjMzYiKSwgCiAgIHdoZXJlIGhlIGNvbW1pdHMgdGhlIGNhbGN1bGF0ZWQgc29sdXRpb24gaGFzaCB3aXRoIGdhcyBwcmljZSBzZXQgdG8gMTUgZ3dlaS4KNC4gRXZlIGlzIHdhdGNoaW5nIHRoZSB0cmFuc2FjdGlvbiBwb29sIGZvciB0aGUgYW5zd2VyIHRvIGJlIHN1Ym1pdHRlZC4KNS4gRXZlIHNlZXMgQm9iJ3MgYW5zd2VyIGFuZCBoZSBhbHNvIGNhbGxzIGNvbW1pdFNvbHV0aW9uKCIweGY5NWIxZGQ2MWVkYzNiZDk2MmNkZWEzOTg3YzZmNTViY2I3MTRhMDJhMmMzZWI3M2JkOTYwZDZiNDM4N2ZjMzYiKQogICB3aXRoIGEgaGlnaGVyIGdhcyBwcmljZSB0aGFuIEJvYiAoMTAwIGd3ZWkpLgo2LiBFdmUncyB0cmFuc2FjdGlvbiB3YXMgbWluZWQgYmVmb3JlIEJvYidzIHRyYW5zYWN0aW9uLCBidXQgRXZlIGhhcyBub3QgZ290IHRoZSByZXdhcmQgeWV0LgogICBIZSBuZWVkcyB0byBjYWxsIHJldmVhbFNvbHV0aW9uKCkgd2l0aCBleGFjdCBzZWNyZXQgYW5kIHNvbHV0aW9uLCBzbyBsZXRzIHNheSBoZSBpcyB3YXRjaGluZyB0aGUgdHJhbnNhY3Rpb24gcG9vbAogICB0byBmcm9udCBydW4gQm9iIGFzIGhlIGRpZCBwcmV2aW91c2x5CjcuIFRoZW4gQm9iIGNhbGxzIHRoZSByZXZlYWxTb2x1dGlvbigiRXRoZXJldW0iLCAibXlzZWNyZXQiKSB3aXRoIGdhcyBwcmljZSBzZXQgdG8gMTUgZ3dlaTsKOC4gTGV0J3MgY29uc2lkZXIgdGhhdCBFdmUncyB3aG8ncyB3YXRjaGluZyB0aGUgdHJhbnNhY3Rpb24gcG9vbCwgZmluZCdzIEJvYidzIHJldmVhbCBzb2x1dGlvbiB0cmFuc2FjdGlvbiBhbmQgaGUgYWxzbyBjYWxscyAKICAgcmV2ZWFsU29sdXRpb24oIkV0aGVyZXVtIiwgIm15c2VjcmV0Iikgd2l0aCBoaWdoZXIgZ2FzIHByaWNlIHRoYW4gQm9iICgxMDAgZ3dlaSkKOS4gTGV0J3MgY29uc2lkZXIgdGhhdCB0aGlzIHRpbWUgYWxzbyBFdmUncyByZXZlYWwgdHJhbnNhY3Rpb24gd2FzIG1pbmVkIGJlZm9yZSBCb2IncyB0cmFuc2FjdGlvbiwgYnV0IEV2ZSB3aWxsIGJlCiAgIHJldmVydGVkIHdpdGggIkhhc2ggZG9lc24ndCBtYXRjaCIgZXJyb3IuIFNpbmNlIHRoZSByZXZlYWxTb2x1dGlvbigpIGZ1bmN0aW9uIGNoZWNrcyB0aGUgaGFzaCB1c2luZyAKICAga2VjY2FrMjU2KG1zZy5zZW5kZXIgKyBzb2x1dGlvbiArIHNlY3JldCkuIFNvIHRoaXMgdGltZSBldmUgZmFpbHMgdG8gd2luIHRoZSByZXdhcmQuCjEwLkJ1dCBCb2IncyByZXZlYWxTb2x1dGlvbigiRXRoZXJldW0iLCAibXlzZWNyZXQiKSBwYXNzZXMgdGhlIGhhc2ggY2hlY2sgYW5kIGdldHMgdGhlIHJld2FyZCBvZiAxMCBldGhlci4KKi8KCmNvbnRyYWN0IFNlY3VyZWRGaW5kVGhpc0hhc2ggewogICAgLy8gU3RydWN0IGlzIHVzZWQgdG8gc3RvcmUgdGhlIGNvbW1pdCBkZXRhaWxzCiAgICBzdHJ1Y3QgQ29tbWl0IHsKICAgICAgICBieXRlczMyIHNvbHV0aW9uSGFzaDsKICAgICAgICB1aW50MjU2IGNvbW1pdFRpbWU7CiAgICAgICAgYm9vbCByZXZlYWxlZDsKICAgIH0KCiAgICAvLyBUaGUgaGFzaCB0aGF0IGlzIG5lZWRlZCB0byBiZSBzb2x2ZWQKICAgIGJ5dGVzMzIgcHVibGljIGhhc2ggPQogICAgICAgIDB4NTY0Y2NhZjc1OTRkNjZiMWVhYWVhMjRmZTAxZjA1ODViZjUyZWU3MDg1MmFmNGVhYzBjYzRiMDQ3MTFjZDBlMjsKCiAgICAvLyBBZGRyZXNzIG9mIHRoZSB3aW5uZXIKICAgIGFkZHJlc3MgcHVibGljIHdpbm5lcjsKCiAgICAvLyBQcmljZSB0byBiZSByZXdhcmRlZAogICAgdWludDI1NiBwdWJsaWMgcmV3YXJkOwoKICAgIC8vIFN0YXR1cyBvZiBnYW1lCiAgICBib29sIHB1YmxpYyBlbmRlZDsKCiAgICAvLyBNYXBwaW5nIHRvIHN0b3JlIHRoZSBjb21taXQgZGV0YWlscyB3aXRoIGFkZHJlc3MKICAgIG1hcHBpbmcoYWRkcmVzcyA9PiBDb21taXQpIGNvbW1pdHM7CgogICAgLy8gTW9kaWZpZXIgdG8gY2hlY2sgaWYgdGhlIGdhbWUgaXMgYWN0aXZlCiAgICBtb2RpZmllciBnYW1lQWN0aXZlKCkgewogICAgICAgIHJlcXVpcmUoIWVuZGVkLCAiQWxyZWFkeSBlbmRlZCIpOwogICAgICAgIF87CiAgICB9CgogICAgY29uc3RydWN0b3IoKSBwYXlhYmxlIHsKICAgICAgICByZXdhcmQgPSBtc2cudmFsdWU7CiAgICB9CgogICAgLyogCiAgICAgICBDb21taXQgZnVuY3Rpb24gdG8gc3RvcmUgdGhlIGhhc2ggY2FsY3VsYXRlZCB1c2luZyBrZWNjYWsyNTYoYWRkcmVzcyBpbiBsb3dlcmNhc2UgKyBzb2x1dGlvbiArIHNlY3JldCkuIAogICAgICAgVXNlcnMgY2FuIG9ubHkgY29tbWl0IG9uY2UgYW5kIGlmIHRoZSBnYW1lIGlzIGFjdGl2ZS4KICAgICovCiAgICBmdW5jdGlvbiBjb21taXRTb2x1dGlvbihieXRlczMyIF9zb2x1dGlvbkhhc2gpIHB1YmxpYyBnYW1lQWN0aXZlIHsKICAgICAgICBDb21taXQgc3RvcmFnZSBjb21taXQgPSBjb21taXRzW21zZy5zZW5kZXJdOwogICAgICAgIHJlcXVpcmUoY29tbWl0LmNvbW1pdFRpbWUgPT0gMCwgIkFscmVhZHkgY29tbWl0dGVkIik7CiAgICAgICAgY29tbWl0LnNvbHV0aW9uSGFzaCA9IF9zb2x1dGlvbkhhc2g7CiAgICAgICAgY29tbWl0LmNvbW1pdFRpbWUgPSBibG9jay50aW1lc3RhbXA7CiAgICAgICAgY29tbWl0LnJldmVhbGVkID0gZmFsc2U7CiAgICB9CgogICAgLyogCiAgICAgICAgRnVuY3Rpb24gdG8gZ2V0IHRoZSBjb21taXQgZGV0YWlscy4gSXQgcmV0dXJucyBhIHR1cGxlIG9mIChzb2x1dGlvbkhhc2gsIGNvbW1pdFRpbWUsIHJldmVhbFN0YXR1cyk7ICAKICAgICAgICBVc2VycyBjYW4gZ2V0IHNvbHV0aW9uIG9ubHkgaWYgdGhlIGdhbWUgaXMgYWN0aXZlIGFuZCB0aGV5IGhhdmUgY29tbWl0dGVkIGEgc29sdXRpb25IYXNoCiAgICAqLwogICAgZnVuY3Rpb24gZ2V0TXlTb2x1dGlvbigpCiAgICAgICAgcHVibGljCiAgICAgICAgdmlldwogICAgICAgIGdhbWVBY3RpdmUKICAgICAgICByZXR1cm5zIChieXRlczMyLCB1aW50MjU2LCBib29sKQogICAgewogICAgICAgIENvbW1pdCBzdG9yYWdlIGNvbW1pdCA9IGNvbW1pdHNbbXNnLnNlbmRlcl07CiAgICAgICAgcmVxdWlyZShjb21taXQuY29tbWl0VGltZSAhPSAwLCAiTm90IGNvbW1pdHRlZCB5ZXQiKTsKICAgICAgICByZXR1cm4gKGNvbW1pdC5zb2x1dGlvbkhhc2gsIGNvbW1pdC5jb21taXRUaW1lLCBjb21taXQucmV2ZWFsZWQpOwogICAgfQogICAgLyogCiAgICAgICAgRnVuY3Rpb24gdG8gcmV2ZWFsIHRoZSBjb21taXQgYW5kIGdldCB0aGUgcmV3YXJkLiAKICAgICAgICBVc2VycyBjYW4gZ2V0IHJldmVhbCBzb2x1dGlvbiBvbmx5IGlmIHRoZSBnYW1lIGlzIGFjdGl2ZSBhbmQgdGhleSBoYXZlIGNvbW1pdHRlZCBhIHNvbHV0aW9uSGFzaCBiZWZvcmUgdGhpcyBibG9jayBhbmQgbm90IHJldmVhbGVkIHlldC4KICAgICAgICBJdCBnZW5lcmF0ZXMgYSBrZWNjYWsyNTYobXNnLnNlbmRlciArIHNvbHV0aW9uICsgc2VjcmV0KSBhbmQgY2hlY2tzIGl0IHdpdGggdGhlIHByZXZpb3VzbHkgY29tbWl0dGVkIGhhc2guICAKICAgICAgICBBc3N1bWluZyB0aGF0IGEgY29tbWl0IHdhcyBhbHJlYWR5IGluY2x1ZGVkIG9uIGNoYWluLCBmcm9udCBydW5uZXJzIHdpbGwgbm90IGJlIGFibGUgdG8gcGFzcyB0aGlzIGNoZWNrIHNpbmNlIHRoZSBtc2cuc2VuZGVyIGlzIGRpZmZlcmVudC4KICAgICAgICBUaGVuIHRoZSBhY3R1YWwgc29sdXRpb24gaXMgY2hlY2tlZCB1c2luZyBrZWNjYWsyNTYoc29sdXRpb24pLCBpZiB0aGUgc29sdXRpb24gbWF0Y2hlcywgdGhlIHdpbm5lciBpcyBkZWNsYXJlZCwgCiAgICAgICAgdGhlIGdhbWUgaXMgZW5kZWQgYW5kIHRoZSByZXdhcmQgYW1vdW50IGlzIHNlbnQgdG8gdGhlIHdpbm5lci4KICAgICovCgogICAgZnVuY3Rpb24gcmV2ZWFsU29sdXRpb24oc3RyaW5nIG1lbW9yeSBfc29sdXRpb24sIHN0cmluZyBtZW1vcnkgX3NlY3JldCkKICAgICAgICBwdWJsaWMKICAgICAgICBnYW1lQWN0aXZlCiAgICB7CiAgICAgICAgQ29tbWl0IHN0b3JhZ2UgY29tbWl0ID0gY29tbWl0c1ttc2cuc2VuZGVyXTsKICAgICAgICByZXF1aXJlKGNvbW1pdC5jb21taXRUaW1lICE9IDAsICJOb3QgY29tbWl0dGVkIHlldCIpOwogICAgICAgIHJlcXVpcmUoCiAgICAgICAgICAgIGNvbW1pdC5jb21taXRUaW1lIDwgYmxvY2sudGltZXN0YW1wLAogICAgICAgICAgICAiQ2Fubm90IHJldmVhbCBpbiB0aGUgc2FtZSBibG9jayIKICAgICAgICApOwogICAgICAgIHJlcXVpcmUoIWNvbW1pdC5yZXZlYWxlZCwgIkFscmVhZHkgY29tbWl0dGVkIGFuZCByZXZlYWxlZCIpOwoKICAgICAgICBieXRlczMyIHNvbHV0aW9uSGFzaCA9CiAgICAgICAgICAgIGtlY2NhazI1NihhYmkuZW5jb2RlUGFja2VkKG1zZy5zZW5kZXIsIF9zb2x1dGlvbiwgX3NlY3JldCkpOwogICAgICAgIHJlcXVpcmUoc29sdXRpb25IYXNoID09IGNvbW1pdC5zb2x1dGlvbkhhc2gsICJIYXNoIGRvZXNuJ3QgbWF0Y2giKTsKCiAgICAgICAgcmVxdWlyZSgKICAgICAgICAgICAga2VjY2FrMjU2KGFiaS5lbmNvZGVQYWNrZWQoX3NvbHV0aW9uKSkgPT0gaGFzaCwgIkluY29ycmVjdCBhbnN3ZXIiCiAgICAgICAgKTsKCiAgICAgICAgd2lubmVyID0gbXNnLnNlbmRlcjsKICAgICAgICBlbmRlZCA9IHRydWU7CgogICAgICAgIChib29sIHNlbnQsKSA9IHBheWFibGUobXNnLnNlbmRlcikuY2FsbHt2YWx1ZTogcmV3YXJkfSgiIik7CiAgICAgICAgaWYgKCFzZW50KSB7CiAgICAgICAgICAgIHdpbm5lciA9IGFkZHJlc3MoMCk7CiAgICAgICAgICAgIGVuZGVkID0gZmFsc2U7CiAgICAgICAgICAgIHJldmVydCgiRmFpbGVkIHRvIHNlbmQgZXRoZXIuIik7CiAgICAgICAgfQogICAgfQp9Cg=="}],zW=`

Vulnerability

Transactions take some time before they are mined. An attacker can watch the transaction pool and send a transaction, have it included in a block before the original transaction. This mechanism can be abused to re-order transactions to the attacker's advantage.

@@ -10391,7 +10391,7 @@ before the original. } } } -`,DW=({prev:s,next:a})=>r.jsx(A,{version:FW,title:MW,description:SW,cyfrinLink:xW,html:zW,prev:s,next:a,codes:JW}),EW="0.8.26",TW="Hiding Malicious Code with External Contract",QW="An example of exploit where malicious code is hidden in an external contract in Solidity",UW="",LW=[{fileName:"ExternalContract.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNjsKCi8qCkxldCdzIHNheSBBbGljZSBjYW4gc2VlIHRoZSBjb2RlIG9mIEZvbyBhbmQgQmFyIGJ1dCBub3QgTWFsLgpJdCBpcyBvYnZpb3VzIHRvIEFsaWNlIHRoYXQgRm9vLmNhbGxCYXIoKSBleGVjdXRlcyB0aGUgY29kZSBpbnNpZGUgQmFyLmxvZygpLgpIb3dldmVyIEV2ZSBkZXBsb3lzIEZvbyB3aXRoIHRoZSBhZGRyZXNzIG9mIE1hbCwgc28gdGhhdCBjYWxsaW5nIEZvby5jYWxsQmFyKCkKd2lsbCBhY3R1YWxseSBleGVjdXRlIHRoZSBjb2RlIGF0IE1hbC4KKi8KCi8qCjEuIEV2ZSBkZXBsb3lzIE1hbAoyLiBFdmUgZGVwbG95cyBGb28gd2l0aCB0aGUgYWRkcmVzcyBvZiBNYWwKMy4gQWxpY2UgY2FsbHMgRm9vLmNhbGxCYXIoKSBhZnRlciByZWFkaW5nIHRoZSBjb2RlIGFuZCBqdWRnaW5nIHRoYXQgaXQgaXMKICAgc2FmZSB0byBjYWxsLgo0LiBBbHRob3VnaCBBbGljZSBleHBlY3RlZCBCYXIubG9nKCkgdG8gYmUgZXhlY3V0ZSwgTWFsLmxvZygpIHdhcyBleGVjdXRlZC4KKi8KCmNvbnRyYWN0IEZvbyB7CiAgICBCYXIgYmFyOwoKICAgIGNvbnN0cnVjdG9yKGFkZHJlc3MgX2JhcikgewogICAgICAgIGJhciA9IEJhcihfYmFyKTsKICAgIH0KCiAgICBmdW5jdGlvbiBjYWxsQmFyKCkgcHVibGljIHsKICAgICAgICBiYXIubG9nKCk7CiAgICB9Cn0KCmNvbnRyYWN0IEJhciB7CiAgICBldmVudCBMb2coc3RyaW5nIG1lc3NhZ2UpOwoKICAgIGZ1bmN0aW9uIGxvZygpIHB1YmxpYyB7CiAgICAgICAgZW1pdCBMb2coIkJhciB3YXMgY2FsbGVkIik7CiAgICB9Cn0KCi8vIFRoaXMgY29kZSBpcyBoaWRkZW4gaW4gYSBzZXBhcmF0ZSBmaWxlCmNvbnRyYWN0IE1hbCB7CiAgICBldmVudCBMb2coc3RyaW5nIG1lc3NhZ2UpOwoKICAgIC8vIGZ1bmN0aW9uICgpIGV4dGVybmFsIHsKICAgIC8vICAgICBlbWl0IExvZygiTWFsIHdhcyBjYWxsZWQiKTsKICAgIC8vIH0KCiAgICAvLyBBY3R1YWxseSB3ZSBjYW4gZXhlY3V0ZSB0aGUgc2FtZSBleHBsb2l0IGV2ZW4gaWYgdGhpcyBmdW5jdGlvbiBkb2VzCiAgICAvLyBub3QgZXhpc3QgYnkgdXNpbmcgdGhlIGZhbGxiYWNrCiAgICBmdW5jdGlvbiBsb2coKSBwdWJsaWMgewogICAgICAgIGVtaXQgTG9nKCJNYWwgd2FzIGNhbGxlZCIpOwogICAgfQp9Cg=="}],_W=`

Vulnerability

+`,DW=({prev:s,next:a})=>r.jsx(A,{version:FW,title:MW,description:SW,cyfrinLink:xW,html:zW,prev:s,next:a,codes:JW}),EW="0.8.26",TW="Hiding Malicious Code with External Contract",QW="An example of exploit where malicious code is hidden in an external contract in Solidity",UW="https://solidity-by-example.org/hacks/hiding-malicious-code-with-external-contract/",LW=[{fileName:"ExternalContract.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNjsKCi8qCkxldCdzIHNheSBBbGljZSBjYW4gc2VlIHRoZSBjb2RlIG9mIEZvbyBhbmQgQmFyIGJ1dCBub3QgTWFsLgpJdCBpcyBvYnZpb3VzIHRvIEFsaWNlIHRoYXQgRm9vLmNhbGxCYXIoKSBleGVjdXRlcyB0aGUgY29kZSBpbnNpZGUgQmFyLmxvZygpLgpIb3dldmVyIEV2ZSBkZXBsb3lzIEZvbyB3aXRoIHRoZSBhZGRyZXNzIG9mIE1hbCwgc28gdGhhdCBjYWxsaW5nIEZvby5jYWxsQmFyKCkKd2lsbCBhY3R1YWxseSBleGVjdXRlIHRoZSBjb2RlIGF0IE1hbC4KKi8KCi8qCjEuIEV2ZSBkZXBsb3lzIE1hbAoyLiBFdmUgZGVwbG95cyBGb28gd2l0aCB0aGUgYWRkcmVzcyBvZiBNYWwKMy4gQWxpY2UgY2FsbHMgRm9vLmNhbGxCYXIoKSBhZnRlciByZWFkaW5nIHRoZSBjb2RlIGFuZCBqdWRnaW5nIHRoYXQgaXQgaXMKICAgc2FmZSB0byBjYWxsLgo0LiBBbHRob3VnaCBBbGljZSBleHBlY3RlZCBCYXIubG9nKCkgdG8gYmUgZXhlY3V0ZSwgTWFsLmxvZygpIHdhcyBleGVjdXRlZC4KKi8KCmNvbnRyYWN0IEZvbyB7CiAgICBCYXIgYmFyOwoKICAgIGNvbnN0cnVjdG9yKGFkZHJlc3MgX2JhcikgewogICAgICAgIGJhciA9IEJhcihfYmFyKTsKICAgIH0KCiAgICBmdW5jdGlvbiBjYWxsQmFyKCkgcHVibGljIHsKICAgICAgICBiYXIubG9nKCk7CiAgICB9Cn0KCmNvbnRyYWN0IEJhciB7CiAgICBldmVudCBMb2coc3RyaW5nIG1lc3NhZ2UpOwoKICAgIGZ1bmN0aW9uIGxvZygpIHB1YmxpYyB7CiAgICAgICAgZW1pdCBMb2coIkJhciB3YXMgY2FsbGVkIik7CiAgICB9Cn0KCi8vIFRoaXMgY29kZSBpcyBoaWRkZW4gaW4gYSBzZXBhcmF0ZSBmaWxlCmNvbnRyYWN0IE1hbCB7CiAgICBldmVudCBMb2coc3RyaW5nIG1lc3NhZ2UpOwoKICAgIC8vIGZ1bmN0aW9uICgpIGV4dGVybmFsIHsKICAgIC8vICAgICBlbWl0IExvZygiTWFsIHdhcyBjYWxsZWQiKTsKICAgIC8vIH0KCiAgICAvLyBBY3R1YWxseSB3ZSBjYW4gZXhlY3V0ZSB0aGUgc2FtZSBleHBsb2l0IGV2ZW4gaWYgdGhpcyBmdW5jdGlvbiBkb2VzCiAgICAvLyBub3QgZXhpc3QgYnkgdXNpbmcgdGhlIGZhbGxiYWNrCiAgICBmdW5jdGlvbiBsb2coKSBwdWJsaWMgewogICAgICAgIGVtaXQgTG9nKCJNYWwgd2FzIGNhbGxlZCIpOwogICAgfQp9Cg=="}],_W=`

Vulnerability

In Solidity any address can be casted into specific contract, even if the contract at the address is not the one being casted.

This can be exploited to hide malicious code. Let's see how.

@@ -10458,7 +10458,7 @@ external contract can be reviewed constructor() public { bar = new Bar(); } -`,OW=({prev:s,next:a})=>r.jsx(A,{version:EW,title:TW,description:QW,cyfrinLink:UW,html:_W,prev:s,next:a,codes:LW}),PW="0.8.26",$W="Honeypot",qW="An example of honeypot in Solidity",s2="",a2=[{fileName:"HoneyPot.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNjsKCi8qCkJhbmsgaXMgYSBjb250cmFjdCB0aGF0IGNhbGxzIExvZ2dlciB0byBsb2cgZXZlbnRzLgpCYW5rLndpdGhkcmF3KCkgaXMgdnVsbmVyYWJsZSB0byB0aGUgcmVlbnRyYW5jeSBhdHRhY2suClNvIGEgaGFja2VyIHRyaWVzIHRvIGRyYWluIEV0aGVyIGZyb20gQmFuay4KQnV0IGFjdHVhbGx5IHRoZSByZWVudHJhbmN5IGV4cGxvaXQgaXMgYSBiYWl0IGZvciBoYWNrZXJzLgpCeSBkZXBsb3lpbmcgQmFuayB3aXRoIEhvbmV5UG90IGluIHBsYWNlIG9mIHRoZSBMb2dnZXIsIHRoaXMgY29udHJhY3QgYmVjb21lcwphIHRyYXAgZm9yIGhhY2tlcnMuIExldCdzIHNlZSBob3cuCgoxLiBBbGljZSBkZXBsb3lzIEhvbmV5UG90CjIuIEFsaWNlIGRlcGxveXMgQmFuayB3aXRoIHRoZSBhZGRyZXNzIG9mIEhvbmV5UG90CjMuIEFsaWNlIGRlcG9zaXRzIDEgRXRoZXIgaW50byBCYW5rLgo0LiBFdmUgZGlzY292ZXJzIHRoZSByZWVudHJhbmN5IGV4cGxvaXQgaW4gQmFuay53aXRoZHJhdyBhbmQgZGVjaWRlcyB0byBoYWNrIGl0Lgo1LiBFdmUgZGVwbG95cyBBdHRhY2sgd2l0aCB0aGUgYWRkcmVzcyBvZiBCYW5rCjYuIEV2ZSBjYWxscyBBdHRhY2suYXR0YWNrKCkgd2l0aCAxIEV0aGVyIGJ1dCB0aGUgdHJhbnNhY3Rpb24gZmFpbHMuCgpXaGF0IGhhcHBlbmVkPwpFdmUgY2FsbHMgQXR0YWNrLmF0dGFjaygpIGFuZCBpdCBzdGFydHMgd2l0aGRyYXdpbmcgRXRoZXIgZnJvbSBCYW5rLgpXaGVuIHRoZSBsYXN0IEJhbmsud2l0aGRyYXcoKSBpcyBhYm91dCB0byBjb21wbGV0ZSwgaXQgY2FsbHMgbG9nZ2VyLmxvZygpLgpMb2dnZXIubG9nKCkgY2FsbHMgSG9uZXlQb3QubG9nKCkgYW5kIHJldmVydHMuIFRyYW5zYWN0aW9uIGZhaWxzLgoqLwoKY29udHJhY3QgQmFuayB7CiAgICBtYXBwaW5nKGFkZHJlc3MgPT4gdWludDI1NikgcHVibGljIGJhbGFuY2VzOwogICAgTG9nZ2VyIGxvZ2dlcjsKCiAgICBjb25zdHJ1Y3RvcihMb2dnZXIgX2xvZ2dlcikgewogICAgICAgIGxvZ2dlciA9IExvZ2dlcihfbG9nZ2VyKTsKICAgIH0KCiAgICBmdW5jdGlvbiBkZXBvc2l0KCkgcHVibGljIHBheWFibGUgewogICAgICAgIGJhbGFuY2VzW21zZy5zZW5kZXJdICs9IG1zZy52YWx1ZTsKICAgICAgICBsb2dnZXIubG9nKG1zZy5zZW5kZXIsIG1zZy52YWx1ZSwgIkRlcG9zaXQiKTsKICAgIH0KCiAgICBmdW5jdGlvbiB3aXRoZHJhdyh1aW50MjU2IF9hbW91bnQpIHB1YmxpYyB7CiAgICAgICAgcmVxdWlyZShfYW1vdW50IDw9IGJhbGFuY2VzW21zZy5zZW5kZXJdLCAiSW5zdWZmaWNpZW50IGZ1bmRzIik7CgogICAgICAgIChib29sIHNlbnQsKSA9IG1zZy5zZW5kZXIuY2FsbHt2YWx1ZTogX2Ftb3VudH0oIiIpOwogICAgICAgIHJlcXVpcmUoc2VudCwgIkZhaWxlZCB0byBzZW5kIEV0aGVyIik7CgogICAgICAgIGJhbGFuY2VzW21zZy5zZW5kZXJdIC09IF9hbW91bnQ7CgogICAgICAgIGxvZ2dlci5sb2cobXNnLnNlbmRlciwgX2Ftb3VudCwgIldpdGhkcmF3Iik7CiAgICB9Cn0KCmNvbnRyYWN0IExvZ2dlciB7CiAgICBldmVudCBMb2coYWRkcmVzcyBjYWxsZXIsIHVpbnQyNTYgYW1vdW50LCBzdHJpbmcgYWN0aW9uKTsKCiAgICBmdW5jdGlvbiBsb2coYWRkcmVzcyBfY2FsbGVyLCB1aW50MjU2IF9hbW91bnQsIHN0cmluZyBtZW1vcnkgX2FjdGlvbikKICAgICAgICBwdWJsaWMKICAgIHsKICAgICAgICBlbWl0IExvZyhfY2FsbGVyLCBfYW1vdW50LCBfYWN0aW9uKTsKICAgIH0KfQoKLy8gSGFja2VyIHRyaWVzIHRvIGRyYWluIHRoZSBFdGhlcnMgc3RvcmVkIGluIEJhbmsgYnkgcmVlbnRyYW5jeS4KY29udHJhY3QgQXR0YWNrIHsKICAgIEJhbmsgYmFuazsKCiAgICBjb25zdHJ1Y3RvcihCYW5rIF9iYW5rKSB7CiAgICAgICAgYmFuayA9IEJhbmsoX2JhbmspOwogICAgfQoKICAgIGZhbGxiYWNrKCkgZXh0ZXJuYWwgcGF5YWJsZSB7CiAgICAgICAgaWYgKGFkZHJlc3MoYmFuaykuYmFsYW5jZSA+PSAxIGV0aGVyKSB7CiAgICAgICAgICAgIGJhbmsud2l0aGRyYXcoMSBldGhlcik7CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIGF0dGFjaygpIHB1YmxpYyBwYXlhYmxlIHsKICAgICAgICBiYW5rLmRlcG9zaXR7dmFsdWU6IDEgZXRoZXJ9KCk7CiAgICAgICAgYmFuay53aXRoZHJhdygxIGV0aGVyKTsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRCYWxhbmNlKCkgcHVibGljIHZpZXcgcmV0dXJucyAodWludDI1NikgewogICAgICAgIHJldHVybiBhZGRyZXNzKHRoaXMpLmJhbGFuY2U7CiAgICB9Cn0KCi8vIExldCdzIHNheSB0aGlzIGNvZGUgaXMgaW4gYSBzZXBhcmF0ZSBmaWxlIHNvIHRoYXQgb3RoZXJzIGNhbm5vdCByZWFkIGl0Lgpjb250cmFjdCBIb25leVBvdCB7CiAgICBmdW5jdGlvbiBsb2coYWRkcmVzcyBfY2FsbGVyLCB1aW50MjU2IF9hbW91bnQsIHN0cmluZyBtZW1vcnkgX2FjdGlvbikKICAgICAgICBwdWJsaWMKICAgIHsKICAgICAgICBpZiAoZXF1YWwoX2FjdGlvbiwgIldpdGhkcmF3IikpIHsKICAgICAgICAgICAgcmV2ZXJ0KCJJdCdzIGEgdHJhcCIpOwogICAgICAgIH0KICAgIH0KCiAgICAvLyBGdW5jdGlvbiB0byBjb21wYXJlIHN0cmluZ3MgdXNpbmcga2VjY2FrMjU2CiAgICBmdW5jdGlvbiBlcXVhbChzdHJpbmcgbWVtb3J5IF9hLCBzdHJpbmcgbWVtb3J5IF9iKQogICAgICAgIHB1YmxpYwogICAgICAgIHB1cmUKICAgICAgICByZXR1cm5zIChib29sKQogICAgewogICAgICAgIHJldHVybiBrZWNjYWsyNTYoYWJpLmVuY29kZShfYSkpID09IGtlY2NhazI1NihhYmkuZW5jb2RlKF9iKSk7CiAgICB9Cn0K"}],n2=`

A honeypot is a trap to catch hackers.

+`,OW=({prev:s,next:a})=>r.jsx(A,{version:EW,title:TW,description:QW,cyfrinLink:UW,html:_W,prev:s,next:a,codes:LW}),PW="0.8.26",$W="Honeypot",qW="An example of honeypot in Solidity",s2="https://solidity-by-example.org/hacks/honeypot/",a2=[{fileName:"HoneyPot.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNjsKCi8qCkJhbmsgaXMgYSBjb250cmFjdCB0aGF0IGNhbGxzIExvZ2dlciB0byBsb2cgZXZlbnRzLgpCYW5rLndpdGhkcmF3KCkgaXMgdnVsbmVyYWJsZSB0byB0aGUgcmVlbnRyYW5jeSBhdHRhY2suClNvIGEgaGFja2VyIHRyaWVzIHRvIGRyYWluIEV0aGVyIGZyb20gQmFuay4KQnV0IGFjdHVhbGx5IHRoZSByZWVudHJhbmN5IGV4cGxvaXQgaXMgYSBiYWl0IGZvciBoYWNrZXJzLgpCeSBkZXBsb3lpbmcgQmFuayB3aXRoIEhvbmV5UG90IGluIHBsYWNlIG9mIHRoZSBMb2dnZXIsIHRoaXMgY29udHJhY3QgYmVjb21lcwphIHRyYXAgZm9yIGhhY2tlcnMuIExldCdzIHNlZSBob3cuCgoxLiBBbGljZSBkZXBsb3lzIEhvbmV5UG90CjIuIEFsaWNlIGRlcGxveXMgQmFuayB3aXRoIHRoZSBhZGRyZXNzIG9mIEhvbmV5UG90CjMuIEFsaWNlIGRlcG9zaXRzIDEgRXRoZXIgaW50byBCYW5rLgo0LiBFdmUgZGlzY292ZXJzIHRoZSByZWVudHJhbmN5IGV4cGxvaXQgaW4gQmFuay53aXRoZHJhdyBhbmQgZGVjaWRlcyB0byBoYWNrIGl0Lgo1LiBFdmUgZGVwbG95cyBBdHRhY2sgd2l0aCB0aGUgYWRkcmVzcyBvZiBCYW5rCjYuIEV2ZSBjYWxscyBBdHRhY2suYXR0YWNrKCkgd2l0aCAxIEV0aGVyIGJ1dCB0aGUgdHJhbnNhY3Rpb24gZmFpbHMuCgpXaGF0IGhhcHBlbmVkPwpFdmUgY2FsbHMgQXR0YWNrLmF0dGFjaygpIGFuZCBpdCBzdGFydHMgd2l0aGRyYXdpbmcgRXRoZXIgZnJvbSBCYW5rLgpXaGVuIHRoZSBsYXN0IEJhbmsud2l0aGRyYXcoKSBpcyBhYm91dCB0byBjb21wbGV0ZSwgaXQgY2FsbHMgbG9nZ2VyLmxvZygpLgpMb2dnZXIubG9nKCkgY2FsbHMgSG9uZXlQb3QubG9nKCkgYW5kIHJldmVydHMuIFRyYW5zYWN0aW9uIGZhaWxzLgoqLwoKY29udHJhY3QgQmFuayB7CiAgICBtYXBwaW5nKGFkZHJlc3MgPT4gdWludDI1NikgcHVibGljIGJhbGFuY2VzOwogICAgTG9nZ2VyIGxvZ2dlcjsKCiAgICBjb25zdHJ1Y3RvcihMb2dnZXIgX2xvZ2dlcikgewogICAgICAgIGxvZ2dlciA9IExvZ2dlcihfbG9nZ2VyKTsKICAgIH0KCiAgICBmdW5jdGlvbiBkZXBvc2l0KCkgcHVibGljIHBheWFibGUgewogICAgICAgIGJhbGFuY2VzW21zZy5zZW5kZXJdICs9IG1zZy52YWx1ZTsKICAgICAgICBsb2dnZXIubG9nKG1zZy5zZW5kZXIsIG1zZy52YWx1ZSwgIkRlcG9zaXQiKTsKICAgIH0KCiAgICBmdW5jdGlvbiB3aXRoZHJhdyh1aW50MjU2IF9hbW91bnQpIHB1YmxpYyB7CiAgICAgICAgcmVxdWlyZShfYW1vdW50IDw9IGJhbGFuY2VzW21zZy5zZW5kZXJdLCAiSW5zdWZmaWNpZW50IGZ1bmRzIik7CgogICAgICAgIChib29sIHNlbnQsKSA9IG1zZy5zZW5kZXIuY2FsbHt2YWx1ZTogX2Ftb3VudH0oIiIpOwogICAgICAgIHJlcXVpcmUoc2VudCwgIkZhaWxlZCB0byBzZW5kIEV0aGVyIik7CgogICAgICAgIGJhbGFuY2VzW21zZy5zZW5kZXJdIC09IF9hbW91bnQ7CgogICAgICAgIGxvZ2dlci5sb2cobXNnLnNlbmRlciwgX2Ftb3VudCwgIldpdGhkcmF3Iik7CiAgICB9Cn0KCmNvbnRyYWN0IExvZ2dlciB7CiAgICBldmVudCBMb2coYWRkcmVzcyBjYWxsZXIsIHVpbnQyNTYgYW1vdW50LCBzdHJpbmcgYWN0aW9uKTsKCiAgICBmdW5jdGlvbiBsb2coYWRkcmVzcyBfY2FsbGVyLCB1aW50MjU2IF9hbW91bnQsIHN0cmluZyBtZW1vcnkgX2FjdGlvbikKICAgICAgICBwdWJsaWMKICAgIHsKICAgICAgICBlbWl0IExvZyhfY2FsbGVyLCBfYW1vdW50LCBfYWN0aW9uKTsKICAgIH0KfQoKLy8gSGFja2VyIHRyaWVzIHRvIGRyYWluIHRoZSBFdGhlcnMgc3RvcmVkIGluIEJhbmsgYnkgcmVlbnRyYW5jeS4KY29udHJhY3QgQXR0YWNrIHsKICAgIEJhbmsgYmFuazsKCiAgICBjb25zdHJ1Y3RvcihCYW5rIF9iYW5rKSB7CiAgICAgICAgYmFuayA9IEJhbmsoX2JhbmspOwogICAgfQoKICAgIGZhbGxiYWNrKCkgZXh0ZXJuYWwgcGF5YWJsZSB7CiAgICAgICAgaWYgKGFkZHJlc3MoYmFuaykuYmFsYW5jZSA+PSAxIGV0aGVyKSB7CiAgICAgICAgICAgIGJhbmsud2l0aGRyYXcoMSBldGhlcik7CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIGF0dGFjaygpIHB1YmxpYyBwYXlhYmxlIHsKICAgICAgICBiYW5rLmRlcG9zaXR7dmFsdWU6IDEgZXRoZXJ9KCk7CiAgICAgICAgYmFuay53aXRoZHJhdygxIGV0aGVyKTsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRCYWxhbmNlKCkgcHVibGljIHZpZXcgcmV0dXJucyAodWludDI1NikgewogICAgICAgIHJldHVybiBhZGRyZXNzKHRoaXMpLmJhbGFuY2U7CiAgICB9Cn0KCi8vIExldCdzIHNheSB0aGlzIGNvZGUgaXMgaW4gYSBzZXBhcmF0ZSBmaWxlIHNvIHRoYXQgb3RoZXJzIGNhbm5vdCByZWFkIGl0Lgpjb250cmFjdCBIb25leVBvdCB7CiAgICBmdW5jdGlvbiBsb2coYWRkcmVzcyBfY2FsbGVyLCB1aW50MjU2IF9hbW91bnQsIHN0cmluZyBtZW1vcnkgX2FjdGlvbikKICAgICAgICBwdWJsaWMKICAgIHsKICAgICAgICBpZiAoZXF1YWwoX2FjdGlvbiwgIldpdGhkcmF3IikpIHsKICAgICAgICAgICAgcmV2ZXJ0KCJJdCdzIGEgdHJhcCIpOwogICAgICAgIH0KICAgIH0KCiAgICAvLyBGdW5jdGlvbiB0byBjb21wYXJlIHN0cmluZ3MgdXNpbmcga2VjY2FrMjU2CiAgICBmdW5jdGlvbiBlcXVhbChzdHJpbmcgbWVtb3J5IF9hLCBzdHJpbmcgbWVtb3J5IF9iKQogICAgICAgIHB1YmxpYwogICAgICAgIHB1cmUKICAgICAgICByZXR1cm5zIChib29sKQogICAgewogICAgICAgIHJldHVybiBrZWNjYWsyNTYoYWJpLmVuY29kZShfYSkpID09IGtlY2NhazI1NihhYmkuZW5jb2RlKF9iKSk7CiAgICB9Cn0K"}],n2=`

A honeypot is a trap to catch hackers.

Vulnerability

Combining two exploits, reentrancy and hiding malicious code, we can build a contract

that will catch malicious users.

@@ -10564,7 +10564,7 @@ Logger.log() calls HoneyPot.log() and reverts. Transaction fails. return keccak256(abi.encode(_a)) == keccak256(abi.encode(_b)); } } -`,l2=({prev:s,next:a})=>r.jsx(A,{version:PW,title:$W,description:qW,cyfrinLink:s2,html:n2,prev:s,next:a,codes:a2}),p2="0.8.26",e2="Arithmetic Overflow and Underflow",c2="An example of hacking Solidity with arithmetic overflow / underflow",t2="",o2=[{fileName:"Overflow.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuNy42OwoKLy8gVGhpcyBjb250cmFjdCBpcyBkZXNpZ25lZCB0byBhY3QgYXMgYSB0aW1lIHZhdWx0LgovLyBVc2VyIGNhbiBkZXBvc2l0IGludG8gdGhpcyBjb250cmFjdCBidXQgY2Fubm90IHdpdGhkcmF3IGZvciBhdCBsZWFzdCBhIHdlZWsuCi8vIFVzZXIgY2FuIGFsc28gZXh0ZW5kIHRoZSB3YWl0IHRpbWUgYmV5b25kIHRoZSAxIHdlZWsgd2FpdGluZyBwZXJpb2QuCgovKgoxLiBEZXBsb3kgVGltZUxvY2sKMi4gRGVwbG95IEF0dGFjayB3aXRoIGFkZHJlc3Mgb2YgVGltZUxvY2sKMy4gQ2FsbCBBdHRhY2suYXR0YWNrIHNlbmRpbmcgMSBldGhlci4gWW91IHdpbGwgaW1tZWRpYXRlbHkgYmUgYWJsZSB0bwogICB3aXRoZHJhdyB5b3VyIGV0aGVyLgoKV2hhdCBoYXBwZW5lZD8KQXR0YWNrIGNhdXNlZCB0aGUgVGltZUxvY2subG9ja1RpbWUgdG8gb3ZlcmZsb3cgYW5kIHdhcyBhYmxlIHRvIHdpdGhkcmF3CmJlZm9yZSB0aGUgMSB3ZWVrIHdhaXRpbmcgcGVyaW9kLgoqLwoKY29udHJhY3QgVGltZUxvY2sgewogICAgbWFwcGluZyhhZGRyZXNzID0+IHVpbnQyNTYpIHB1YmxpYyBiYWxhbmNlczsKICAgIG1hcHBpbmcoYWRkcmVzcyA9PiB1aW50MjU2KSBwdWJsaWMgbG9ja1RpbWU7CgogICAgZnVuY3Rpb24gZGVwb3NpdCgpIGV4dGVybmFsIHBheWFibGUgewogICAgICAgIGJhbGFuY2VzW21zZy5zZW5kZXJdICs9IG1zZy52YWx1ZTsKICAgICAgICBsb2NrVGltZVttc2cuc2VuZGVyXSA9IGJsb2NrLnRpbWVzdGFtcCArIDEgd2Vla3M7CiAgICB9CgogICAgZnVuY3Rpb24gaW5jcmVhc2VMb2NrVGltZSh1aW50MjU2IF9zZWNvbmRzVG9JbmNyZWFzZSkgcHVibGljIHsKICAgICAgICBsb2NrVGltZVttc2cuc2VuZGVyXSArPSBfc2Vjb25kc1RvSW5jcmVhc2U7CiAgICB9CgogICAgZnVuY3Rpb24gd2l0aGRyYXcoKSBwdWJsaWMgewogICAgICAgIHJlcXVpcmUoYmFsYW5jZXNbbXNnLnNlbmRlcl0gPiAwLCAiSW5zdWZmaWNpZW50IGZ1bmRzIik7CiAgICAgICAgcmVxdWlyZShibG9jay50aW1lc3RhbXAgPiBsb2NrVGltZVttc2cuc2VuZGVyXSwgIkxvY2sgdGltZSBub3QgZXhwaXJlZCIpOwoKICAgICAgICB1aW50MjU2IGFtb3VudCA9IGJhbGFuY2VzW21zZy5zZW5kZXJdOwogICAgICAgIGJhbGFuY2VzW21zZy5zZW5kZXJdID0gMDsKCiAgICAgICAgKGJvb2wgc2VudCwpID0gbXNnLnNlbmRlci5jYWxse3ZhbHVlOiBhbW91bnR9KCIiKTsKICAgICAgICByZXF1aXJlKHNlbnQsICJGYWlsZWQgdG8gc2VuZCBFdGhlciIpOwogICAgfQp9Cgpjb250cmFjdCBBdHRhY2sgewogICAgVGltZUxvY2sgdGltZUxvY2s7CgogICAgY29uc3RydWN0b3IoVGltZUxvY2sgX3RpbWVMb2NrKSB7CiAgICAgICAgdGltZUxvY2sgPSBUaW1lTG9jayhfdGltZUxvY2spOwogICAgfQoKICAgIGZhbGxiYWNrKCkgZXh0ZXJuYWwgcGF5YWJsZSB7fQoKICAgIGZ1bmN0aW9uIGF0dGFjaygpIHB1YmxpYyBwYXlhYmxlIHsKICAgICAgICB0aW1lTG9jay5kZXBvc2l0e3ZhbHVlOiBtc2cudmFsdWV9KCk7CiAgICAgICAgLyoKICAgICAgICBpZiB0ID0gY3VycmVudCBsb2NrIHRpbWUgdGhlbiB3ZSBuZWVkIHRvIGZpbmQgeCBzdWNoIHRoYXQKICAgICAgICB4ICsgdCA9IDIqKjI1NiA9IDAKICAgICAgICBzbyB4ID0gLXQKICAgICAgICAyKioyNTYgPSB0eXBlKHVpbnQpLm1heCArIDEKICAgICAgICBzbyB4ID0gdHlwZSh1aW50KS5tYXggKyAxIC0gdAogICAgICAgICovCiAgICAgICAgdGltZUxvY2suaW5jcmVhc2VMb2NrVGltZSgKICAgICAgICAgICAgdHlwZSh1aW50MjU2KS5tYXggKyAxIC0gdGltZUxvY2subG9ja1RpbWUoYWRkcmVzcyh0aGlzKSkKICAgICAgICApOwogICAgICAgIHRpbWVMb2NrLndpdGhkcmF3KCk7CiAgICB9Cn0K"}],r2=`

Vulnerability

+`,l2=({prev:s,next:a})=>r.jsx(A,{version:PW,title:$W,description:qW,cyfrinLink:s2,html:n2,prev:s,next:a,codes:a2}),p2="0.8.26",e2="Arithmetic Overflow and Underflow",c2="An example of hacking Solidity with arithmetic overflow / underflow",t2="https://solidity-by-example.org/hacks/overflow/",o2=[{fileName:"Overflow.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuNy42OwoKLy8gVGhpcyBjb250cmFjdCBpcyBkZXNpZ25lZCB0byBhY3QgYXMgYSB0aW1lIHZhdWx0LgovLyBVc2VyIGNhbiBkZXBvc2l0IGludG8gdGhpcyBjb250cmFjdCBidXQgY2Fubm90IHdpdGhkcmF3IGZvciBhdCBsZWFzdCBhIHdlZWsuCi8vIFVzZXIgY2FuIGFsc28gZXh0ZW5kIHRoZSB3YWl0IHRpbWUgYmV5b25kIHRoZSAxIHdlZWsgd2FpdGluZyBwZXJpb2QuCgovKgoxLiBEZXBsb3kgVGltZUxvY2sKMi4gRGVwbG95IEF0dGFjayB3aXRoIGFkZHJlc3Mgb2YgVGltZUxvY2sKMy4gQ2FsbCBBdHRhY2suYXR0YWNrIHNlbmRpbmcgMSBldGhlci4gWW91IHdpbGwgaW1tZWRpYXRlbHkgYmUgYWJsZSB0bwogICB3aXRoZHJhdyB5b3VyIGV0aGVyLgoKV2hhdCBoYXBwZW5lZD8KQXR0YWNrIGNhdXNlZCB0aGUgVGltZUxvY2subG9ja1RpbWUgdG8gb3ZlcmZsb3cgYW5kIHdhcyBhYmxlIHRvIHdpdGhkcmF3CmJlZm9yZSB0aGUgMSB3ZWVrIHdhaXRpbmcgcGVyaW9kLgoqLwoKY29udHJhY3QgVGltZUxvY2sgewogICAgbWFwcGluZyhhZGRyZXNzID0+IHVpbnQyNTYpIHB1YmxpYyBiYWxhbmNlczsKICAgIG1hcHBpbmcoYWRkcmVzcyA9PiB1aW50MjU2KSBwdWJsaWMgbG9ja1RpbWU7CgogICAgZnVuY3Rpb24gZGVwb3NpdCgpIGV4dGVybmFsIHBheWFibGUgewogICAgICAgIGJhbGFuY2VzW21zZy5zZW5kZXJdICs9IG1zZy52YWx1ZTsKICAgICAgICBsb2NrVGltZVttc2cuc2VuZGVyXSA9IGJsb2NrLnRpbWVzdGFtcCArIDEgd2Vla3M7CiAgICB9CgogICAgZnVuY3Rpb24gaW5jcmVhc2VMb2NrVGltZSh1aW50MjU2IF9zZWNvbmRzVG9JbmNyZWFzZSkgcHVibGljIHsKICAgICAgICBsb2NrVGltZVttc2cuc2VuZGVyXSArPSBfc2Vjb25kc1RvSW5jcmVhc2U7CiAgICB9CgogICAgZnVuY3Rpb24gd2l0aGRyYXcoKSBwdWJsaWMgewogICAgICAgIHJlcXVpcmUoYmFsYW5jZXNbbXNnLnNlbmRlcl0gPiAwLCAiSW5zdWZmaWNpZW50IGZ1bmRzIik7CiAgICAgICAgcmVxdWlyZShibG9jay50aW1lc3RhbXAgPiBsb2NrVGltZVttc2cuc2VuZGVyXSwgIkxvY2sgdGltZSBub3QgZXhwaXJlZCIpOwoKICAgICAgICB1aW50MjU2IGFtb3VudCA9IGJhbGFuY2VzW21zZy5zZW5kZXJdOwogICAgICAgIGJhbGFuY2VzW21zZy5zZW5kZXJdID0gMDsKCiAgICAgICAgKGJvb2wgc2VudCwpID0gbXNnLnNlbmRlci5jYWxse3ZhbHVlOiBhbW91bnR9KCIiKTsKICAgICAgICByZXF1aXJlKHNlbnQsICJGYWlsZWQgdG8gc2VuZCBFdGhlciIpOwogICAgfQp9Cgpjb250cmFjdCBBdHRhY2sgewogICAgVGltZUxvY2sgdGltZUxvY2s7CgogICAgY29uc3RydWN0b3IoVGltZUxvY2sgX3RpbWVMb2NrKSB7CiAgICAgICAgdGltZUxvY2sgPSBUaW1lTG9jayhfdGltZUxvY2spOwogICAgfQoKICAgIGZhbGxiYWNrKCkgZXh0ZXJuYWwgcGF5YWJsZSB7fQoKICAgIGZ1bmN0aW9uIGF0dGFjaygpIHB1YmxpYyBwYXlhYmxlIHsKICAgICAgICB0aW1lTG9jay5kZXBvc2l0e3ZhbHVlOiBtc2cudmFsdWV9KCk7CiAgICAgICAgLyoKICAgICAgICBpZiB0ID0gY3VycmVudCBsb2NrIHRpbWUgdGhlbiB3ZSBuZWVkIHRvIGZpbmQgeCBzdWNoIHRoYXQKICAgICAgICB4ICsgdCA9IDIqKjI1NiA9IDAKICAgICAgICBzbyB4ID0gLXQKICAgICAgICAyKioyNTYgPSB0eXBlKHVpbnQpLm1heCArIDEKICAgICAgICBzbyB4ID0gdHlwZSh1aW50KS5tYXggKyAxIC0gdAogICAgICAgICovCiAgICAgICAgdGltZUxvY2suaW5jcmVhc2VMb2NrVGltZSgKICAgICAgICAgICAgdHlwZSh1aW50MjU2KS5tYXggKyAxIC0gdGltZUxvY2subG9ja1RpbWUoYWRkcmVzcyh0aGlzKSkKICAgICAgICApOwogICAgICAgIHRpbWVMb2NrLndpdGhkcmF3KCk7CiAgICB9Cn0K"}],r2=`

Vulnerability

Solidity < 0.8

Integers in Solidity overflow / underflow without any errors

Solidity >= 0.8
@@ -10643,7 +10643,7 @@ before the 1 week waiting period.
  • Solidity 0.8 defaults to throwing an error for overflow / underflow

  • -`,i2=({prev:s,next:a})=>r.jsx(A,{version:p2,title:e2,description:c2,cyfrinLink:t2,html:r2,prev:s,next:a,codes:o2}),g2="0.8.26",h2="Phishing with tx.origin",I2="An example of phishing with tx.origin in Solidity",d2="",C2=[{fileName:"TxOrigin.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNjsKCi8qCldhbGxldCBpcyBhIHNpbXBsZSBjb250cmFjdCB3aGVyZSBvbmx5IHRoZSBvd25lciBzaG91bGQgYmUgYWJsZSB0byB0cmFuc2ZlcgpFdGhlciB0byBhbm90aGVyIGFkZHJlc3MuIFdhbGxldC50cmFuc2ZlcigpIHVzZXMgdHgub3JpZ2luIHRvIGNoZWNrIHRoYXQgdGhlCmNhbGxlciBpcyB0aGUgb3duZXIuIExldCdzIHNlZSBob3cgd2UgY2FuIGhhY2sgdGhpcyBjb250cmFjdAoqLwoKLyoKMS4gQWxpY2UgZGVwbG95cyBXYWxsZXQgd2l0aCAxMCBFdGhlcgoyLiBFdmUgZGVwbG95cyBBdHRhY2sgd2l0aCB0aGUgYWRkcmVzcyBvZiBBbGljZSdzIFdhbGxldCBjb250cmFjdC4KMy4gRXZlIHRyaWNrcyBBbGljZSB0byBjYWxsIEF0dGFjay5hdHRhY2soKQo0LiBFdmUgc3VjY2Vzc2Z1bGx5IHN0b2xlIEV0aGVyIGZyb20gQWxpY2UncyB3YWxsZXQKCldoYXQgaGFwcGVuZWQ/CkFsaWNlIHdhcyB0cmlja2VkIGludG8gY2FsbGluZyBBdHRhY2suYXR0YWNrKCkuIEluc2lkZSBBdHRhY2suYXR0YWNrKCksIGl0CnJlcXVlc3RlZCBhIHRyYW5zZmVyIG9mIGFsbCBmdW5kcyBpbiBBbGljZSdzIHdhbGxldCB0byBFdmUncyBhZGRyZXNzLgpTaW5jZSB0eC5vcmlnaW4gaW4gV2FsbGV0LnRyYW5zZmVyKCkgaXMgZXF1YWwgdG8gQWxpY2UncyBhZGRyZXNzLAppdCBhdXRob3JpemVkIHRoZSB0cmFuc2Zlci4gVGhlIHdhbGxldCB0cmFuc2ZlcnJlZCBhbGwgRXRoZXIgdG8gRXZlLgoqLwoKY29udHJhY3QgV2FsbGV0IHsKICAgIGFkZHJlc3MgcHVibGljIG93bmVyOwoKICAgIGNvbnN0cnVjdG9yKCkgcGF5YWJsZSB7CiAgICAgICAgb3duZXIgPSBtc2cuc2VuZGVyOwogICAgfQoKICAgIGZ1bmN0aW9uIHRyYW5zZmVyKGFkZHJlc3MgcGF5YWJsZSBfdG8sIHVpbnQyNTYgX2Ftb3VudCkgcHVibGljIHsKICAgICAgICByZXF1aXJlKHR4Lm9yaWdpbiA9PSBvd25lciwgIk5vdCBvd25lciIpOwoKICAgICAgICAoYm9vbCBzZW50LCkgPSBfdG8uY2FsbHt2YWx1ZTogX2Ftb3VudH0oIiIpOwogICAgICAgIHJlcXVpcmUoc2VudCwgIkZhaWxlZCB0byBzZW5kIEV0aGVyIik7CiAgICB9Cn0KCmNvbnRyYWN0IEF0dGFjayB7CiAgICBhZGRyZXNzIHBheWFibGUgcHVibGljIG93bmVyOwogICAgV2FsbGV0IHdhbGxldDsKCiAgICBjb25zdHJ1Y3RvcihXYWxsZXQgX3dhbGxldCkgewogICAgICAgIHdhbGxldCA9IFdhbGxldChfd2FsbGV0KTsKICAgICAgICBvd25lciA9IHBheWFibGUobXNnLnNlbmRlcik7CiAgICB9CgogICAgZnVuY3Rpb24gYXR0YWNrKCkgcHVibGljIHsKICAgICAgICB3YWxsZXQudHJhbnNmZXIob3duZXIsIGFkZHJlc3Mod2FsbGV0KS5iYWxhbmNlKTsKICAgIH0KfQo="}],j2=`

    What's the difference between msg.sender and tx.origin?

    +`,i2=({prev:s,next:a})=>r.jsx(A,{version:p2,title:e2,description:c2,cyfrinLink:t2,html:r2,prev:s,next:a,codes:o2}),g2="0.8.26",h2="Phishing with tx.origin",I2="An example of phishing with tx.origin in Solidity",d2="https://solidity-by-example.org/hacks/phishing-with-tx-origin/",C2=[{fileName:"TxOrigin.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNjsKCi8qCldhbGxldCBpcyBhIHNpbXBsZSBjb250cmFjdCB3aGVyZSBvbmx5IHRoZSBvd25lciBzaG91bGQgYmUgYWJsZSB0byB0cmFuc2ZlcgpFdGhlciB0byBhbm90aGVyIGFkZHJlc3MuIFdhbGxldC50cmFuc2ZlcigpIHVzZXMgdHgub3JpZ2luIHRvIGNoZWNrIHRoYXQgdGhlCmNhbGxlciBpcyB0aGUgb3duZXIuIExldCdzIHNlZSBob3cgd2UgY2FuIGhhY2sgdGhpcyBjb250cmFjdAoqLwoKLyoKMS4gQWxpY2UgZGVwbG95cyBXYWxsZXQgd2l0aCAxMCBFdGhlcgoyLiBFdmUgZGVwbG95cyBBdHRhY2sgd2l0aCB0aGUgYWRkcmVzcyBvZiBBbGljZSdzIFdhbGxldCBjb250cmFjdC4KMy4gRXZlIHRyaWNrcyBBbGljZSB0byBjYWxsIEF0dGFjay5hdHRhY2soKQo0LiBFdmUgc3VjY2Vzc2Z1bGx5IHN0b2xlIEV0aGVyIGZyb20gQWxpY2UncyB3YWxsZXQKCldoYXQgaGFwcGVuZWQ/CkFsaWNlIHdhcyB0cmlja2VkIGludG8gY2FsbGluZyBBdHRhY2suYXR0YWNrKCkuIEluc2lkZSBBdHRhY2suYXR0YWNrKCksIGl0CnJlcXVlc3RlZCBhIHRyYW5zZmVyIG9mIGFsbCBmdW5kcyBpbiBBbGljZSdzIHdhbGxldCB0byBFdmUncyBhZGRyZXNzLgpTaW5jZSB0eC5vcmlnaW4gaW4gV2FsbGV0LnRyYW5zZmVyKCkgaXMgZXF1YWwgdG8gQWxpY2UncyBhZGRyZXNzLAppdCBhdXRob3JpemVkIHRoZSB0cmFuc2Zlci4gVGhlIHdhbGxldCB0cmFuc2ZlcnJlZCBhbGwgRXRoZXIgdG8gRXZlLgoqLwoKY29udHJhY3QgV2FsbGV0IHsKICAgIGFkZHJlc3MgcHVibGljIG93bmVyOwoKICAgIGNvbnN0cnVjdG9yKCkgcGF5YWJsZSB7CiAgICAgICAgb3duZXIgPSBtc2cuc2VuZGVyOwogICAgfQoKICAgIGZ1bmN0aW9uIHRyYW5zZmVyKGFkZHJlc3MgcGF5YWJsZSBfdG8sIHVpbnQyNTYgX2Ftb3VudCkgcHVibGljIHsKICAgICAgICByZXF1aXJlKHR4Lm9yaWdpbiA9PSBvd25lciwgIk5vdCBvd25lciIpOwoKICAgICAgICAoYm9vbCBzZW50LCkgPSBfdG8uY2FsbHt2YWx1ZTogX2Ftb3VudH0oIiIpOwogICAgICAgIHJlcXVpcmUoc2VudCwgIkZhaWxlZCB0byBzZW5kIEV0aGVyIik7CiAgICB9Cn0KCmNvbnRyYWN0IEF0dGFjayB7CiAgICBhZGRyZXNzIHBheWFibGUgcHVibGljIG93bmVyOwogICAgV2FsbGV0IHdhbGxldDsKCiAgICBjb25zdHJ1Y3RvcihXYWxsZXQgX3dhbGxldCkgewogICAgICAgIHdhbGxldCA9IFdhbGxldChfd2FsbGV0KTsKICAgICAgICBvd25lciA9IHBheWFibGUobXNnLnNlbmRlcik7CiAgICB9CgogICAgZnVuY3Rpb24gYXR0YWNrKCkgcHVibGljIHsKICAgICAgICB3YWxsZXQudHJhbnNmZXIob3duZXIsIGFkZHJlc3Mod2FsbGV0KS5iYWxhbmNlKTsKICAgIH0KfQo="}],j2=`

    What's the difference between msg.sender and tx.origin?

    If contract A calls B, and B calls C, in C msg.sender is B and tx.origin is A.

    Vulnerability

    A malicious contract can deceive the owner of a contract into calling a @@ -10706,7 +10706,7 @@ it authorized the transfer. The wallet transferred all Ether to Eve. (bool sent, ) = _to.call{ value: _amount }(""); require(sent, "Failed to send Ether"); } -`,A2=({prev:s,next:a})=>r.jsx(A,{version:g2,title:h2,description:I2,cyfrinLink:d2,html:j2,prev:s,next:a,codes:C2}),u2="0.8.26",y2="Source of Randomness",m2="Blockchain is not a reliable source of randomness in Solidity",b2="",w2=[{fileName:"Randomness.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNjsKCi8qCk5PVEU6IGNhbm5vdCB1c2UgYmxvY2toYXNoIGluIFJlbWl4IHNvIHVzZSBnYW5hY2hlLWNsaQoKbnBtIGkgLWcgZ2FuYWNoZS1jbGkKZ2FuYWNoZS1jbGkKSW4gcmVtaXggc3dpdGNoIGVudmlyb25tZW50IHRvIFdlYjMgcHJvdmlkZXIKKi8KCi8qCkd1ZXNzVGhlUmFuZG9tTnVtYmVyIGlzIGEgZ2FtZSB3aGVyZSB5b3Ugd2luIDEgRXRoZXIgaWYgeW91IGNhbiBndWVzcyB0aGUKcHNldWRvIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGVkIGZyb20gYmxvY2sgaGFzaCBhbmQgdGltZXN0YW1wLgoKQXQgZmlyc3QgZ2xhbmNlLCBpdCBzZWVtcyBpbXBvc3NpYmxlIHRvIGd1ZXNzIHRoZSBjb3JyZWN0IG51bWJlci4KQnV0IGxldCdzIHNlZSBob3cgZWFzeSBpdCBpcyB3aW4uCgoxLiBBbGljZSBkZXBsb3lzIEd1ZXNzVGhlUmFuZG9tTnVtYmVyIHdpdGggMSBFdGhlcgoyLiBFdmUgZGVwbG95cyBBdHRhY2sKMy4gRXZlIGNhbGxzIEF0dGFjay5hdHRhY2soKSBhbmQgd2lucyAxIEV0aGVyCgpXaGF0IGhhcHBlbmVkPwpBdHRhY2sgY29tcHV0ZWQgdGhlIGNvcnJlY3QgYW5zd2VyIGJ5IHNpbXBseSBjb3B5aW5nIHRoZSBjb2RlIHRoYXQgY29tcHV0ZXMgdGhlIHJhbmRvbSBudW1iZXIuCiovCgpjb250cmFjdCBHdWVzc1RoZVJhbmRvbU51bWJlciB7CiAgICBjb25zdHJ1Y3RvcigpIHBheWFibGUge30KCiAgICBmdW5jdGlvbiBndWVzcyh1aW50MjU2IF9ndWVzcykgcHVibGljIHsKICAgICAgICB1aW50MjU2IGFuc3dlciA9IHVpbnQyNTYoCiAgICAgICAgICAgIGtlY2NhazI1NigKICAgICAgICAgICAgICAgIGFiaS5lbmNvZGVQYWNrZWQoYmxvY2toYXNoKGJsb2NrLm51bWJlciAtIDEpLCBibG9jay50aW1lc3RhbXApCiAgICAgICAgICAgICkKICAgICAgICApOwoKICAgICAgICBpZiAoX2d1ZXNzID09IGFuc3dlcikgewogICAgICAgICAgICAoYm9vbCBzZW50LCkgPSBtc2cuc2VuZGVyLmNhbGx7dmFsdWU6IDEgZXRoZXJ9KCIiKTsKICAgICAgICAgICAgcmVxdWlyZShzZW50LCAiRmFpbGVkIHRvIHNlbmQgRXRoZXIiKTsKICAgICAgICB9CiAgICB9Cn0KCmNvbnRyYWN0IEF0dGFjayB7CiAgICByZWNlaXZlKCkgZXh0ZXJuYWwgcGF5YWJsZSB7fQoKICAgIGZ1bmN0aW9uIGF0dGFjayhHdWVzc1RoZVJhbmRvbU51bWJlciBndWVzc1RoZVJhbmRvbU51bWJlcikgcHVibGljIHsKICAgICAgICB1aW50MjU2IGFuc3dlciA9IHVpbnQyNTYoCiAgICAgICAgICAgIGtlY2NhazI1NigKICAgICAgICAgICAgICAgIGFiaS5lbmNvZGVQYWNrZWQoYmxvY2toYXNoKGJsb2NrLm51bWJlciAtIDEpLCBibG9jay50aW1lc3RhbXApCiAgICAgICAgICAgICkKICAgICAgICApOwoKICAgICAgICBndWVzc1RoZVJhbmRvbU51bWJlci5ndWVzcyhhbnN3ZXIpOwogICAgfQoKICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayBiYWxhbmNlCiAgICBmdW5jdGlvbiBnZXRCYWxhbmNlKCkgcHVibGljIHZpZXcgcmV0dXJucyAodWludDI1NikgewogICAgICAgIHJldHVybiBhZGRyZXNzKHRoaXMpLmJhbGFuY2U7CiAgICB9Cn0K"}],k2=`

    Vulnerability

    +`,A2=({prev:s,next:a})=>r.jsx(A,{version:g2,title:h2,description:I2,cyfrinLink:d2,html:j2,prev:s,next:a,codes:C2}),u2="0.8.26",y2="Source of Randomness",m2="Blockchain is not a reliable source of randomness in Solidity",b2="https://solidity-by-example.org/hacks/randomness/",w2=[{fileName:"Randomness.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNjsKCi8qCk5PVEU6IGNhbm5vdCB1c2UgYmxvY2toYXNoIGluIFJlbWl4IHNvIHVzZSBnYW5hY2hlLWNsaQoKbnBtIGkgLWcgZ2FuYWNoZS1jbGkKZ2FuYWNoZS1jbGkKSW4gcmVtaXggc3dpdGNoIGVudmlyb25tZW50IHRvIFdlYjMgcHJvdmlkZXIKKi8KCi8qCkd1ZXNzVGhlUmFuZG9tTnVtYmVyIGlzIGEgZ2FtZSB3aGVyZSB5b3Ugd2luIDEgRXRoZXIgaWYgeW91IGNhbiBndWVzcyB0aGUKcHNldWRvIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGVkIGZyb20gYmxvY2sgaGFzaCBhbmQgdGltZXN0YW1wLgoKQXQgZmlyc3QgZ2xhbmNlLCBpdCBzZWVtcyBpbXBvc3NpYmxlIHRvIGd1ZXNzIHRoZSBjb3JyZWN0IG51bWJlci4KQnV0IGxldCdzIHNlZSBob3cgZWFzeSBpdCBpcyB3aW4uCgoxLiBBbGljZSBkZXBsb3lzIEd1ZXNzVGhlUmFuZG9tTnVtYmVyIHdpdGggMSBFdGhlcgoyLiBFdmUgZGVwbG95cyBBdHRhY2sKMy4gRXZlIGNhbGxzIEF0dGFjay5hdHRhY2soKSBhbmQgd2lucyAxIEV0aGVyCgpXaGF0IGhhcHBlbmVkPwpBdHRhY2sgY29tcHV0ZWQgdGhlIGNvcnJlY3QgYW5zd2VyIGJ5IHNpbXBseSBjb3B5aW5nIHRoZSBjb2RlIHRoYXQgY29tcHV0ZXMgdGhlIHJhbmRvbSBudW1iZXIuCiovCgpjb250cmFjdCBHdWVzc1RoZVJhbmRvbU51bWJlciB7CiAgICBjb25zdHJ1Y3RvcigpIHBheWFibGUge30KCiAgICBmdW5jdGlvbiBndWVzcyh1aW50MjU2IF9ndWVzcykgcHVibGljIHsKICAgICAgICB1aW50MjU2IGFuc3dlciA9IHVpbnQyNTYoCiAgICAgICAgICAgIGtlY2NhazI1NigKICAgICAgICAgICAgICAgIGFiaS5lbmNvZGVQYWNrZWQoYmxvY2toYXNoKGJsb2NrLm51bWJlciAtIDEpLCBibG9jay50aW1lc3RhbXApCiAgICAgICAgICAgICkKICAgICAgICApOwoKICAgICAgICBpZiAoX2d1ZXNzID09IGFuc3dlcikgewogICAgICAgICAgICAoYm9vbCBzZW50LCkgPSBtc2cuc2VuZGVyLmNhbGx7dmFsdWU6IDEgZXRoZXJ9KCIiKTsKICAgICAgICAgICAgcmVxdWlyZShzZW50LCAiRmFpbGVkIHRvIHNlbmQgRXRoZXIiKTsKICAgICAgICB9CiAgICB9Cn0KCmNvbnRyYWN0IEF0dGFjayB7CiAgICByZWNlaXZlKCkgZXh0ZXJuYWwgcGF5YWJsZSB7fQoKICAgIGZ1bmN0aW9uIGF0dGFjayhHdWVzc1RoZVJhbmRvbU51bWJlciBndWVzc1RoZVJhbmRvbU51bWJlcikgcHVibGljIHsKICAgICAgICB1aW50MjU2IGFuc3dlciA9IHVpbnQyNTYoCiAgICAgICAgICAgIGtlY2NhazI1NigKICAgICAgICAgICAgICAgIGFiaS5lbmNvZGVQYWNrZWQoYmxvY2toYXNoKGJsb2NrLm51bWJlciAtIDEpLCBibG9jay50aW1lc3RhbXApCiAgICAgICAgICAgICkKICAgICAgICApOwoKICAgICAgICBndWVzc1RoZVJhbmRvbU51bWJlci5ndWVzcyhhbnN3ZXIpOwogICAgfQoKICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayBiYWxhbmNlCiAgICBmdW5jdGlvbiBnZXRCYWxhbmNlKCkgcHVibGljIHZpZXcgcmV0dXJucyAodWludDI1NikgewogICAgICAgIHJldHVybiBhZGRyZXNzKHRoaXMpLmJhbGFuY2U7CiAgICB9Cn0K"}],k2=`

    Vulnerability

    blockhash and block.timestamp are not reliable sources for randomness.

    // SPDX-License-Identifier: MIT
     pragma solidity ^0.8.26;
    @@ -10773,7 +10773,7 @@ Attack computed the correct answer by simply copying the code that computes the
     
    • Don't use blockhash and block.timestamp as source of randomness
    -`,Z2=({prev:s,next:a})=>r.jsx(A,{version:u2,title:y2,description:m2,cyfrinLink:b2,html:k2,prev:s,next:a,codes:w2}),W2="0.8.26",G2="Re-Entrancy",B2="An example of re-entrancy attack in Solidity",f2="",V2=[{fileName:"ReEntrancy.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNjsKCi8qCkV0aGVyU3RvcmUgaXMgYSBjb250cmFjdCB3aGVyZSB5b3UgY2FuIGRlcG9zaXQgYW5kIHdpdGhkcmF3IEVUSC4KVGhpcyBjb250cmFjdCBpcyB2dWxuZXJhYmxlIHRvIHJlLWVudHJhbmN5IGF0dGFjay4KTGV0J3Mgc2VlIHdoeS4KCjEuIERlcGxveSBFdGhlclN0b3JlCjIuIERlcG9zaXQgMSBFdGhlciBlYWNoIGZyb20gQWNjb3VudCAxIChBbGljZSkgYW5kIEFjY291bnQgMiAoQm9iKSBpbnRvIEV0aGVyU3RvcmUKMy4gRGVwbG95IEF0dGFjayB3aXRoIGFkZHJlc3Mgb2YgRXRoZXJTdG9yZQo0LiBDYWxsIEF0dGFjay5hdHRhY2sgc2VuZGluZyAxIGV0aGVyICh1c2luZyBBY2NvdW50IDMgKEV2ZSkpLgogICBZb3Ugd2lsbCBnZXQgMyBFdGhlcnMgYmFjayAoMiBFdGhlciBzdG9sZW4gZnJvbSBBbGljZSBhbmQgQm9iLAogICBwbHVzIDEgRXRoZXIgc2VudCBmcm9tIHRoaXMgY29udHJhY3QpLgoKV2hhdCBoYXBwZW5lZD8KQXR0YWNrIHdhcyBhYmxlIHRvIGNhbGwgRXRoZXJTdG9yZS53aXRoZHJhdyBtdWx0aXBsZSB0aW1lcyBiZWZvcmUKRXRoZXJTdG9yZS53aXRoZHJhdyBmaW5pc2hlZCBleGVjdXRpbmcuCgpIZXJlIGlzIGhvdyB0aGUgZnVuY3Rpb25zIHdlcmUgY2FsbGVkCi0gQXR0YWNrLmF0dGFjawotIEV0aGVyU3RvcmUuZGVwb3NpdAotIEV0aGVyU3RvcmUud2l0aGRyYXcKLSBBdHRhY2sgZmFsbGJhY2sgKHJlY2VpdmVzIDEgRXRoZXIpCi0gRXRoZXJTdG9yZS53aXRoZHJhdwotIEF0dGFjay5mYWxsYmFjayAocmVjZWl2ZXMgMSBFdGhlcikKLSBFdGhlclN0b3JlLndpdGhkcmF3Ci0gQXR0YWNrIGZhbGxiYWNrIChyZWNlaXZlcyAxIEV0aGVyKQoqLwoKY29udHJhY3QgRXRoZXJTdG9yZSB7CiAgICBtYXBwaW5nKGFkZHJlc3MgPT4gdWludDI1NikgcHVibGljIGJhbGFuY2VzOwoKICAgIGZ1bmN0aW9uIGRlcG9zaXQoKSBwdWJsaWMgcGF5YWJsZSB7CiAgICAgICAgYmFsYW5jZXNbbXNnLnNlbmRlcl0gKz0gbXNnLnZhbHVlOwogICAgfQoKICAgIGZ1bmN0aW9uIHdpdGhkcmF3KCkgcHVibGljIHsKICAgICAgICB1aW50MjU2IGJhbCA9IGJhbGFuY2VzW21zZy5zZW5kZXJdOwogICAgICAgIHJlcXVpcmUoYmFsID4gMCk7CgogICAgICAgIChib29sIHNlbnQsKSA9IG1zZy5zZW5kZXIuY2FsbHt2YWx1ZTogYmFsfSgiIik7CiAgICAgICAgcmVxdWlyZShzZW50LCAiRmFpbGVkIHRvIHNlbmQgRXRoZXIiKTsKCiAgICAgICAgYmFsYW5jZXNbbXNnLnNlbmRlcl0gPSAwOwogICAgfQoKICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayB0aGUgYmFsYW5jZSBvZiB0aGlzIGNvbnRyYWN0CiAgICBmdW5jdGlvbiBnZXRCYWxhbmNlKCkgcHVibGljIHZpZXcgcmV0dXJucyAodWludDI1NikgewogICAgICAgIHJldHVybiBhZGRyZXNzKHRoaXMpLmJhbGFuY2U7CiAgICB9Cn0KCmNvbnRyYWN0IEF0dGFjayB7CiAgICBFdGhlclN0b3JlIHB1YmxpYyBldGhlclN0b3JlOwogICAgdWludDI1NiBwdWJsaWMgY29uc3RhbnQgQU1PVU5UID0gMSBldGhlcjsKCiAgICBjb25zdHJ1Y3RvcihhZGRyZXNzIF9ldGhlclN0b3JlQWRkcmVzcykgewogICAgICAgIGV0aGVyU3RvcmUgPSBFdGhlclN0b3JlKF9ldGhlclN0b3JlQWRkcmVzcyk7CiAgICB9CgogICAgLy8gRmFsbGJhY2sgaXMgY2FsbGVkIHdoZW4gRXRoZXJTdG9yZSBzZW5kcyBFdGhlciB0byB0aGlzIGNvbnRyYWN0LgogICAgZmFsbGJhY2soKSBleHRlcm5hbCBwYXlhYmxlIHsKICAgICAgICBpZiAoYWRkcmVzcyhldGhlclN0b3JlKS5iYWxhbmNlID49IEFNT1VOVCkgewogICAgICAgICAgICBldGhlclN0b3JlLndpdGhkcmF3KCk7CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIGF0dGFjaygpIGV4dGVybmFsIHBheWFibGUgewogICAgICAgIHJlcXVpcmUobXNnLnZhbHVlID49IEFNT1VOVCk7CiAgICAgICAgZXRoZXJTdG9yZS5kZXBvc2l0e3ZhbHVlOiBBTU9VTlR9KCk7CiAgICAgICAgZXRoZXJTdG9yZS53aXRoZHJhdygpOwogICAgfQoKICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayB0aGUgYmFsYW5jZSBvZiB0aGlzIGNvbnRyYWN0CiAgICBmdW5jdGlvbiBnZXRCYWxhbmNlKCkgcHVibGljIHZpZXcgcmV0dXJucyAodWludDI1NikgewogICAgICAgIHJldHVybiBhZGRyZXNzKHRoaXMpLmJhbGFuY2U7CiAgICB9Cn0K"},{fileName:"ReEntrancyGuard.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNjsKCmNvbnRyYWN0IFJlRW50cmFuY3lHdWFyZCB7CiAgICBib29sIGludGVybmFsIGxvY2tlZDsKCiAgICBtb2RpZmllciBub1JlZW50cmFudCgpIHsKICAgICAgICByZXF1aXJlKCFsb2NrZWQsICJObyByZS1lbnRyYW5jeSIpOwogICAgICAgIGxvY2tlZCA9IHRydWU7CiAgICAgICAgXzsKICAgICAgICBsb2NrZWQgPSBmYWxzZTsKICAgIH0KfQo="}],Y2=`

    Vulnerability

    +`,Z2=({prev:s,next:a})=>r.jsx(A,{version:u2,title:y2,description:m2,cyfrinLink:b2,html:k2,prev:s,next:a,codes:w2}),W2="0.8.26",G2="Re-Entrancy",B2="An example of re-entrancy attack in Solidity",f2="https://solidity-by-example.org/hacks/re-entrancy/",V2=[{fileName:"ReEntrancy.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNjsKCi8qCkV0aGVyU3RvcmUgaXMgYSBjb250cmFjdCB3aGVyZSB5b3UgY2FuIGRlcG9zaXQgYW5kIHdpdGhkcmF3IEVUSC4KVGhpcyBjb250cmFjdCBpcyB2dWxuZXJhYmxlIHRvIHJlLWVudHJhbmN5IGF0dGFjay4KTGV0J3Mgc2VlIHdoeS4KCjEuIERlcGxveSBFdGhlclN0b3JlCjIuIERlcG9zaXQgMSBFdGhlciBlYWNoIGZyb20gQWNjb3VudCAxIChBbGljZSkgYW5kIEFjY291bnQgMiAoQm9iKSBpbnRvIEV0aGVyU3RvcmUKMy4gRGVwbG95IEF0dGFjayB3aXRoIGFkZHJlc3Mgb2YgRXRoZXJTdG9yZQo0LiBDYWxsIEF0dGFjay5hdHRhY2sgc2VuZGluZyAxIGV0aGVyICh1c2luZyBBY2NvdW50IDMgKEV2ZSkpLgogICBZb3Ugd2lsbCBnZXQgMyBFdGhlcnMgYmFjayAoMiBFdGhlciBzdG9sZW4gZnJvbSBBbGljZSBhbmQgQm9iLAogICBwbHVzIDEgRXRoZXIgc2VudCBmcm9tIHRoaXMgY29udHJhY3QpLgoKV2hhdCBoYXBwZW5lZD8KQXR0YWNrIHdhcyBhYmxlIHRvIGNhbGwgRXRoZXJTdG9yZS53aXRoZHJhdyBtdWx0aXBsZSB0aW1lcyBiZWZvcmUKRXRoZXJTdG9yZS53aXRoZHJhdyBmaW5pc2hlZCBleGVjdXRpbmcuCgpIZXJlIGlzIGhvdyB0aGUgZnVuY3Rpb25zIHdlcmUgY2FsbGVkCi0gQXR0YWNrLmF0dGFjawotIEV0aGVyU3RvcmUuZGVwb3NpdAotIEV0aGVyU3RvcmUud2l0aGRyYXcKLSBBdHRhY2sgZmFsbGJhY2sgKHJlY2VpdmVzIDEgRXRoZXIpCi0gRXRoZXJTdG9yZS53aXRoZHJhdwotIEF0dGFjay5mYWxsYmFjayAocmVjZWl2ZXMgMSBFdGhlcikKLSBFdGhlclN0b3JlLndpdGhkcmF3Ci0gQXR0YWNrIGZhbGxiYWNrIChyZWNlaXZlcyAxIEV0aGVyKQoqLwoKY29udHJhY3QgRXRoZXJTdG9yZSB7CiAgICBtYXBwaW5nKGFkZHJlc3MgPT4gdWludDI1NikgcHVibGljIGJhbGFuY2VzOwoKICAgIGZ1bmN0aW9uIGRlcG9zaXQoKSBwdWJsaWMgcGF5YWJsZSB7CiAgICAgICAgYmFsYW5jZXNbbXNnLnNlbmRlcl0gKz0gbXNnLnZhbHVlOwogICAgfQoKICAgIGZ1bmN0aW9uIHdpdGhkcmF3KCkgcHVibGljIHsKICAgICAgICB1aW50MjU2IGJhbCA9IGJhbGFuY2VzW21zZy5zZW5kZXJdOwogICAgICAgIHJlcXVpcmUoYmFsID4gMCk7CgogICAgICAgIChib29sIHNlbnQsKSA9IG1zZy5zZW5kZXIuY2FsbHt2YWx1ZTogYmFsfSgiIik7CiAgICAgICAgcmVxdWlyZShzZW50LCAiRmFpbGVkIHRvIHNlbmQgRXRoZXIiKTsKCiAgICAgICAgYmFsYW5jZXNbbXNnLnNlbmRlcl0gPSAwOwogICAgfQoKICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayB0aGUgYmFsYW5jZSBvZiB0aGlzIGNvbnRyYWN0CiAgICBmdW5jdGlvbiBnZXRCYWxhbmNlKCkgcHVibGljIHZpZXcgcmV0dXJucyAodWludDI1NikgewogICAgICAgIHJldHVybiBhZGRyZXNzKHRoaXMpLmJhbGFuY2U7CiAgICB9Cn0KCmNvbnRyYWN0IEF0dGFjayB7CiAgICBFdGhlclN0b3JlIHB1YmxpYyBldGhlclN0b3JlOwogICAgdWludDI1NiBwdWJsaWMgY29uc3RhbnQgQU1PVU5UID0gMSBldGhlcjsKCiAgICBjb25zdHJ1Y3RvcihhZGRyZXNzIF9ldGhlclN0b3JlQWRkcmVzcykgewogICAgICAgIGV0aGVyU3RvcmUgPSBFdGhlclN0b3JlKF9ldGhlclN0b3JlQWRkcmVzcyk7CiAgICB9CgogICAgLy8gRmFsbGJhY2sgaXMgY2FsbGVkIHdoZW4gRXRoZXJTdG9yZSBzZW5kcyBFdGhlciB0byB0aGlzIGNvbnRyYWN0LgogICAgZmFsbGJhY2soKSBleHRlcm5hbCBwYXlhYmxlIHsKICAgICAgICBpZiAoYWRkcmVzcyhldGhlclN0b3JlKS5iYWxhbmNlID49IEFNT1VOVCkgewogICAgICAgICAgICBldGhlclN0b3JlLndpdGhkcmF3KCk7CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIGF0dGFjaygpIGV4dGVybmFsIHBheWFibGUgewogICAgICAgIHJlcXVpcmUobXNnLnZhbHVlID49IEFNT1VOVCk7CiAgICAgICAgZXRoZXJTdG9yZS5kZXBvc2l0e3ZhbHVlOiBBTU9VTlR9KCk7CiAgICAgICAgZXRoZXJTdG9yZS53aXRoZHJhdygpOwogICAgfQoKICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayB0aGUgYmFsYW5jZSBvZiB0aGlzIGNvbnRyYWN0CiAgICBmdW5jdGlvbiBnZXRCYWxhbmNlKCkgcHVibGljIHZpZXcgcmV0dXJucyAodWludDI1NikgewogICAgICAgIHJldHVybiBhZGRyZXNzKHRoaXMpLmJhbGFuY2U7CiAgICB9Cn0K"},{fileName:"ReEntrancyGuard.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNjsKCmNvbnRyYWN0IFJlRW50cmFuY3lHdWFyZCB7CiAgICBib29sIGludGVybmFsIGxvY2tlZDsKCiAgICBtb2RpZmllciBub1JlZW50cmFudCgpIHsKICAgICAgICByZXF1aXJlKCFsb2NrZWQsICJObyByZS1lbnRyYW5jeSIpOwogICAgICAgIGxvY2tlZCA9IHRydWU7CiAgICAgICAgXzsKICAgICAgICBsb2NrZWQgPSBmYWxzZTsKICAgIH0KfQo="}],Y2=`

    Vulnerability

    Let's say that contract A calls contract B.

    Reentracy exploit allows B to call back into A before A finishes execution.

    // SPDX-License-Identifier: MIT
    @@ -10874,7 +10874,7 @@ Here is how the functions were called
             locked = false;
         }
     }
    -
    `,R2=({prev:s,next:a})=>r.jsx(A,{version:W2,title:G2,description:B2,cyfrinLink:f2,html:Y2,prev:s,next:a,codes:V2}),X2="0.8.26",v2="Self Destruct",N2="An example of how to delete your smart contract by calling selfdestruct in Solidity",H2="",K2=[{fileName:"ForceEther.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNjsKCi8vIFRoZSBnb2FsIG9mIHRoaXMgZ2FtZSBpcyB0byBiZSB0aGUgN3RoIHBsYXllciB0byBkZXBvc2l0IDEgRXRoZXIuCi8vIFBsYXllcnMgY2FuIGRlcG9zaXQgb25seSAxIEV0aGVyIGF0IGEgdGltZS4KLy8gV2lubmVyIHdpbGwgYmUgYWJsZSB0byB3aXRoZHJhdyBhbGwgRXRoZXIuCgovKgoxLiBEZXBsb3kgRXRoZXJHYW1lCjIuIFBsYXllcnMgKHNheSBBbGljZSBhbmQgQm9iKSBkZWNpZGVzIHRvIHBsYXksIGRlcG9zaXRzIDEgRXRoZXIgZWFjaC4KMi4gRGVwbG95IEF0dGFjayB3aXRoIGFkZHJlc3Mgb2YgRXRoZXJHYW1lCjMuIENhbGwgQXR0YWNrLmF0dGFjayBzZW5kaW5nIDUgZXRoZXIuIFRoaXMgd2lsbCBicmVhayB0aGUgZ2FtZQogICBObyBvbmUgY2FuIGJlY29tZSB0aGUgd2lubmVyLgoKV2hhdCBoYXBwZW5lZD8KQXR0YWNrIGZvcmNlZCB0aGUgYmFsYW5jZSBvZiBFdGhlckdhbWUgdG8gZXF1YWwgNyBldGhlci4KTm93IG5vIG9uZSBjYW4gZGVwb3NpdCBhbmQgdGhlIHdpbm5lciBjYW5ub3QgYmUgc2V0LgoqLwoKY29udHJhY3QgRXRoZXJHYW1lIHsKICAgIHVpbnQyNTYgcHVibGljIGNvbnN0YW50IFRBUkdFVF9BTU9VTlQgPSA3IGV0aGVyOwogICAgYWRkcmVzcyBwdWJsaWMgd2lubmVyOwoKICAgIGZ1bmN0aW9uIGRlcG9zaXQoKSBwdWJsaWMgcGF5YWJsZSB7CiAgICAgICAgcmVxdWlyZShtc2cudmFsdWUgPT0gMSBldGhlciwgIllvdSBjYW4gb25seSBzZW5kIDEgRXRoZXIiKTsKCiAgICAgICAgdWludDI1NiBiYWxhbmNlID0gYWRkcmVzcyh0aGlzKS5iYWxhbmNlOwogICAgICAgIHJlcXVpcmUoYmFsYW5jZSA8PSBUQVJHRVRfQU1PVU5ULCAiR2FtZSBpcyBvdmVyIik7CgogICAgICAgIGlmIChiYWxhbmNlID09IFRBUkdFVF9BTU9VTlQpIHsKICAgICAgICAgICAgd2lubmVyID0gbXNnLnNlbmRlcjsKICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gY2xhaW1SZXdhcmQoKSBwdWJsaWMgewogICAgICAgIHJlcXVpcmUobXNnLnNlbmRlciA9PSB3aW5uZXIsICJOb3Qgd2lubmVyIik7CgogICAgICAgIChib29sIHNlbnQsKSA9IG1zZy5zZW5kZXIuY2FsbHt2YWx1ZTogYWRkcmVzcyh0aGlzKS5iYWxhbmNlfSgiIik7CiAgICAgICAgcmVxdWlyZShzZW50LCAiRmFpbGVkIHRvIHNlbmQgRXRoZXIiKTsKICAgIH0KfQoKY29udHJhY3QgQXR0YWNrIHsKICAgIEV0aGVyR2FtZSBldGhlckdhbWU7CgogICAgY29uc3RydWN0b3IoRXRoZXJHYW1lIF9ldGhlckdhbWUpIHsKICAgICAgICBldGhlckdhbWUgPSBFdGhlckdhbWUoX2V0aGVyR2FtZSk7CiAgICB9CgogICAgZnVuY3Rpb24gYXR0YWNrKCkgcHVibGljIHBheWFibGUgewogICAgICAgIC8vIFlvdSBjYW4gc2ltcGx5IGJyZWFrIHRoZSBnYW1lIGJ5IHNlbmRpbmcgZXRoZXIgc28gdGhhdAogICAgICAgIC8vIHRoZSBnYW1lIGJhbGFuY2UgPj0gNyBldGhlcgoKICAgICAgICAvLyBjYXN0IGFkZHJlc3MgdG8gcGF5YWJsZQogICAgICAgIGFkZHJlc3MgcGF5YWJsZSBhZGRyID0gcGF5YWJsZShhZGRyZXNzKGV0aGVyR2FtZSkpOwogICAgICAgIHNlbGZkZXN0cnVjdChhZGRyKTsKICAgIH0KfQo="},{fileName:"PreventForceEther.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNjsKCmNvbnRyYWN0IEV0aGVyR2FtZSB7CiAgICB1aW50MjU2IHB1YmxpYyBjb25zdGFudCBUQVJHRVRfQU1PVU5UID0gNyBldGhlcjsKICAgIHVpbnQyNTYgcHVibGljIGJhbGFuY2U7CiAgICBhZGRyZXNzIHB1YmxpYyB3aW5uZXI7CgogICAgZnVuY3Rpb24gZGVwb3NpdCgpIHB1YmxpYyBwYXlhYmxlIHsKICAgICAgICByZXF1aXJlKG1zZy52YWx1ZSA9PSAxIGV0aGVyLCAiWW91IGNhbiBvbmx5IHNlbmQgMSBFdGhlciIpOwoKICAgICAgICBiYWxhbmNlICs9IG1zZy52YWx1ZTsKICAgICAgICByZXF1aXJlKGJhbGFuY2UgPD0gVEFSR0VUX0FNT1VOVCwgIkdhbWUgaXMgb3ZlciIpOwoKICAgICAgICBpZiAoYmFsYW5jZSA9PSBUQVJHRVRfQU1PVU5UKSB7CiAgICAgICAgICAgIHdpbm5lciA9IG1zZy5zZW5kZXI7CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIGNsYWltUmV3YXJkKCkgcHVibGljIHsKICAgICAgICByZXF1aXJlKG1zZy5zZW5kZXIgPT0gd2lubmVyLCAiTm90IHdpbm5lciIpOwogICAgICAgIHVpbnQyNTYgYW1vdW50ID0gYmFsYW5jZTsKICAgICAgICBiYWxhbmNlID0gMDsKICAgICAgICAoYm9vbCBzZW50LCkgPSBtc2cuc2VuZGVyLmNhbGx7dmFsdWU6IGFtb3VudH0oIiIpOwogICAgICAgIHJlcXVpcmUoc2VudCwgIkZhaWxlZCB0byBzZW5kIEV0aGVyIik7CiAgICB9Cn0K"}],F2=`

    Contracts can be deleted from the blockchain by calling selfdestruct.

    +
    `,R2=({prev:s,next:a})=>r.jsx(A,{version:W2,title:G2,description:B2,cyfrinLink:f2,html:Y2,prev:s,next:a,codes:V2}),X2="0.8.26",v2="Self Destruct",N2="An example of how to delete your smart contract by calling selfdestruct in Solidity",H2="https://solidity-by-example.org/hacks/self-destruct/",K2=[{fileName:"ForceEther.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNjsKCi8vIFRoZSBnb2FsIG9mIHRoaXMgZ2FtZSBpcyB0byBiZSB0aGUgN3RoIHBsYXllciB0byBkZXBvc2l0IDEgRXRoZXIuCi8vIFBsYXllcnMgY2FuIGRlcG9zaXQgb25seSAxIEV0aGVyIGF0IGEgdGltZS4KLy8gV2lubmVyIHdpbGwgYmUgYWJsZSB0byB3aXRoZHJhdyBhbGwgRXRoZXIuCgovKgoxLiBEZXBsb3kgRXRoZXJHYW1lCjIuIFBsYXllcnMgKHNheSBBbGljZSBhbmQgQm9iKSBkZWNpZGVzIHRvIHBsYXksIGRlcG9zaXRzIDEgRXRoZXIgZWFjaC4KMi4gRGVwbG95IEF0dGFjayB3aXRoIGFkZHJlc3Mgb2YgRXRoZXJHYW1lCjMuIENhbGwgQXR0YWNrLmF0dGFjayBzZW5kaW5nIDUgZXRoZXIuIFRoaXMgd2lsbCBicmVhayB0aGUgZ2FtZQogICBObyBvbmUgY2FuIGJlY29tZSB0aGUgd2lubmVyLgoKV2hhdCBoYXBwZW5lZD8KQXR0YWNrIGZvcmNlZCB0aGUgYmFsYW5jZSBvZiBFdGhlckdhbWUgdG8gZXF1YWwgNyBldGhlci4KTm93IG5vIG9uZSBjYW4gZGVwb3NpdCBhbmQgdGhlIHdpbm5lciBjYW5ub3QgYmUgc2V0LgoqLwoKY29udHJhY3QgRXRoZXJHYW1lIHsKICAgIHVpbnQyNTYgcHVibGljIGNvbnN0YW50IFRBUkdFVF9BTU9VTlQgPSA3IGV0aGVyOwogICAgYWRkcmVzcyBwdWJsaWMgd2lubmVyOwoKICAgIGZ1bmN0aW9uIGRlcG9zaXQoKSBwdWJsaWMgcGF5YWJsZSB7CiAgICAgICAgcmVxdWlyZShtc2cudmFsdWUgPT0gMSBldGhlciwgIllvdSBjYW4gb25seSBzZW5kIDEgRXRoZXIiKTsKCiAgICAgICAgdWludDI1NiBiYWxhbmNlID0gYWRkcmVzcyh0aGlzKS5iYWxhbmNlOwogICAgICAgIHJlcXVpcmUoYmFsYW5jZSA8PSBUQVJHRVRfQU1PVU5ULCAiR2FtZSBpcyBvdmVyIik7CgogICAgICAgIGlmIChiYWxhbmNlID09IFRBUkdFVF9BTU9VTlQpIHsKICAgICAgICAgICAgd2lubmVyID0gbXNnLnNlbmRlcjsKICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gY2xhaW1SZXdhcmQoKSBwdWJsaWMgewogICAgICAgIHJlcXVpcmUobXNnLnNlbmRlciA9PSB3aW5uZXIsICJOb3Qgd2lubmVyIik7CgogICAgICAgIChib29sIHNlbnQsKSA9IG1zZy5zZW5kZXIuY2FsbHt2YWx1ZTogYWRkcmVzcyh0aGlzKS5iYWxhbmNlfSgiIik7CiAgICAgICAgcmVxdWlyZShzZW50LCAiRmFpbGVkIHRvIHNlbmQgRXRoZXIiKTsKICAgIH0KfQoKY29udHJhY3QgQXR0YWNrIHsKICAgIEV0aGVyR2FtZSBldGhlckdhbWU7CgogICAgY29uc3RydWN0b3IoRXRoZXJHYW1lIF9ldGhlckdhbWUpIHsKICAgICAgICBldGhlckdhbWUgPSBFdGhlckdhbWUoX2V0aGVyR2FtZSk7CiAgICB9CgogICAgZnVuY3Rpb24gYXR0YWNrKCkgcHVibGljIHBheWFibGUgewogICAgICAgIC8vIFlvdSBjYW4gc2ltcGx5IGJyZWFrIHRoZSBnYW1lIGJ5IHNlbmRpbmcgZXRoZXIgc28gdGhhdAogICAgICAgIC8vIHRoZSBnYW1lIGJhbGFuY2UgPj0gNyBldGhlcgoKICAgICAgICAvLyBjYXN0IGFkZHJlc3MgdG8gcGF5YWJsZQogICAgICAgIGFkZHJlc3MgcGF5YWJsZSBhZGRyID0gcGF5YWJsZShhZGRyZXNzKGV0aGVyR2FtZSkpOwogICAgICAgIHNlbGZkZXN0cnVjdChhZGRyKTsKICAgIH0KfQo="},{fileName:"PreventForceEther.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNjsKCmNvbnRyYWN0IEV0aGVyR2FtZSB7CiAgICB1aW50MjU2IHB1YmxpYyBjb25zdGFudCBUQVJHRVRfQU1PVU5UID0gNyBldGhlcjsKICAgIHVpbnQyNTYgcHVibGljIGJhbGFuY2U7CiAgICBhZGRyZXNzIHB1YmxpYyB3aW5uZXI7CgogICAgZnVuY3Rpb24gZGVwb3NpdCgpIHB1YmxpYyBwYXlhYmxlIHsKICAgICAgICByZXF1aXJlKG1zZy52YWx1ZSA9PSAxIGV0aGVyLCAiWW91IGNhbiBvbmx5IHNlbmQgMSBFdGhlciIpOwoKICAgICAgICBiYWxhbmNlICs9IG1zZy52YWx1ZTsKICAgICAgICByZXF1aXJlKGJhbGFuY2UgPD0gVEFSR0VUX0FNT1VOVCwgIkdhbWUgaXMgb3ZlciIpOwoKICAgICAgICBpZiAoYmFsYW5jZSA9PSBUQVJHRVRfQU1PVU5UKSB7CiAgICAgICAgICAgIHdpbm5lciA9IG1zZy5zZW5kZXI7CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIGNsYWltUmV3YXJkKCkgcHVibGljIHsKICAgICAgICByZXF1aXJlKG1zZy5zZW5kZXIgPT0gd2lubmVyLCAiTm90IHdpbm5lciIpOwogICAgICAgIHVpbnQyNTYgYW1vdW50ID0gYmFsYW5jZTsKICAgICAgICBiYWxhbmNlID0gMDsKICAgICAgICAoYm9vbCBzZW50LCkgPSBtc2cuc2VuZGVyLmNhbGx7dmFsdWU6IGFtb3VudH0oIiIpOwogICAgICAgIHJlcXVpcmUoc2VudCwgIkZhaWxlZCB0byBzZW5kIEV0aGVyIik7CiAgICB9Cn0K"}],F2=`

    Contracts can be deleted from the blockchain by calling selfdestruct.

    selfdestruct sends all remaining Ether stored in the contract to a designated address.

    Vulnerability

    @@ -10967,7 +10967,7 @@ Now no one can deposit and the winner cannot be set. require(sent, "Failed to send Ether"); } } -`,M2=({prev:s,next:a})=>r.jsx(A,{version:X2,title:v2,description:N2,cyfrinLink:H2,html:F2,prev:s,next:a,codes:K2}),S2="0.8.26",x2="Signature Replay",J2="An example of a contract vulnerable to signature replay attack",z2="",D2=[{fileName:"ECDSA.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNjsKCi8vIE9wZW5aZXBwZWxpbiBDb250cmFjdHMgKGxhc3QgdXBkYXRlZCB2NC41LjApICh1dGlscy9jcnlwdG9ncmFwaHkvRUNEU0Euc29sKQoKbGlicmFyeSBFQ0RTQSB7CiAgICBlbnVtIFJlY292ZXJFcnJvciB7CiAgICAgICAgTm9FcnJvciwKICAgICAgICBJbnZhbGlkU2lnbmF0dXJlLAogICAgICAgIEludmFsaWRTaWduYXR1cmVMZW5ndGgsCiAgICAgICAgSW52YWxpZFNpZ25hdHVyZVMsCiAgICAgICAgSW52YWxpZFNpZ25hdHVyZVYKICAgIH0KCiAgICBmdW5jdGlvbiBfdGhyb3dFcnJvcihSZWNvdmVyRXJyb3IgZXJyb3IpIHByaXZhdGUgcHVyZSB7CiAgICAgICAgaWYgKGVycm9yID09IFJlY292ZXJFcnJvci5Ob0Vycm9yKSB7CiAgICAgICAgICAgIHJldHVybjsgLy8gbm8gZXJyb3I6IGRvIG5vdGhpbmcKICAgICAgICB9IGVsc2UgaWYgKGVycm9yID09IFJlY292ZXJFcnJvci5JbnZhbGlkU2lnbmF0dXJlKSB7CiAgICAgICAgICAgIHJldmVydCgiRUNEU0E6IGludmFsaWQgc2lnbmF0dXJlIik7CiAgICAgICAgfSBlbHNlIGlmIChlcnJvciA9PSBSZWNvdmVyRXJyb3IuSW52YWxpZFNpZ25hdHVyZUxlbmd0aCkgewogICAgICAgICAgICByZXZlcnQoIkVDRFNBOiBpbnZhbGlkIHNpZ25hdHVyZSBsZW5ndGgiKTsKICAgICAgICB9IGVsc2UgaWYgKGVycm9yID09IFJlY292ZXJFcnJvci5JbnZhbGlkU2lnbmF0dXJlUykgewogICAgICAgICAgICByZXZlcnQoIkVDRFNBOiBpbnZhbGlkIHNpZ25hdHVyZSAncycgdmFsdWUiKTsKICAgICAgICB9IGVsc2UgaWYgKGVycm9yID09IFJlY292ZXJFcnJvci5JbnZhbGlkU2lnbmF0dXJlVikgewogICAgICAgICAgICByZXZlcnQoIkVDRFNBOiBpbnZhbGlkIHNpZ25hdHVyZSAndicgdmFsdWUiKTsKICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gdHJ5UmVjb3ZlcihieXRlczMyIGhhc2gsIGJ5dGVzIG1lbW9yeSBzaWduYXR1cmUpCiAgICAgICAgaW50ZXJuYWwKICAgICAgICBwdXJlCiAgICAgICAgcmV0dXJucyAoYWRkcmVzcywgUmVjb3ZlckVycm9yKQogICAgewogICAgICAgIC8vIENoZWNrIHRoZSBzaWduYXR1cmUgbGVuZ3RoCiAgICAgICAgLy8gLSBjYXNlIDY1OiByLHMsdiBzaWduYXR1cmUgKHN0YW5kYXJkKQogICAgICAgIC8vIC0gY2FzZSA2NDogcix2cyBzaWduYXR1cmUgKGNmIGh0dHBzOi8vZWlwcy5ldGhlcmV1bS5vcmcvRUlQUy9laXAtMjA5OCkgX0F2YWlsYWJsZSBzaW5jZSB2NC4xLl8KICAgICAgICBpZiAoc2lnbmF0dXJlLmxlbmd0aCA9PSA2NSkgewogICAgICAgICAgICBieXRlczMyIHI7CiAgICAgICAgICAgIGJ5dGVzMzIgczsKICAgICAgICAgICAgdWludDggdjsKICAgICAgICAgICAgLy8gZWNyZWNvdmVyIHRha2VzIHRoZSBzaWduYXR1cmUgcGFyYW1ldGVycywgYW5kIHRoZSBvbmx5IHdheSB0byBnZXQgdGhlbQogICAgICAgICAgICAvLyBjdXJyZW50bHkgaXMgdG8gdXNlIGFzc2VtYmx5LgogICAgICAgICAgICBhc3NlbWJseSB7CiAgICAgICAgICAgICAgICByIDo9IG1sb2FkKGFkZChzaWduYXR1cmUsIDB4MjApKQogICAgICAgICAgICAgICAgcyA6PSBtbG9hZChhZGQoc2lnbmF0dXJlLCAweDQwKSkKICAgICAgICAgICAgICAgIHYgOj0gYnl0ZSgwLCBtbG9hZChhZGQoc2lnbmF0dXJlLCAweDYwKSkpCiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHRyeVJlY292ZXIoaGFzaCwgdiwgciwgcyk7CiAgICAgICAgfSBlbHNlIGlmIChzaWduYXR1cmUubGVuZ3RoID09IDY0KSB7CiAgICAgICAgICAgIGJ5dGVzMzIgcjsKICAgICAgICAgICAgYnl0ZXMzMiB2czsKICAgICAgICAgICAgLy8gZWNyZWNvdmVyIHRha2VzIHRoZSBzaWduYXR1cmUgcGFyYW1ldGVycywgYW5kIHRoZSBvbmx5IHdheSB0byBnZXQgdGhlbQogICAgICAgICAgICAvLyBjdXJyZW50bHkgaXMgdG8gdXNlIGFzc2VtYmx5LgogICAgICAgICAgICBhc3NlbWJseSB7CiAgICAgICAgICAgICAgICByIDo9IG1sb2FkKGFkZChzaWduYXR1cmUsIDB4MjApKQogICAgICAgICAgICAgICAgdnMgOj0gbWxvYWQoYWRkKHNpZ25hdHVyZSwgMHg0MCkpCiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHRyeVJlY292ZXIoaGFzaCwgciwgdnMpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiAoYWRkcmVzcygwKSwgUmVjb3ZlckVycm9yLkludmFsaWRTaWduYXR1cmVMZW5ndGgpOwogICAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiByZWNvdmVyKGJ5dGVzMzIgaGFzaCwgYnl0ZXMgbWVtb3J5IHNpZ25hdHVyZSkKICAgICAgICBpbnRlcm5hbAogICAgICAgIHB1cmUKICAgICAgICByZXR1cm5zIChhZGRyZXNzKQogICAgewogICAgICAgIChhZGRyZXNzIHJlY292ZXJlZCwgUmVjb3ZlckVycm9yIGVycm9yKSA9IHRyeVJlY292ZXIoaGFzaCwgc2lnbmF0dXJlKTsKICAgICAgICBfdGhyb3dFcnJvcihlcnJvcik7CiAgICAgICAgcmV0dXJuIHJlY292ZXJlZDsKICAgIH0KCiAgICBmdW5jdGlvbiB0cnlSZWNvdmVyKGJ5dGVzMzIgaGFzaCwgYnl0ZXMzMiByLCBieXRlczMyIHZzKQogICAgICAgIGludGVybmFsCiAgICAgICAgcHVyZQogICAgICAgIHJldHVybnMgKGFkZHJlc3MsIFJlY292ZXJFcnJvcikKICAgIHsKICAgICAgICBieXRlczMyIHMgPSB2cwogICAgICAgICAgICAmIGJ5dGVzMzIoCiAgICAgICAgICAgICAgICAweDdmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYKICAgICAgICAgICAgKTsKICAgICAgICB1aW50OCB2ID0gdWludDgoKHVpbnQyNTYodnMpID4+IDI1NSkgKyAyNyk7CiAgICAgICAgcmV0dXJuIHRyeVJlY292ZXIoaGFzaCwgdiwgciwgcyk7CiAgICB9CgogICAgZnVuY3Rpb24gcmVjb3ZlcihieXRlczMyIGhhc2gsIGJ5dGVzMzIgciwgYnl0ZXMzMiB2cykKICAgICAgICBpbnRlcm5hbAogICAgICAgIHB1cmUKICAgICAgICByZXR1cm5zIChhZGRyZXNzKQogICAgewogICAgICAgIChhZGRyZXNzIHJlY292ZXJlZCwgUmVjb3ZlckVycm9yIGVycm9yKSA9IHRyeVJlY292ZXIoaGFzaCwgciwgdnMpOwogICAgICAgIF90aHJvd0Vycm9yKGVycm9yKTsKICAgICAgICByZXR1cm4gcmVjb3ZlcmVkOwogICAgfQoKICAgIGZ1bmN0aW9uIHRyeVJlY292ZXIoYnl0ZXMzMiBoYXNoLCB1aW50OCB2LCBieXRlczMyIHIsIGJ5dGVzMzIgcykKICAgICAgICBpbnRlcm5hbAogICAgICAgIHB1cmUKICAgICAgICByZXR1cm5zIChhZGRyZXNzLCBSZWNvdmVyRXJyb3IpCiAgICB7CiAgICAgICAgLy8gRUlQLTIgc3RpbGwgYWxsb3dzIHNpZ25hdHVyZSBtYWxsZWFiaWxpdHkgZm9yIGVjcmVjb3ZlcigpLiBSZW1vdmUgdGhpcyBwb3NzaWJpbGl0eSBhbmQgbWFrZSB0aGUgc2lnbmF0dXJlCiAgICAgICAgLy8gdW5pcXVlLiBBcHBlbmRpeCBGIGluIHRoZSBFdGhlcmV1bSBZZWxsb3cgcGFwZXIgKGh0dHBzOi8vZXRoZXJldW0uZ2l0aHViLmlvL3llbGxvd3BhcGVyL3BhcGVyLnBkZiksIGRlZmluZXMKICAgICAgICAvLyB0aGUgdmFsaWQgcmFuZ2UgZm9yIHMgaW4gKDMwMSk6IDAgPCBzIDwgc2VjcDI1NmsxbiDDtyAyICsgMSwgYW5kIGZvciB2IGluICgzMDIpOiB2IOKIiCB7MjcsIDI4fS4gTW9zdAogICAgICAgIC8vIHNpZ25hdHVyZXMgZnJvbSBjdXJyZW50IGxpYnJhcmllcyBnZW5lcmF0ZSBhIHVuaXF1ZSBzaWduYXR1cmUgd2l0aCBhbiBzLXZhbHVlIGluIHRoZSBsb3dlciBoYWxmIG9yZGVyLgogICAgICAgIC8vCiAgICAgICAgLy8gSWYgeW91ciBsaWJyYXJ5IGdlbmVyYXRlcyBtYWxsZWFibGUgc2lnbmF0dXJlcywgc3VjaCBhcyBzLXZhbHVlcyBpbiB0aGUgdXBwZXIgcmFuZ2UsIGNhbGN1bGF0ZSBhIG5ldyBzLXZhbHVlCiAgICAgICAgLy8gd2l0aCAweEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFQkFBRURDRTZBRjQ4QTAzQkJGRDI1RThDRDAzNjQxNDEgLSBzMSBhbmQgZmxpcCB2IGZyb20gMjcgdG8gMjggb3IKICAgICAgICAvLyB2aWNlIHZlcnNhLiBJZiB5b3VyIGxpYnJhcnkgYWxzbyBnZW5lcmF0ZXMgc2lnbmF0dXJlcyB3aXRoIDAvMSBmb3IgdiBpbnN0ZWFkIDI3LzI4LCBhZGQgMjcgdG8gdiB0byBhY2NlcHQKICAgICAgICAvLyB0aGVzZSBtYWxsZWFibGUgc2lnbmF0dXJlcyBhcyB3ZWxsLgogICAgICAgIGlmICgKICAgICAgICAgICAgdWludDI1NihzKQogICAgICAgICAgICAgICAgPiAweDdGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGNUQ1NzZFNzM1N0E0NTAxRERGRTkyRjQ2NjgxQjIwQTAKICAgICAgICApIHsKICAgICAgICAgICAgcmV0dXJuIChhZGRyZXNzKDApLCBSZWNvdmVyRXJyb3IuSW52YWxpZFNpZ25hdHVyZVMpOwogICAgICAgIH0KICAgICAgICBpZiAodiAhPSAyNyAmJiB2ICE9IDI4KSB7CiAgICAgICAgICAgIHJldHVybiAoYWRkcmVzcygwKSwgUmVjb3ZlckVycm9yLkludmFsaWRTaWduYXR1cmVWKTsKICAgICAgICB9CgogICAgICAgIC8vIElmIHRoZSBzaWduYXR1cmUgaXMgdmFsaWQgKGFuZCBub3QgbWFsbGVhYmxlKSwgcmV0dXJuIHRoZSBzaWduZXIgYWRkcmVzcwogICAgICAgIGFkZHJlc3Mgc2lnbmVyID0gZWNyZWNvdmVyKGhhc2gsIHYsIHIsIHMpOwogICAgICAgIGlmIChzaWduZXIgPT0gYWRkcmVzcygwKSkgewogICAgICAgICAgICByZXR1cm4gKGFkZHJlc3MoMCksIFJlY292ZXJFcnJvci5JbnZhbGlkU2lnbmF0dXJlKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAoc2lnbmVyLCBSZWNvdmVyRXJyb3IuTm9FcnJvcik7CiAgICB9CgogICAgZnVuY3Rpb24gcmVjb3ZlcihieXRlczMyIGhhc2gsIHVpbnQ4IHYsIGJ5dGVzMzIgciwgYnl0ZXMzMiBzKQogICAgICAgIGludGVybmFsCiAgICAgICAgcHVyZQogICAgICAgIHJldHVybnMgKGFkZHJlc3MpCiAgICB7CiAgICAgICAgKGFkZHJlc3MgcmVjb3ZlcmVkLCBSZWNvdmVyRXJyb3IgZXJyb3IpID0gdHJ5UmVjb3ZlcihoYXNoLCB2LCByLCBzKTsKICAgICAgICBfdGhyb3dFcnJvcihlcnJvcik7CiAgICAgICAgcmV0dXJuIHJlY292ZXJlZDsKICAgIH0KCiAgICBmdW5jdGlvbiB0b0V0aFNpZ25lZE1lc3NhZ2VIYXNoKGJ5dGVzMzIgaGFzaCkKICAgICAgICBpbnRlcm5hbAogICAgICAgIHB1cmUKICAgICAgICByZXR1cm5zIChieXRlczMyKQogICAgewogICAgICAgIC8vIDMyIGlzIHRoZSBsZW5ndGggaW4gYnl0ZXMgb2YgaGFzaCwKICAgICAgICAvLyBlbmZvcmNlZCBieSB0aGUgdHlwZSBzaWduYXR1cmUgYWJvdmUKICAgICAgICByZXR1cm4ga2VjY2FrMjU2KAogICAgICAgICAgICBhYmkuZW5jb2RlUGFja2VkKCJceDE5RXRoZXJldW0gU2lnbmVkIE1lc3NhZ2U6XG4zMiIsIGhhc2gpCiAgICAgICAgKTsKICAgIH0KfQo="},{fileName:"PreventSigReplay.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNjsKCmltcG9ydCAiLi9FQ0RTQS5zb2wiOwoKY29udHJhY3QgTXVsdGlTaWdXYWxsZXQgewogICAgdXNpbmcgRUNEU0EgZm9yIGJ5dGVzMzI7CgogICAgYWRkcmVzc1syXSBwdWJsaWMgb3duZXJzOwogICAgbWFwcGluZyhieXRlczMyID0+IGJvb2wpIHB1YmxpYyBleGVjdXRlZDsKCiAgICBjb25zdHJ1Y3RvcihhZGRyZXNzWzJdIG1lbW9yeSBfb3duZXJzKSBwYXlhYmxlIHsKICAgICAgICBvd25lcnMgPSBfb3duZXJzOwogICAgfQoKICAgIGZ1bmN0aW9uIGRlcG9zaXQoKSBleHRlcm5hbCBwYXlhYmxlIHt9CgogICAgZnVuY3Rpb24gdHJhbnNmZXIoCiAgICAgICAgYWRkcmVzcyBfdG8sCiAgICAgICAgdWludDI1NiBfYW1vdW50LAogICAgICAgIHVpbnQyNTYgX25vbmNlLAogICAgICAgIGJ5dGVzWzJdIG1lbW9yeSBfc2lncwogICAgKSBleHRlcm5hbCB7CiAgICAgICAgYnl0ZXMzMiB0eEhhc2ggPSBnZXRUeEhhc2goX3RvLCBfYW1vdW50LCBfbm9uY2UpOwogICAgICAgIHJlcXVpcmUoIWV4ZWN1dGVkW3R4SGFzaF0sICJ0eCBleGVjdXRlZCIpOwogICAgICAgIHJlcXVpcmUoX2NoZWNrU2lncyhfc2lncywgdHhIYXNoKSwgImludmFsaWQgc2lnIik7CgogICAgICAgIGV4ZWN1dGVkW3R4SGFzaF0gPSB0cnVlOwoKICAgICAgICAoYm9vbCBzZW50LCkgPSBfdG8uY2FsbHt2YWx1ZTogX2Ftb3VudH0oIiIpOwogICAgICAgIHJlcXVpcmUoc2VudCwgIkZhaWxlZCB0byBzZW5kIEV0aGVyIik7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0VHhIYXNoKGFkZHJlc3MgX3RvLCB1aW50MjU2IF9hbW91bnQsIHVpbnQyNTYgX25vbmNlKQogICAgICAgIHB1YmxpYwogICAgICAgIHZpZXcKICAgICAgICByZXR1cm5zIChieXRlczMyKQogICAgewogICAgICAgIHJldHVybiBrZWNjYWsyNTYoYWJpLmVuY29kZVBhY2tlZChhZGRyZXNzKHRoaXMpLCBfdG8sIF9hbW91bnQsIF9ub25jZSkpOwogICAgfQoKICAgIGZ1bmN0aW9uIF9jaGVja1NpZ3MoYnl0ZXNbMl0gbWVtb3J5IF9zaWdzLCBieXRlczMyIF90eEhhc2gpCiAgICAgICAgcHJpdmF0ZQogICAgICAgIHZpZXcKICAgICAgICByZXR1cm5zIChib29sKQogICAgewogICAgICAgIGJ5dGVzMzIgZXRoU2lnbmVkSGFzaCA9IF90eEhhc2gudG9FdGhTaWduZWRNZXNzYWdlSGFzaCgpOwoKICAgICAgICBmb3IgKHVpbnQyNTYgaSA9IDA7IGkgPCBfc2lncy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBhZGRyZXNzIHNpZ25lciA9IGV0aFNpZ25lZEhhc2gucmVjb3Zlcihfc2lnc1tpXSk7CiAgICAgICAgICAgIGJvb2wgdmFsaWQgPSBzaWduZXIgPT0gb3duZXJzW2ldOwoKICAgICAgICAgICAgaWYgKCF2YWxpZCkgewogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KfQoKLyoKLy8gb3duZXJzCjB4ZTE5YWVhOTNGNkMxZEJlZjZBMzc3Njg0OGJFMDk5QTdjMzI1M2FjOAoweGZhODU0RkU1MzM5ODQzYjNlOUJmZDg1NTRCMzhCRDA0MkE0MmUzNDAKCi8vIHRvCjB4ZTEwNDIyY2M2MTAzMEM4QjNkQkNEMzZjN2U3ZThFQzNCNTI3RTBBYwovLyBhbW91bnQKMTAwCi8vIG5vbmNlCjAKLy8gdHggaGFzaAoweDEyYTA5NTQ2MmViZmNhMjdkYzRkOTlmZWVmODg1YmZlNTgzNDRmYjZiYjQyYzNjNTJhN2MwZDY4MzZkMTE0NDgKCi8vIHNpZ25hdHVyZXMKMHgxMjBmOGVkOGYyZmE1NTQ5OGYyZWYwYTIyZjI2ZTM5YjliNTFlZDI5Y2M5M2ZlMGVmM2VkMTc1NmY1OGZhZDBjNmViNWExZDZmMzY3MWY4ZDUxNjM2MzlmZGM0MGJiODcyMGRlNmQ4ZjI1MjMwNzdhZDZkMTEzOGE2MDkyM2I4MDFjCjB4YTI0MGE0ODdkZTFlYjViYjk3MWU5MjBjYjA2NzdhNDdkZGM2NDIxZTM4ZjdiMDQ4ZjhhYTg4MjY2YjJjODg0YTEwNDU1YTUyZGM3NmEyMDNhMWE5YTk1MzQxODQ2OWY5ZWVjMmM1OWU4NzIwMWJiYzhkYjBlNGQ5Nzk2OTM1Y2IxYgoqLwo="},{fileName:"SigReplay.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNjsKCmltcG9ydCAiLi9FQ0RTQS5zb2wiOwoKY29udHJhY3QgTXVsdGlTaWdXYWxsZXQgewogICAgdXNpbmcgRUNEU0EgZm9yIGJ5dGVzMzI7CgogICAgYWRkcmVzc1syXSBwdWJsaWMgb3duZXJzOwoKICAgIGNvbnN0cnVjdG9yKGFkZHJlc3NbMl0gbWVtb3J5IF9vd25lcnMpIHBheWFibGUgewogICAgICAgIG93bmVycyA9IF9vd25lcnM7CiAgICB9CgogICAgZnVuY3Rpb24gZGVwb3NpdCgpIGV4dGVybmFsIHBheWFibGUge30KCiAgICBmdW5jdGlvbiB0cmFuc2ZlcihhZGRyZXNzIF90bywgdWludDI1NiBfYW1vdW50LCBieXRlc1syXSBtZW1vcnkgX3NpZ3MpCiAgICAgICAgZXh0ZXJuYWwKICAgIHsKICAgICAgICBieXRlczMyIHR4SGFzaCA9IGdldFR4SGFzaChfdG8sIF9hbW91bnQpOwogICAgICAgIHJlcXVpcmUoX2NoZWNrU2lncyhfc2lncywgdHhIYXNoKSwgImludmFsaWQgc2lnIik7CgogICAgICAgIChib29sIHNlbnQsKSA9IF90by5jYWxse3ZhbHVlOiBfYW1vdW50fSgiIik7CiAgICAgICAgcmVxdWlyZShzZW50LCAiRmFpbGVkIHRvIHNlbmQgRXRoZXIiKTsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRUeEhhc2goYWRkcmVzcyBfdG8sIHVpbnQyNTYgX2Ftb3VudCkKICAgICAgICBwdWJsaWMKICAgICAgICB2aWV3CiAgICAgICAgcmV0dXJucyAoYnl0ZXMzMikKICAgIHsKICAgICAgICByZXR1cm4ga2VjY2FrMjU2KGFiaS5lbmNvZGVQYWNrZWQoX3RvLCBfYW1vdW50KSk7CiAgICB9CgogICAgZnVuY3Rpb24gX2NoZWNrU2lncyhieXRlc1syXSBtZW1vcnkgX3NpZ3MsIGJ5dGVzMzIgX3R4SGFzaCkKICAgICAgICBwcml2YXRlCiAgICAgICAgdmlldwogICAgICAgIHJldHVybnMgKGJvb2wpCiAgICB7CiAgICAgICAgYnl0ZXMzMiBldGhTaWduZWRIYXNoID0gX3R4SGFzaC50b0V0aFNpZ25lZE1lc3NhZ2VIYXNoKCk7CgogICAgICAgIGZvciAodWludDI1NiBpID0gMDsgaSA8IF9zaWdzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGFkZHJlc3Mgc2lnbmVyID0gZXRoU2lnbmVkSGFzaC5yZWNvdmVyKF9zaWdzW2ldKTsKICAgICAgICAgICAgYm9vbCB2YWxpZCA9IHNpZ25lciA9PSBvd25lcnNbaV07CgogICAgICAgICAgICBpZiAoIXZhbGlkKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQp9Cg=="}],E2=`

    Signing messages off-chain and having a contract that requires that signature before executing +`,M2=({prev:s,next:a})=>r.jsx(A,{version:X2,title:v2,description:N2,cyfrinLink:H2,html:F2,prev:s,next:a,codes:K2}),S2="0.8.26",x2="Signature Replay",J2="An example of a contract vulnerable to signature replay attack",z2="https://solidity-by-example.org/hacks/signature-replay/",D2=[{fileName:"ECDSA.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNjsKCi8vIE9wZW5aZXBwZWxpbiBDb250cmFjdHMgKGxhc3QgdXBkYXRlZCB2NC41LjApICh1dGlscy9jcnlwdG9ncmFwaHkvRUNEU0Euc29sKQoKbGlicmFyeSBFQ0RTQSB7CiAgICBlbnVtIFJlY292ZXJFcnJvciB7CiAgICAgICAgTm9FcnJvciwKICAgICAgICBJbnZhbGlkU2lnbmF0dXJlLAogICAgICAgIEludmFsaWRTaWduYXR1cmVMZW5ndGgsCiAgICAgICAgSW52YWxpZFNpZ25hdHVyZVMsCiAgICAgICAgSW52YWxpZFNpZ25hdHVyZVYKICAgIH0KCiAgICBmdW5jdGlvbiBfdGhyb3dFcnJvcihSZWNvdmVyRXJyb3IgZXJyb3IpIHByaXZhdGUgcHVyZSB7CiAgICAgICAgaWYgKGVycm9yID09IFJlY292ZXJFcnJvci5Ob0Vycm9yKSB7CiAgICAgICAgICAgIHJldHVybjsgLy8gbm8gZXJyb3I6IGRvIG5vdGhpbmcKICAgICAgICB9IGVsc2UgaWYgKGVycm9yID09IFJlY292ZXJFcnJvci5JbnZhbGlkU2lnbmF0dXJlKSB7CiAgICAgICAgICAgIHJldmVydCgiRUNEU0E6IGludmFsaWQgc2lnbmF0dXJlIik7CiAgICAgICAgfSBlbHNlIGlmIChlcnJvciA9PSBSZWNvdmVyRXJyb3IuSW52YWxpZFNpZ25hdHVyZUxlbmd0aCkgewogICAgICAgICAgICByZXZlcnQoIkVDRFNBOiBpbnZhbGlkIHNpZ25hdHVyZSBsZW5ndGgiKTsKICAgICAgICB9IGVsc2UgaWYgKGVycm9yID09IFJlY292ZXJFcnJvci5JbnZhbGlkU2lnbmF0dXJlUykgewogICAgICAgICAgICByZXZlcnQoIkVDRFNBOiBpbnZhbGlkIHNpZ25hdHVyZSAncycgdmFsdWUiKTsKICAgICAgICB9IGVsc2UgaWYgKGVycm9yID09IFJlY292ZXJFcnJvci5JbnZhbGlkU2lnbmF0dXJlVikgewogICAgICAgICAgICByZXZlcnQoIkVDRFNBOiBpbnZhbGlkIHNpZ25hdHVyZSAndicgdmFsdWUiKTsKICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gdHJ5UmVjb3ZlcihieXRlczMyIGhhc2gsIGJ5dGVzIG1lbW9yeSBzaWduYXR1cmUpCiAgICAgICAgaW50ZXJuYWwKICAgICAgICBwdXJlCiAgICAgICAgcmV0dXJucyAoYWRkcmVzcywgUmVjb3ZlckVycm9yKQogICAgewogICAgICAgIC8vIENoZWNrIHRoZSBzaWduYXR1cmUgbGVuZ3RoCiAgICAgICAgLy8gLSBjYXNlIDY1OiByLHMsdiBzaWduYXR1cmUgKHN0YW5kYXJkKQogICAgICAgIC8vIC0gY2FzZSA2NDogcix2cyBzaWduYXR1cmUgKGNmIGh0dHBzOi8vZWlwcy5ldGhlcmV1bS5vcmcvRUlQUy9laXAtMjA5OCkgX0F2YWlsYWJsZSBzaW5jZSB2NC4xLl8KICAgICAgICBpZiAoc2lnbmF0dXJlLmxlbmd0aCA9PSA2NSkgewogICAgICAgICAgICBieXRlczMyIHI7CiAgICAgICAgICAgIGJ5dGVzMzIgczsKICAgICAgICAgICAgdWludDggdjsKICAgICAgICAgICAgLy8gZWNyZWNvdmVyIHRha2VzIHRoZSBzaWduYXR1cmUgcGFyYW1ldGVycywgYW5kIHRoZSBvbmx5IHdheSB0byBnZXQgdGhlbQogICAgICAgICAgICAvLyBjdXJyZW50bHkgaXMgdG8gdXNlIGFzc2VtYmx5LgogICAgICAgICAgICBhc3NlbWJseSB7CiAgICAgICAgICAgICAgICByIDo9IG1sb2FkKGFkZChzaWduYXR1cmUsIDB4MjApKQogICAgICAgICAgICAgICAgcyA6PSBtbG9hZChhZGQoc2lnbmF0dXJlLCAweDQwKSkKICAgICAgICAgICAgICAgIHYgOj0gYnl0ZSgwLCBtbG9hZChhZGQoc2lnbmF0dXJlLCAweDYwKSkpCiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHRyeVJlY292ZXIoaGFzaCwgdiwgciwgcyk7CiAgICAgICAgfSBlbHNlIGlmIChzaWduYXR1cmUubGVuZ3RoID09IDY0KSB7CiAgICAgICAgICAgIGJ5dGVzMzIgcjsKICAgICAgICAgICAgYnl0ZXMzMiB2czsKICAgICAgICAgICAgLy8gZWNyZWNvdmVyIHRha2VzIHRoZSBzaWduYXR1cmUgcGFyYW1ldGVycywgYW5kIHRoZSBvbmx5IHdheSB0byBnZXQgdGhlbQogICAgICAgICAgICAvLyBjdXJyZW50bHkgaXMgdG8gdXNlIGFzc2VtYmx5LgogICAgICAgICAgICBhc3NlbWJseSB7CiAgICAgICAgICAgICAgICByIDo9IG1sb2FkKGFkZChzaWduYXR1cmUsIDB4MjApKQogICAgICAgICAgICAgICAgdnMgOj0gbWxvYWQoYWRkKHNpZ25hdHVyZSwgMHg0MCkpCiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHRyeVJlY292ZXIoaGFzaCwgciwgdnMpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiAoYWRkcmVzcygwKSwgUmVjb3ZlckVycm9yLkludmFsaWRTaWduYXR1cmVMZW5ndGgpOwogICAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiByZWNvdmVyKGJ5dGVzMzIgaGFzaCwgYnl0ZXMgbWVtb3J5IHNpZ25hdHVyZSkKICAgICAgICBpbnRlcm5hbAogICAgICAgIHB1cmUKICAgICAgICByZXR1cm5zIChhZGRyZXNzKQogICAgewogICAgICAgIChhZGRyZXNzIHJlY292ZXJlZCwgUmVjb3ZlckVycm9yIGVycm9yKSA9IHRyeVJlY292ZXIoaGFzaCwgc2lnbmF0dXJlKTsKICAgICAgICBfdGhyb3dFcnJvcihlcnJvcik7CiAgICAgICAgcmV0dXJuIHJlY292ZXJlZDsKICAgIH0KCiAgICBmdW5jdGlvbiB0cnlSZWNvdmVyKGJ5dGVzMzIgaGFzaCwgYnl0ZXMzMiByLCBieXRlczMyIHZzKQogICAgICAgIGludGVybmFsCiAgICAgICAgcHVyZQogICAgICAgIHJldHVybnMgKGFkZHJlc3MsIFJlY292ZXJFcnJvcikKICAgIHsKICAgICAgICBieXRlczMyIHMgPSB2cwogICAgICAgICAgICAmIGJ5dGVzMzIoCiAgICAgICAgICAgICAgICAweDdmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYKICAgICAgICAgICAgKTsKICAgICAgICB1aW50OCB2ID0gdWludDgoKHVpbnQyNTYodnMpID4+IDI1NSkgKyAyNyk7CiAgICAgICAgcmV0dXJuIHRyeVJlY292ZXIoaGFzaCwgdiwgciwgcyk7CiAgICB9CgogICAgZnVuY3Rpb24gcmVjb3ZlcihieXRlczMyIGhhc2gsIGJ5dGVzMzIgciwgYnl0ZXMzMiB2cykKICAgICAgICBpbnRlcm5hbAogICAgICAgIHB1cmUKICAgICAgICByZXR1cm5zIChhZGRyZXNzKQogICAgewogICAgICAgIChhZGRyZXNzIHJlY292ZXJlZCwgUmVjb3ZlckVycm9yIGVycm9yKSA9IHRyeVJlY292ZXIoaGFzaCwgciwgdnMpOwogICAgICAgIF90aHJvd0Vycm9yKGVycm9yKTsKICAgICAgICByZXR1cm4gcmVjb3ZlcmVkOwogICAgfQoKICAgIGZ1bmN0aW9uIHRyeVJlY292ZXIoYnl0ZXMzMiBoYXNoLCB1aW50OCB2LCBieXRlczMyIHIsIGJ5dGVzMzIgcykKICAgICAgICBpbnRlcm5hbAogICAgICAgIHB1cmUKICAgICAgICByZXR1cm5zIChhZGRyZXNzLCBSZWNvdmVyRXJyb3IpCiAgICB7CiAgICAgICAgLy8gRUlQLTIgc3RpbGwgYWxsb3dzIHNpZ25hdHVyZSBtYWxsZWFiaWxpdHkgZm9yIGVjcmVjb3ZlcigpLiBSZW1vdmUgdGhpcyBwb3NzaWJpbGl0eSBhbmQgbWFrZSB0aGUgc2lnbmF0dXJlCiAgICAgICAgLy8gdW5pcXVlLiBBcHBlbmRpeCBGIGluIHRoZSBFdGhlcmV1bSBZZWxsb3cgcGFwZXIgKGh0dHBzOi8vZXRoZXJldW0uZ2l0aHViLmlvL3llbGxvd3BhcGVyL3BhcGVyLnBkZiksIGRlZmluZXMKICAgICAgICAvLyB0aGUgdmFsaWQgcmFuZ2UgZm9yIHMgaW4gKDMwMSk6IDAgPCBzIDwgc2VjcDI1NmsxbiDDtyAyICsgMSwgYW5kIGZvciB2IGluICgzMDIpOiB2IOKIiCB7MjcsIDI4fS4gTW9zdAogICAgICAgIC8vIHNpZ25hdHVyZXMgZnJvbSBjdXJyZW50IGxpYnJhcmllcyBnZW5lcmF0ZSBhIHVuaXF1ZSBzaWduYXR1cmUgd2l0aCBhbiBzLXZhbHVlIGluIHRoZSBsb3dlciBoYWxmIG9yZGVyLgogICAgICAgIC8vCiAgICAgICAgLy8gSWYgeW91ciBsaWJyYXJ5IGdlbmVyYXRlcyBtYWxsZWFibGUgc2lnbmF0dXJlcywgc3VjaCBhcyBzLXZhbHVlcyBpbiB0aGUgdXBwZXIgcmFuZ2UsIGNhbGN1bGF0ZSBhIG5ldyBzLXZhbHVlCiAgICAgICAgLy8gd2l0aCAweEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFQkFBRURDRTZBRjQ4QTAzQkJGRDI1RThDRDAzNjQxNDEgLSBzMSBhbmQgZmxpcCB2IGZyb20gMjcgdG8gMjggb3IKICAgICAgICAvLyB2aWNlIHZlcnNhLiBJZiB5b3VyIGxpYnJhcnkgYWxzbyBnZW5lcmF0ZXMgc2lnbmF0dXJlcyB3aXRoIDAvMSBmb3IgdiBpbnN0ZWFkIDI3LzI4LCBhZGQgMjcgdG8gdiB0byBhY2NlcHQKICAgICAgICAvLyB0aGVzZSBtYWxsZWFibGUgc2lnbmF0dXJlcyBhcyB3ZWxsLgogICAgICAgIGlmICgKICAgICAgICAgICAgdWludDI1NihzKQogICAgICAgICAgICAgICAgPiAweDdGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGNUQ1NzZFNzM1N0E0NTAxRERGRTkyRjQ2NjgxQjIwQTAKICAgICAgICApIHsKICAgICAgICAgICAgcmV0dXJuIChhZGRyZXNzKDApLCBSZWNvdmVyRXJyb3IuSW52YWxpZFNpZ25hdHVyZVMpOwogICAgICAgIH0KICAgICAgICBpZiAodiAhPSAyNyAmJiB2ICE9IDI4KSB7CiAgICAgICAgICAgIHJldHVybiAoYWRkcmVzcygwKSwgUmVjb3ZlckVycm9yLkludmFsaWRTaWduYXR1cmVWKTsKICAgICAgICB9CgogICAgICAgIC8vIElmIHRoZSBzaWduYXR1cmUgaXMgdmFsaWQgKGFuZCBub3QgbWFsbGVhYmxlKSwgcmV0dXJuIHRoZSBzaWduZXIgYWRkcmVzcwogICAgICAgIGFkZHJlc3Mgc2lnbmVyID0gZWNyZWNvdmVyKGhhc2gsIHYsIHIsIHMpOwogICAgICAgIGlmIChzaWduZXIgPT0gYWRkcmVzcygwKSkgewogICAgICAgICAgICByZXR1cm4gKGFkZHJlc3MoMCksIFJlY292ZXJFcnJvci5JbnZhbGlkU2lnbmF0dXJlKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAoc2lnbmVyLCBSZWNvdmVyRXJyb3IuTm9FcnJvcik7CiAgICB9CgogICAgZnVuY3Rpb24gcmVjb3ZlcihieXRlczMyIGhhc2gsIHVpbnQ4IHYsIGJ5dGVzMzIgciwgYnl0ZXMzMiBzKQogICAgICAgIGludGVybmFsCiAgICAgICAgcHVyZQogICAgICAgIHJldHVybnMgKGFkZHJlc3MpCiAgICB7CiAgICAgICAgKGFkZHJlc3MgcmVjb3ZlcmVkLCBSZWNvdmVyRXJyb3IgZXJyb3IpID0gdHJ5UmVjb3ZlcihoYXNoLCB2LCByLCBzKTsKICAgICAgICBfdGhyb3dFcnJvcihlcnJvcik7CiAgICAgICAgcmV0dXJuIHJlY292ZXJlZDsKICAgIH0KCiAgICBmdW5jdGlvbiB0b0V0aFNpZ25lZE1lc3NhZ2VIYXNoKGJ5dGVzMzIgaGFzaCkKICAgICAgICBpbnRlcm5hbAogICAgICAgIHB1cmUKICAgICAgICByZXR1cm5zIChieXRlczMyKQogICAgewogICAgICAgIC8vIDMyIGlzIHRoZSBsZW5ndGggaW4gYnl0ZXMgb2YgaGFzaCwKICAgICAgICAvLyBlbmZvcmNlZCBieSB0aGUgdHlwZSBzaWduYXR1cmUgYWJvdmUKICAgICAgICByZXR1cm4ga2VjY2FrMjU2KAogICAgICAgICAgICBhYmkuZW5jb2RlUGFja2VkKCJceDE5RXRoZXJldW0gU2lnbmVkIE1lc3NhZ2U6XG4zMiIsIGhhc2gpCiAgICAgICAgKTsKICAgIH0KfQo="},{fileName:"PreventSigReplay.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNjsKCmltcG9ydCAiLi9FQ0RTQS5zb2wiOwoKY29udHJhY3QgTXVsdGlTaWdXYWxsZXQgewogICAgdXNpbmcgRUNEU0EgZm9yIGJ5dGVzMzI7CgogICAgYWRkcmVzc1syXSBwdWJsaWMgb3duZXJzOwogICAgbWFwcGluZyhieXRlczMyID0+IGJvb2wpIHB1YmxpYyBleGVjdXRlZDsKCiAgICBjb25zdHJ1Y3RvcihhZGRyZXNzWzJdIG1lbW9yeSBfb3duZXJzKSBwYXlhYmxlIHsKICAgICAgICBvd25lcnMgPSBfb3duZXJzOwogICAgfQoKICAgIGZ1bmN0aW9uIGRlcG9zaXQoKSBleHRlcm5hbCBwYXlhYmxlIHt9CgogICAgZnVuY3Rpb24gdHJhbnNmZXIoCiAgICAgICAgYWRkcmVzcyBfdG8sCiAgICAgICAgdWludDI1NiBfYW1vdW50LAogICAgICAgIHVpbnQyNTYgX25vbmNlLAogICAgICAgIGJ5dGVzWzJdIG1lbW9yeSBfc2lncwogICAgKSBleHRlcm5hbCB7CiAgICAgICAgYnl0ZXMzMiB0eEhhc2ggPSBnZXRUeEhhc2goX3RvLCBfYW1vdW50LCBfbm9uY2UpOwogICAgICAgIHJlcXVpcmUoIWV4ZWN1dGVkW3R4SGFzaF0sICJ0eCBleGVjdXRlZCIpOwogICAgICAgIHJlcXVpcmUoX2NoZWNrU2lncyhfc2lncywgdHhIYXNoKSwgImludmFsaWQgc2lnIik7CgogICAgICAgIGV4ZWN1dGVkW3R4SGFzaF0gPSB0cnVlOwoKICAgICAgICAoYm9vbCBzZW50LCkgPSBfdG8uY2FsbHt2YWx1ZTogX2Ftb3VudH0oIiIpOwogICAgICAgIHJlcXVpcmUoc2VudCwgIkZhaWxlZCB0byBzZW5kIEV0aGVyIik7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0VHhIYXNoKGFkZHJlc3MgX3RvLCB1aW50MjU2IF9hbW91bnQsIHVpbnQyNTYgX25vbmNlKQogICAgICAgIHB1YmxpYwogICAgICAgIHZpZXcKICAgICAgICByZXR1cm5zIChieXRlczMyKQogICAgewogICAgICAgIHJldHVybiBrZWNjYWsyNTYoYWJpLmVuY29kZVBhY2tlZChhZGRyZXNzKHRoaXMpLCBfdG8sIF9hbW91bnQsIF9ub25jZSkpOwogICAgfQoKICAgIGZ1bmN0aW9uIF9jaGVja1NpZ3MoYnl0ZXNbMl0gbWVtb3J5IF9zaWdzLCBieXRlczMyIF90eEhhc2gpCiAgICAgICAgcHJpdmF0ZQogICAgICAgIHZpZXcKICAgICAgICByZXR1cm5zIChib29sKQogICAgewogICAgICAgIGJ5dGVzMzIgZXRoU2lnbmVkSGFzaCA9IF90eEhhc2gudG9FdGhTaWduZWRNZXNzYWdlSGFzaCgpOwoKICAgICAgICBmb3IgKHVpbnQyNTYgaSA9IDA7IGkgPCBfc2lncy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBhZGRyZXNzIHNpZ25lciA9IGV0aFNpZ25lZEhhc2gucmVjb3Zlcihfc2lnc1tpXSk7CiAgICAgICAgICAgIGJvb2wgdmFsaWQgPSBzaWduZXIgPT0gb3duZXJzW2ldOwoKICAgICAgICAgICAgaWYgKCF2YWxpZCkgewogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KfQoKLyoKLy8gb3duZXJzCjB4ZTE5YWVhOTNGNkMxZEJlZjZBMzc3Njg0OGJFMDk5QTdjMzI1M2FjOAoweGZhODU0RkU1MzM5ODQzYjNlOUJmZDg1NTRCMzhCRDA0MkE0MmUzNDAKCi8vIHRvCjB4ZTEwNDIyY2M2MTAzMEM4QjNkQkNEMzZjN2U3ZThFQzNCNTI3RTBBYwovLyBhbW91bnQKMTAwCi8vIG5vbmNlCjAKLy8gdHggaGFzaAoweDEyYTA5NTQ2MmViZmNhMjdkYzRkOTlmZWVmODg1YmZlNTgzNDRmYjZiYjQyYzNjNTJhN2MwZDY4MzZkMTE0NDgKCi8vIHNpZ25hdHVyZXMKMHgxMjBmOGVkOGYyZmE1NTQ5OGYyZWYwYTIyZjI2ZTM5YjliNTFlZDI5Y2M5M2ZlMGVmM2VkMTc1NmY1OGZhZDBjNmViNWExZDZmMzY3MWY4ZDUxNjM2MzlmZGM0MGJiODcyMGRlNmQ4ZjI1MjMwNzdhZDZkMTEzOGE2MDkyM2I4MDFjCjB4YTI0MGE0ODdkZTFlYjViYjk3MWU5MjBjYjA2NzdhNDdkZGM2NDIxZTM4ZjdiMDQ4ZjhhYTg4MjY2YjJjODg0YTEwNDU1YTUyZGM3NmEyMDNhMWE5YTk1MzQxODQ2OWY5ZWVjMmM1OWU4NzIwMWJiYzhkYjBlNGQ5Nzk2OTM1Y2IxYgoqLwo="},{fileName:"SigReplay.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNjsKCmltcG9ydCAiLi9FQ0RTQS5zb2wiOwoKY29udHJhY3QgTXVsdGlTaWdXYWxsZXQgewogICAgdXNpbmcgRUNEU0EgZm9yIGJ5dGVzMzI7CgogICAgYWRkcmVzc1syXSBwdWJsaWMgb3duZXJzOwoKICAgIGNvbnN0cnVjdG9yKGFkZHJlc3NbMl0gbWVtb3J5IF9vd25lcnMpIHBheWFibGUgewogICAgICAgIG93bmVycyA9IF9vd25lcnM7CiAgICB9CgogICAgZnVuY3Rpb24gZGVwb3NpdCgpIGV4dGVybmFsIHBheWFibGUge30KCiAgICBmdW5jdGlvbiB0cmFuc2ZlcihhZGRyZXNzIF90bywgdWludDI1NiBfYW1vdW50LCBieXRlc1syXSBtZW1vcnkgX3NpZ3MpCiAgICAgICAgZXh0ZXJuYWwKICAgIHsKICAgICAgICBieXRlczMyIHR4SGFzaCA9IGdldFR4SGFzaChfdG8sIF9hbW91bnQpOwogICAgICAgIHJlcXVpcmUoX2NoZWNrU2lncyhfc2lncywgdHhIYXNoKSwgImludmFsaWQgc2lnIik7CgogICAgICAgIChib29sIHNlbnQsKSA9IF90by5jYWxse3ZhbHVlOiBfYW1vdW50fSgiIik7CiAgICAgICAgcmVxdWlyZShzZW50LCAiRmFpbGVkIHRvIHNlbmQgRXRoZXIiKTsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRUeEhhc2goYWRkcmVzcyBfdG8sIHVpbnQyNTYgX2Ftb3VudCkKICAgICAgICBwdWJsaWMKICAgICAgICB2aWV3CiAgICAgICAgcmV0dXJucyAoYnl0ZXMzMikKICAgIHsKICAgICAgICByZXR1cm4ga2VjY2FrMjU2KGFiaS5lbmNvZGVQYWNrZWQoX3RvLCBfYW1vdW50KSk7CiAgICB9CgogICAgZnVuY3Rpb24gX2NoZWNrU2lncyhieXRlc1syXSBtZW1vcnkgX3NpZ3MsIGJ5dGVzMzIgX3R4SGFzaCkKICAgICAgICBwcml2YXRlCiAgICAgICAgdmlldwogICAgICAgIHJldHVybnMgKGJvb2wpCiAgICB7CiAgICAgICAgYnl0ZXMzMiBldGhTaWduZWRIYXNoID0gX3R4SGFzaC50b0V0aFNpZ25lZE1lc3NhZ2VIYXNoKCk7CgogICAgICAgIGZvciAodWludDI1NiBpID0gMDsgaSA8IF9zaWdzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGFkZHJlc3Mgc2lnbmVyID0gZXRoU2lnbmVkSGFzaC5yZWNvdmVyKF9zaWdzW2ldKTsKICAgICAgICAgICAgYm9vbCB2YWxpZCA9IHNpZ25lciA9PSBvd25lcnNbaV07CgogICAgICAgICAgICBpZiAoIXZhbGlkKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQp9Cg=="}],E2=`

    Signing messages off-chain and having a contract that requires that signature before executing a function is a useful technique.

    For example this technique is used to: