From f5068cb4024e9477f26e3e88519255fc1e02798b Mon Sep 17 00:00:00 2001 From: Emmanuel Awosika Date: Mon, 6 Jun 2022 10:43:28 +0100 Subject: [PATCH 01/12] Add page on source code verification Describes the process (and importance) of verifying source code for Ethereum smart contracts. --- .../source-code-verification.md | 95 +++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 src/content/developers/docs/smart-contracts/source-code-verification.md diff --git a/src/content/developers/docs/smart-contracts/source-code-verification.md b/src/content/developers/docs/smart-contracts/source-code-verification.md new file mode 100644 index 00000000000..60acc535722 --- /dev/null +++ b/src/content/developers/docs/smart-contracts/source-code-verification.md @@ -0,0 +1,95 @@ +--- +title: Verifying smart contracts +description: An overview of source code verification for Ethereum smart contracts +lang: en +sidebar: true +--- + +[Smart contracts](/developers/docs/smart-contracts/) are designed to be “trustless”, meaning users shouldn’t have to trust third parties (e.g., developers and companies) before interacting with a contract. As a requisite for trustleness, users and other developers must be able to verify a smart contract’s source code. Source code verification assures users and developers that the published contract code is the same code running at the contract address on the Ethereum blockchain. + +## What is source code verification? {#what-is-source-code-verification} + +A smart contract’s source code, which are instructions [written in Solidity](/developers/docs/smart-contracts/languages/) or another high-level programming language, is usually [compiled into bytecode](/developers/docs/smart-contracts/compiling/) before being deployed in the [Ethereum Virtual Machine (EVM)](/developers/docs/evm/). This happens because the EVM cannot interpret high-level instructions and requires low-level, machine instructions (**bytecode**) to execute contract logic. + +Source code verification is comparing a smart contract’s source code and the compiled bytecode used during the contract creation to detect any differences. Verifying smart contracts matters because the advertised contract code may be different from what runs on the blockchain. + +Source code verification ensures that functions, values, and variables defined in the source code remain the same after the contract is compiled and deployed. Source verification also makes provision for code documentation, so that end-users know what a smart contract is designed to do. + +## Why is source code verification important? {#importance-of-source-code-verification} + +### Trustlessness {#trustlessness} + +Trustlessness is arguably the biggest premise for smart contracts and [decentralized applications (dapps)](/developers/docs/dapps/). Smart contracts are “immutable” and cannot be altered; a contract will only execute only business logic defined in the code at the time of deployment. This means developers and enterprises cannot tamper with a contract's code after deploying on Ethereum. + +For a smart contract to be trustless, the contract code should be available for independent verification. While the compiled bytecode for every smart contract is publicly available on the blockchain, low-level language is difficult to understand—for both developers and users. + +Projects reduce trust assumptions by publishing the source code of their contracts. But this leads to another problem: it is difficult to verify that the published source code matches the contract bytecode. In this scenario, the value of trustlessness is lost because users have to trust developers not to change contract code (thereby changing the bytecode) before deploying. + +Source code verification tools provide guarantees that a smart contract’s source code files matches the assembly code. The result is a trustless ecosystem, where users don’t blindly trust third parties and instead verify code before depositing funds into a contract. + +### User Safety {#user-safety} + +With smart contracts, there’s usually a lot of money at stake. This calls for higher security guarantees and verification of a smart contract’s logic before using it. Without verification, malicious smart contracts can have [backdoors](https://www.trustnodes.com/2018/11/10/concerns-rise-over-backdoored-smart-contracts), controversial access control mechanisms, exploitable vulnerabilities, and other things that jeopardize user safety. The ability to verify source code for a smart contract reduces attack vectors and improves security for end-users. + +It is standard pratice in Solidity development to annotate source code files with inline comments using [NatSpec](https://docs.soliditylang.org/en/latest/natspec-format.html) (Ethereum Natutral Language Specification Format). NatSpec comments are human-readable descriptions of parts of a contract's code (e.g., contract functions and variables), which let users understand what happens with every contract interaction. + +The problem is that unscruplous developers can deceive users by later inserting malicious code in the contract and changing comments before compiling the source. Source verification can prevent this by checking if comments in the published source file match those used during compilation. + +## How to verify source code for Ethereum smart contracts {#how-to-verify-source-code-for-Ethereum-smart-contracts} + +[Deploying a smart contract on Ethereum](/developers/docs/smart-contracts/deploying/) requires sending a transaction with a data payload (compiled bytecode) without specifying a recipient. This payload is generated from the source code file(s), [constructor arguments](https://docs.soliditylang.org/en/v0.8.14/contracts.html#constructor), and available [contract metadata](https://docs.soliditylang.org/en/latest/metadata.html). + +Compilation is deterministic, meaning it always produces the same output (i.e., contract bytecode) if the same source file, metadata, and constructor paramemeters are used. This means anyone can generate the bytecode for a smart contract if the inputs, such as the original source code and constructor parameters, are available. + +The process described above is crucial for verifying similarities between open-source code and deployed contract code. As a developer, you should make available all data inputs for generating the bytecode including: + +- Contract metadata file: This contains the compiler version, compiler settings, ABI encoding, NatSpec documentation, and other contract-related information. +- Source code file +- Constructor parameters (if available) +- Contract address + +With this information, others should be able to derive the contract bytecode. Verifying your contract is then a matter of finding the contract-creation transaction on-chain and comparing the stored code with the recompiled bytecode. If both match, then your contract is verified. + +## Source code verification tools {#source-code-verification-tools} + +The traditional process of verifying contracts can be complex. This is why we have tools for verifying source code for smart contracts deployed on Ethereum. These tools automate large parts of the source code verification and also curate verified contracts for the benefits of users. + +### Etherscan {#etherscan} + +Although mostly known as an [Ethereum blockchain explorer](/developers/docs/data-and-analytics/block-explorers/), Etherscan also offers a [source code verification service](https://etherscan.io/verifyContract) for smart contract developers and users. + +Etherscan allows you to recompile contract bytecode from the original data payload (source code, library address, compiler settings, contract address, etc.) If the recompiled bytecode is associated with the bytecode (and constructor parameters) of the on-chain contract, then [the contract is verified](https://info.etherscan.com/types-of-contract-verification/). + +Once verified, your contract’s source code receives a "Verified" label and is published on Etherscan for others to audit. It also gets added to the [Verified Contracts](https://etherscan.io/contractsVerified/) section—a repository of smart contracts with verified source codes. + +However, Etherscan's contract verification has a drawback: it fails to compare the **metadata hash** of the on-chain bytecode and recompiled bytecode. The Solidity compiler typically [adds a hash of the contract metadata](https://docs.soliditylang.org/en/v0.4.25/metadata.html#encoding-of-the-metadata-hash-in-the-bytecode) (stored on [IPFS or Swarm](/developers/docs/storage/)) to the deployed bytecode. This is done to allow anyone retrieve the metadata independently and verify that contents of the contract's metadata remained the same before *and* after compilation. + +Because Etherscan cannot check if the metadata changed or not, users must trust that those details remained consistent in the deployed code. But, as explained earlier, this opens the door for inserting malicious code in contract bytecode and can [lead to malicious contract execution](https://samczsun.com/hiding-in-plain-sight/). + +[More on verifying contracts on Etherscan](https://medium.com/etherscan-blog/verifying-contracts-on-etherscan-f995ab772327). + +### Sourcify {#sourcify} + +[Sourcify](https://sourcify.dev/#/verifier) is another tool for verifying contracts. It aims to make interacting with smart contracts a safe and transparent experience for users. + +Unlike Etherscan, [getting a “Full Match”](https://docs.sourcify.dev/docs/full-vs-partial-match/) on Sourcify requires matching contract metadata hashes. This means Sourcify checks if the metadata hash in the recompiled bytecode matches the metadata hash associated with the bytecode used for the contract-creation transaction. Any differences in the metadata hashes will only net you a “Partial Match”, which tells users your contract metadata changed at some point. + +Sourcify is open-source, with a publicly available [GitHub repo](https://github.com/ethereum/sourcify), so you can run the service independently. It also stores its repository of verified contracts on IPFS to provide persistent storage and availability. This means users can still access the [list of verified contracts](https://repo.sourcify.dev/select-contract/), even if Sourcify goes down (unlike Etherscan). + +The only perceptible drawback with using Sourcify is that it there is no dedicated label for verified contracts (which would save users time of re-verifying verified contracts). However, BlockScout (a block explorer) [uses Sourcify for source verification](https://docs.blockscout.com/for-users/verifying-a-smart-contract/contracts-verification-via-sourcify) and clearly marks contracts verified with Sourcify. + +[More on verifying contracts on Sourcify](https://blog.soliditylang.org/2020/06/25/sourcify-faq/). + +### Tenderly {#tenderly} + +[Tenderly](https://tenderly.co/) is a platform aimed at accelerating workflow for Ethereum smart contract developers. It also [offers source code verification as a service](https://docs.tenderly.co/monitoring/verifying-a-smart-contract) for developers. + +You can choose to verify your contract with Tenderly by importing the source file or the metadata file generated by the Solidity compiler. Like other verification tools, Tenderly requires details like the contract address/network, compiler settings, and optimization features to verify any smart contract. + +It is possible to verify a contract *privately*, making it visible only to you (and other members of your team). Verifying a contract publicly makes it visible to everyone using the Tenderly platform. + +While useful for verifying contracts, Tenderly doesn't have useful features available with other tools on the list. For example, it doesn't allow end-users to check if a contract is verified (except the developers opt for public verification) and doesn't check for a match between metadata hashes. + +## Further reading {#further-reading} +- [How to verify the source code of Ethereum smart contract](https://developpaper.com/how-to-verify-the-source-code-of-ethereum-smart-contract/) +- [Verifying contract source code](https://programtheblockchain.com/posts/2018/01/16/verifying-contract-source-code/) From fd6b7bcd055bdd0feea5b5a2bbcb14b79111716c Mon Sep 17 00:00:00 2001 From: Emmanuel Awosika Date: Thu, 30 Jun 2022 13:34:50 +0100 Subject: [PATCH 02/12] Update source-code-verification.md Edits to incorporate feedback. --- .../source-code-verification.md | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/content/developers/docs/smart-contracts/source-code-verification.md b/src/content/developers/docs/smart-contracts/source-code-verification.md index 60acc535722..6939d044733 100644 --- a/src/content/developers/docs/smart-contracts/source-code-verification.md +++ b/src/content/developers/docs/smart-contracts/source-code-verification.md @@ -5,15 +5,17 @@ lang: en sidebar: true --- -[Smart contracts](/developers/docs/smart-contracts/) are designed to be “trustless”, meaning users shouldn’t have to trust third parties (e.g., developers and companies) before interacting with a contract. As a requisite for trustleness, users and other developers must be able to verify a smart contract’s source code. Source code verification assures users and developers that the published contract code is the same code running at the contract address on the Ethereum blockchain. +[Smart contracts](/developers/docs/smart-contracts/) are designed to be “trustless”, meaning users shouldn’t have to trust third parties (e.g., developers and companies) before interacting with a contract. As a requisite for trustlessness, users and other developers must be able to verify a smart contract’s source code. Source code verification assures users and developers that the published contract code is the same code running at the contract address on the Ethereum blockchain. + +It is important to make the distinction between "source code verification" and "formal verification". The former, which will be explained in detail below, refers to verifying that the given source code of a smart contract in a high-level language (e.g. Solidity) compiles to the same bytecode to be executed at the contract address. The latter describes verifying the correctness of a smart contract, meaning the contract behaves as expected. Although context-dependent, contract verification usually refers to source code verification. ## What is source code verification? {#what-is-source-code-verification} -A smart contract’s source code, which are instructions [written in Solidity](/developers/docs/smart-contracts/languages/) or another high-level programming language, is usually [compiled into bytecode](/developers/docs/smart-contracts/compiling/) before being deployed in the [Ethereum Virtual Machine (EVM)](/developers/docs/evm/). This happens because the EVM cannot interpret high-level instructions and requires low-level, machine instructions (**bytecode**) to execute contract logic. +Before deploying a smart contract in the [Ethereum Virtual Machine (EVM)](/developers/docs/evm/), developers [compile](/developers/docs/smart-contracts/compiling/) the contract’s source code—instructions [written in Solidity](/developers/docs/smart-contracts/languages/) or another high-level programming language—to bytecode. As the EVM cannot interpret high-level instructions, compiling source code to bytecode (i.e., low-level, machine instructions) is necessary for executing contract logic in the EVM. Source code verification is comparing a smart contract’s source code and the compiled bytecode used during the contract creation to detect any differences. Verifying smart contracts matters because the advertised contract code may be different from what runs on the blockchain. -Source code verification ensures that functions, values, and variables defined in the source code remain the same after the contract is compiled and deployed. Source verification also makes provision for code documentation, so that end-users know what a smart contract is designed to do. +Smart contract verification enables investigating what a contract does through the higher-level language it is written in, without having to read machine code. Functions, values, and usually the variable names and comments remain the same with the original source code that is compiled and deployed. This makes reading code much easier. Source verification also makes provision for code documentation, so that end-users know what a smart contract is designed to do. ## Why is source code verification important? {#importance-of-source-code-verification} @@ -23,21 +25,23 @@ Trustlessness is arguably the biggest premise for smart contracts and [decentral For a smart contract to be trustless, the contract code should be available for independent verification. While the compiled bytecode for every smart contract is publicly available on the blockchain, low-level language is difficult to understand—for both developers and users. -Projects reduce trust assumptions by publishing the source code of their contracts. But this leads to another problem: it is difficult to verify that the published source code matches the contract bytecode. In this scenario, the value of trustlessness is lost because users have to trust developers not to change contract code (thereby changing the bytecode) before deploying. +Projects reduce trust assumptions by publishing the source code of their contracts. But this leads to another problem: it is difficult to verify that the published source code match the contract bytecode. In this scenario, the value of trustlessness is lost because users have to trust developers not to change a contract's business logic (i.e., by changing the bytecode) before deploying it on the blockchain. Source code verification tools provide guarantees that a smart contract’s source code files matches the assembly code. The result is a trustless ecosystem, where users don’t blindly trust third parties and instead verify code before depositing funds into a contract. ### User Safety {#user-safety} -With smart contracts, there’s usually a lot of money at stake. This calls for higher security guarantees and verification of a smart contract’s logic before using it. Without verification, malicious smart contracts can have [backdoors](https://www.trustnodes.com/2018/11/10/concerns-rise-over-backdoored-smart-contracts), controversial access control mechanisms, exploitable vulnerabilities, and other things that jeopardize user safety. The ability to verify source code for a smart contract reduces attack vectors and improves security for end-users. +With smart contracts, there’s usually a lot of money at stake. This calls for higher security guarantees and verification of a smart contract’s logic before using it. Without verification, malicious smart contracts can have [backdoors](https://www.trustnodes.com/2018/11/10/concerns-rise-over-backdoored-smart-contracts), controversial access control mechanisms, exploitable vulnerabilities, and other things that jeopardize user safety. + +Publishing a smart contract's source code files makes it easier for those interested, such as auditors, to assess the contract for potential attack vectors. With multiple parties independently verifying a smart contract, users have stronger guarantees of its security. It is standard pratice in Solidity development to annotate source code files with inline comments using [NatSpec](https://docs.soliditylang.org/en/latest/natspec-format.html) (Ethereum Natutral Language Specification Format). NatSpec comments are human-readable descriptions of parts of a contract's code (e.g., contract functions and variables), which let users understand what happens with every contract interaction. -The problem is that unscruplous developers can deceive users by later inserting malicious code in the contract and changing comments before compiling the source. Source verification can prevent this by checking if comments in the published source file match those used during compilation. +The problem is that unscruplous developers can deceive users by later inserting malicious code in a smart contract and changing comments before compiling contract bytecode. Contract verification can prevent this by checking if comments in the published source file match those used during compilation, although this depends on whether the contract was fully or partially verified. -## How to verify source code for Ethereum smart contracts {#how-to-verify-source-code-for-Ethereum-smart-contracts} +## How to verify source code for Ethereum smart contracts {#source-code-verification-for-ethereum-smart-contracts} -[Deploying a smart contract on Ethereum](/developers/docs/smart-contracts/deploying/) requires sending a transaction with a data payload (compiled bytecode) without specifying a recipient. This payload is generated from the source code file(s), [constructor arguments](https://docs.soliditylang.org/en/v0.8.14/contracts.html#constructor), and available [contract metadata](https://docs.soliditylang.org/en/latest/metadata.html). +[Deploying a smart contract on Ethereum](/developers/docs/smart-contracts/deploying/) requires sending a transaction with a data payload (compiled bytecode) to a special address. The data payload is generated from the source code file(s), [constructor arguments](https://docs.soliditylang.org/en/v0.8.14/contracts.html#constructor), and available [contract metadata](https://docs.soliditylang.org/en/latest/metadata.html). Compilation is deterministic, meaning it always produces the same output (i.e., contract bytecode) if the same source file, metadata, and constructor paramemeters are used. This means anyone can generate the bytecode for a smart contract if the inputs, such as the original source code and constructor parameters, are available. From 4f49323a05bd08edbfd06dfff58e94d28263cbe7 Mon Sep 17 00:00:00 2001 From: Kaan Uzdogan Date: Fri, 1 Jul 2022 17:46:57 +0200 Subject: [PATCH 03/12] Modify source code verification page --- .../source-code-verification.md | 46 +++++++++---------- 1 file changed, 22 insertions(+), 24 deletions(-) diff --git a/src/content/developers/docs/smart-contracts/source-code-verification.md b/src/content/developers/docs/smart-contracts/source-code-verification.md index 6939d044733..50ac4215689 100644 --- a/src/content/developers/docs/smart-contracts/source-code-verification.md +++ b/src/content/developers/docs/smart-contracts/source-code-verification.md @@ -7,7 +7,7 @@ sidebar: true [Smart contracts](/developers/docs/smart-contracts/) are designed to be “trustless”, meaning users shouldn’t have to trust third parties (e.g., developers and companies) before interacting with a contract. As a requisite for trustlessness, users and other developers must be able to verify a smart contract’s source code. Source code verification assures users and developers that the published contract code is the same code running at the contract address on the Ethereum blockchain. -It is important to make the distinction between "source code verification" and "formal verification". The former, which will be explained in detail below, refers to verifying that the given source code of a smart contract in a high-level language (e.g. Solidity) compiles to the same bytecode to be executed at the contract address. The latter describes verifying the correctness of a smart contract, meaning the contract behaves as expected. Although context-dependent, contract verification usually refers to source code verification. +It is important to make the distinction between "source code verification" and "[formal verification](/developers/docs/smart-contracts/formal-verification/)". The former, which will be explained in detail below, refers to verifying that the given source code of a smart contract in a high-level language (e.g. Solidity) compiles to the same bytecode to be executed at the contract address. The latter describes verifying the correctness of a smart contract, meaning the contract behaves as expected. Although context-dependent, contract verification usually refers to source code verification. ## What is source code verification? {#what-is-source-code-verification} @@ -17,11 +17,18 @@ Source code verification is comparing a smart contract’s source code and the c Smart contract verification enables investigating what a contract does through the higher-level language it is written in, without having to read machine code. Functions, values, and usually the variable names and comments remain the same with the original source code that is compiled and deployed. This makes reading code much easier. Source verification also makes provision for code documentation, so that end-users know what a smart contract is designed to do. +### What is full verification {#full-verification} + +There are some parts of the source code that do not affect the compiled bytecode such as comments or variable names. That means, two source codes with different variable names and different comments would both be able to verify the same contract. With that, a malicous actor can add deceiving comments or give misleading variable names inside the source code and get the contract verified with a source code different than the original source code. It is possible to avoid this by appending extra data to the bytecode to serve as a _cryptographical guarantee_ for the exactness of the source code, and as a _fingerprint_ of the compilation information. The necessary information is found in the [Solidity's contract metadata](https://docs.soliditylang.org/en/v0.8.15/metadata.html), and the hash of this file is appended to the bytecode of a contract. You can see it in action in the [metadata playground](https://playground.sourcify.dev) + +The metadata file contains information about the compilation of the contract including the source files and their hashes. Meaning, if any of the compilation settings or even a byte in one of the source files change, the metadata file changes. Consequently the hash of the metadata file, which is appended to the bytecode, also changes. That means if a contract's bytecode + the appended metadata hash match with the given source code and compilation settings, we can be sure this is exactly the same source code used in the original compilation, not even a single byte is different. + +This type of verification that leverages the metadata hash is referred to as **"[full verification](https://docs.sourcify.dev/docs/full-vs-partial-match/))"** (also "perfect verification). If the metadata hashes do not match or are not considered in verification it would be a "partial match", which currently is the more common way to verify contracts. It is possible to [insert malicious code](https://samczsun.com/hiding-in-plain-sight/) that wouldn't be reflected in the verified source code without full verification. Most developers are not aware of the full verification and don't keep the metadata file of their compilation, hence partial verification has been the de facto method to verify contracts so far. ## Why is source code verification important? {#importance-of-source-code-verification} ### Trustlessness {#trustlessness} -Trustlessness is arguably the biggest premise for smart contracts and [decentralized applications (dapps)](/developers/docs/dapps/). Smart contracts are “immutable” and cannot be altered; a contract will only execute only business logic defined in the code at the time of deployment. This means developers and enterprises cannot tamper with a contract's code after deploying on Ethereum. +Trustlessness is arguably the biggest premise for smart contracts and [decentralized applications (dapps)](/developers/docs/dapps/). Smart contracts are “immutable” and cannot be altered; a contract will only execute the business logic defined in the code at the time of deployment. This means developers and enterprises cannot tamper with a contract's code after deploying on Ethereum. For a smart contract to be trustless, the contract code should be available for independent verification. While the compiled bytecode for every smart contract is publicly available on the blockchain, low-level language is difficult to understand—for both developers and users. @@ -31,29 +38,26 @@ Source code verification tools provide guarantees that a smart contract’s sour ### User Safety {#user-safety} -With smart contracts, there’s usually a lot of money at stake. This calls for higher security guarantees and verification of a smart contract’s logic before using it. Without verification, malicious smart contracts can have [backdoors](https://www.trustnodes.com/2018/11/10/concerns-rise-over-backdoored-smart-contracts), controversial access control mechanisms, exploitable vulnerabilities, and other things that jeopardize user safety. +With smart contracts, there’s usually a lot of money at stake. This calls for higher security guarantees and verification of a smart contract’s logic before using it. The problem is that unscruplous developers can deceive users by inserting malicious code in a smart contract. Without verification, malicious smart contracts can have [backdoors](https://www.trustnodes.com/2018/11/10/concerns-rise-over-backdoored-smart-contracts), controversial access control mechanisms, exploitable vulnerabilities, and other things that jeopardize user safety that would go undetected. Publishing a smart contract's source code files makes it easier for those interested, such as auditors, to assess the contract for potential attack vectors. With multiple parties independently verifying a smart contract, users have stronger guarantees of its security. -It is standard pratice in Solidity development to annotate source code files with inline comments using [NatSpec](https://docs.soliditylang.org/en/latest/natspec-format.html) (Ethereum Natutral Language Specification Format). NatSpec comments are human-readable descriptions of parts of a contract's code (e.g., contract functions and variables), which let users understand what happens with every contract interaction. - -The problem is that unscruplous developers can deceive users by later inserting malicious code in a smart contract and changing comments before compiling contract bytecode. Contract verification can prevent this by checking if comments in the published source file match those used during compilation, although this depends on whether the contract was fully or partially verified. - ## How to verify source code for Ethereum smart contracts {#source-code-verification-for-ethereum-smart-contracts} -[Deploying a smart contract on Ethereum](/developers/docs/smart-contracts/deploying/) requires sending a transaction with a data payload (compiled bytecode) to a special address. The data payload is generated from the source code file(s), [constructor arguments](https://docs.soliditylang.org/en/v0.8.14/contracts.html#constructor), and available [contract metadata](https://docs.soliditylang.org/en/latest/metadata.html). +[Deploying a smart contract on Ethereum](/developers/docs/smart-contracts/deploying/) requires sending a transaction with a data payload (compiled bytecode) to a special address. The data payload is generated by compiling the source code, plus the [constructor arguments](https://docs.soliditylang.org/en/v0.8.14/contracts.html#constructor) of the contract instance are appended to the data payload in the transaction. Compilation is deterministic, meaning it always produces the same output (i.e., contract bytecode) if the same source files, and compilation settings (e.g. compiler version, optimizer) are used. -Compilation is deterministic, meaning it always produces the same output (i.e., contract bytecode) if the same source file, metadata, and constructor paramemeters are used. This means anyone can generate the bytecode for a smart contract if the inputs, such as the original source code and constructor parameters, are available. +![](https://i.ibb.co/xzyLgv5/Copy-of-Block-Split-Human-friendly-contract-interactions-with-Sourcify-verification-2.png) -The process described above is crucial for verifying similarities between open-source code and deployed contract code. As a developer, you should make available all data inputs for generating the bytecode including: +Verifying a smart contract basically involves the following steps: -- Contract metadata file: This contains the compiler version, compiler settings, ABI encoding, NatSpec documentation, and other contract-related information. -- Source code file -- Constructor parameters (if available) -- Contract address +1) Input the source files and compilation settings to a compiler. +2) Compiler outputs the bytecode of the contract +3) Get the bytecode of the deployed contract at a given address +4) Compare the deployed bytecode with the recompiled bytecode. If the codes match, the contract gets verified with the given source code and compilation settings. +5) Additionally, if the the metadata hashes at the end of the bytecode match, it will be a full match. -With this information, others should be able to derive the contract bytecode. Verifying your contract is then a matter of finding the contract-creation transaction on-chain and comparing the stored code with the recompiled bytecode. If both match, then your contract is verified. +Note that this is a simplistic description of verification and there are many exceptions that would not work with this such as having [immutable variables](https://docs.sourcify.dev/docs/immutables/). ## Source code verification tools {#source-code-verification-tools} The traditional process of verifying contracts can be complex. This is why we have tools for verifying source code for smart contracts deployed on Ethereum. These tools automate large parts of the source code verification and also curate verified contracts for the benefits of users. @@ -66,21 +70,15 @@ Etherscan allows you to recompile contract bytecode from the original data paylo Once verified, your contract’s source code receives a "Verified" label and is published on Etherscan for others to audit. It also gets added to the [Verified Contracts](https://etherscan.io/contractsVerified/) section—a repository of smart contracts with verified source codes. -However, Etherscan's contract verification has a drawback: it fails to compare the **metadata hash** of the on-chain bytecode and recompiled bytecode. The Solidity compiler typically [adds a hash of the contract metadata](https://docs.soliditylang.org/en/v0.4.25/metadata.html#encoding-of-the-metadata-hash-in-the-bytecode) (stored on [IPFS or Swarm](/developers/docs/storage/)) to the deployed bytecode. This is done to allow anyone retrieve the metadata independently and verify that contents of the contract's metadata remained the same before *and* after compilation. - -Because Etherscan cannot check if the metadata changed or not, users must trust that those details remained consistent in the deployed code. But, as explained earlier, this opens the door for inserting malicious code in contract bytecode and can [lead to malicious contract execution](https://samczsun.com/hiding-in-plain-sight/). +Etherscan is the most used tool for verifying contracts. However, Etherscan's contract verification has a drawback: it fails to compare the **metadata hash** of the on-chain bytecode and recompiled bytecode. Therefore the matches in Etherscan are partial matches. [More on verifying contracts on Etherscan](https://medium.com/etherscan-blog/verifying-contracts-on-etherscan-f995ab772327). ### Sourcify {#sourcify} -[Sourcify](https://sourcify.dev/#/verifier) is another tool for verifying contracts. It aims to make interacting with smart contracts a safe and transparent experience for users. - -Unlike Etherscan, [getting a “Full Match”](https://docs.sourcify.dev/docs/full-vs-partial-match/) on Sourcify requires matching contract metadata hashes. This means Sourcify checks if the metadata hash in the recompiled bytecode matches the metadata hash associated with the bytecode used for the contract-creation transaction. Any differences in the metadata hashes will only net you a “Partial Match”, which tells users your contract metadata changed at some point. - -Sourcify is open-source, with a publicly available [GitHub repo](https://github.com/ethereum/sourcify), so you can run the service independently. It also stores its repository of verified contracts on IPFS to provide persistent storage and availability. This means users can still access the [list of verified contracts](https://repo.sourcify.dev/select-contract/), even if Sourcify goes down (unlike Etherscan). +[Sourcify](https://sourcify.dev/#/verifier) is another tool for verifying contracts that is open-sourced and decentralized. It is not a block explorer and only verified contracts on [different EVM based networks](https://docs.sourcify.dev/docs/chains). It acts as a public infrastructure for other tools to build on top of it, and aims to enable more human-friendly contract interactions using the [ABI](/developers/docs/smart-contracts/compiling/#web-applications) and [NatSpec](https://docs.soliditylang.org/en/v0.8.15/natspec-format.html) comments found in the metadata file. -The only perceptible drawback with using Sourcify is that it there is no dedicated label for verified contracts (which would save users time of re-verifying verified contracts). However, BlockScout (a block explorer) [uses Sourcify for source verification](https://docs.blockscout.com/for-users/verifying-a-smart-contract/contracts-verification-via-sourcify) and clearly marks contracts verified with Sourcify. +Unlike Etherscan, Sourcify supports full matches with the metadata hash. The verified contracts are served in its [public repository](https://docs.sourcify.dev/docs/repository/) on HTTP and [IPFS](https://docs.ipfs.io/concepts/what-is-ipfs/#what-is-ipfs), which is a decentralized, [content-addressed](https://web3.storage/docs/concepts/content-addressing/) storage. This allows fetching the metadata file of a contract over IPFS since the appended metadata hash is an IPFS hash. Additionally, one can also retrieve the source code files over IPFS, as IPFS hashes of these files are also found in the metadata. A contract can be verified by providing the metadata file and source files over its API or the [UI](https://sourcify.dev/#/verifier), or using the plugins. Sourcify monitoring tool also listens to contract creations on new blocks and tries to verify the contracts if their metadata and source files are published on IPFS. [More on verifying contracts on Sourcify](https://blog.soliditylang.org/2020/06/25/sourcify-faq/). From 12af4f92f87744d8daf0cec1f97293c990892a55 Mon Sep 17 00:00:00 2001 From: Emmanuel Awosika Date: Tue, 5 Jul 2022 09:34:31 +0100 Subject: [PATCH 04/12] Update source-code-verification.md Slight edits to correct punctuation/paragraphing --- .../smart-contracts/source-code-verification.md | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/content/developers/docs/smart-contracts/source-code-verification.md b/src/content/developers/docs/smart-contracts/source-code-verification.md index 50ac4215689..238648c865d 100644 --- a/src/content/developers/docs/smart-contracts/source-code-verification.md +++ b/src/content/developers/docs/smart-contracts/source-code-verification.md @@ -17,13 +17,13 @@ Source code verification is comparing a smart contract’s source code and the c Smart contract verification enables investigating what a contract does through the higher-level language it is written in, without having to read machine code. Functions, values, and usually the variable names and comments remain the same with the original source code that is compiled and deployed. This makes reading code much easier. Source verification also makes provision for code documentation, so that end-users know what a smart contract is designed to do. -### What is full verification {#full-verification} +### What is full verification? {#full-verification} -There are some parts of the source code that do not affect the compiled bytecode such as comments or variable names. That means, two source codes with different variable names and different comments would both be able to verify the same contract. With that, a malicous actor can add deceiving comments or give misleading variable names inside the source code and get the contract verified with a source code different than the original source code. It is possible to avoid this by appending extra data to the bytecode to serve as a _cryptographical guarantee_ for the exactness of the source code, and as a _fingerprint_ of the compilation information. The necessary information is found in the [Solidity's contract metadata](https://docs.soliditylang.org/en/v0.8.15/metadata.html), and the hash of this file is appended to the bytecode of a contract. You can see it in action in the [metadata playground](https://playground.sourcify.dev) +There are some parts of the source code that do not affect the compiled bytecode such as comments or variable names. That means two source codes with different variable names and different comments would both be able to verify the same contract. With that, a malicous actor can add deceiving comments or give misleading variable names inside the source code and get the contract verified with a source code different than the original source code. It is possible to avoid this by appending extra data to the bytecode to serve as a _cryptographical guarantee_ for the exactness of the source code, and as a _fingerprint_ of the compilation information. The necessary information is found in the [Solidity's contract metadata](https://docs.soliditylang.org/en/v0.8.15/metadata.html), and the hash of this file is appended to the bytecode of a contract. You can see it in action in the [metadata playground](https://playground.sourcify.dev) The metadata file contains information about the compilation of the contract including the source files and their hashes. Meaning, if any of the compilation settings or even a byte in one of the source files change, the metadata file changes. Consequently the hash of the metadata file, which is appended to the bytecode, also changes. That means if a contract's bytecode + the appended metadata hash match with the given source code and compilation settings, we can be sure this is exactly the same source code used in the original compilation, not even a single byte is different. -This type of verification that leverages the metadata hash is referred to as **"[full verification](https://docs.sourcify.dev/docs/full-vs-partial-match/))"** (also "perfect verification). If the metadata hashes do not match or are not considered in verification it would be a "partial match", which currently is the more common way to verify contracts. It is possible to [insert malicious code](https://samczsun.com/hiding-in-plain-sight/) that wouldn't be reflected in the verified source code without full verification. Most developers are not aware of the full verification and don't keep the metadata file of their compilation, hence partial verification has been the de facto method to verify contracts so far. +This type of verification that leverages the metadata hash is referred to as **"[full verification](https://docs.sourcify.dev/docs/full-vs-partial-match/))"** (also "perfect verification"). If the metadata hashes do not match or are not considered in verification it would be a "partial match", which currently is the more common way to verify contracts. It is possible to [insert malicious code](https://samczsun.com/hiding-in-plain-sight/) that wouldn't be reflected in the verified source code without full verification. Most developers are not aware of the full verification and don't keep the metadata file of their compilation, hence partial verification has been the de facto method to verify contracts so far. ## Why is source code verification important? {#importance-of-source-code-verification} ### Trustlessness {#trustlessness} @@ -44,7 +44,7 @@ Publishing a smart contract's source code files makes it easier for those intere ## How to verify source code for Ethereum smart contracts {#source-code-verification-for-ethereum-smart-contracts} -[Deploying a smart contract on Ethereum](/developers/docs/smart-contracts/deploying/) requires sending a transaction with a data payload (compiled bytecode) to a special address. The data payload is generated by compiling the source code, plus the [constructor arguments](https://docs.soliditylang.org/en/v0.8.14/contracts.html#constructor) of the contract instance are appended to the data payload in the transaction. Compilation is deterministic, meaning it always produces the same output (i.e., contract bytecode) if the same source files, and compilation settings (e.g. compiler version, optimizer) are used. +[Deploying a smart contract on Ethereum](/developers/docs/smart-contracts/deploying/) requires sending a transaction with a data payload (compiled bytecode) to a special address. The data payload is generated by compiling the source code, plus the [constructor arguments](https://docs.soliditylang.org/en/v0.8.14/contracts.html#constructor) of the contract instance appended to the data payload in the transaction. Compilation is deterministic, meaning it always produces the same output (i.e., contract bytecode) if the same source files, and compilation settings (e.g. compiler version, optimizer) are used. ![](https://i.ibb.co/xzyLgv5/Copy-of-Block-Split-Human-friendly-contract-interactions-with-Sourcify-verification-2.png) @@ -76,9 +76,11 @@ Etherscan is the most used tool for verifying contracts. However, Etherscan's co ### Sourcify {#sourcify} -[Sourcify](https://sourcify.dev/#/verifier) is another tool for verifying contracts that is open-sourced and decentralized. It is not a block explorer and only verified contracts on [different EVM based networks](https://docs.sourcify.dev/docs/chains). It acts as a public infrastructure for other tools to build on top of it, and aims to enable more human-friendly contract interactions using the [ABI](/developers/docs/smart-contracts/compiling/#web-applications) and [NatSpec](https://docs.soliditylang.org/en/v0.8.15/natspec-format.html) comments found in the metadata file. +[Sourcify](https://sourcify.dev/#/verifier) is another tool for verifying contracts that is open-sourced and decentralized. It is not a block explorer and only verifies contracts on [different EVM based networks](https://docs.sourcify.dev/docs/chains). It acts as a public infrastructure for other tools to build on top of it, and aims to enable more human-friendly contract interactions using the [ABI](/developers/docs/smart-contracts/compiling/#web-applications) and [NatSpec](https://docs.soliditylang.org/en/v0.8.15/natspec-format.html) comments found in the metadata file. -Unlike Etherscan, Sourcify supports full matches with the metadata hash. The verified contracts are served in its [public repository](https://docs.sourcify.dev/docs/repository/) on HTTP and [IPFS](https://docs.ipfs.io/concepts/what-is-ipfs/#what-is-ipfs), which is a decentralized, [content-addressed](https://web3.storage/docs/concepts/content-addressing/) storage. This allows fetching the metadata file of a contract over IPFS since the appended metadata hash is an IPFS hash. Additionally, one can also retrieve the source code files over IPFS, as IPFS hashes of these files are also found in the metadata. A contract can be verified by providing the metadata file and source files over its API or the [UI](https://sourcify.dev/#/verifier), or using the plugins. Sourcify monitoring tool also listens to contract creations on new blocks and tries to verify the contracts if their metadata and source files are published on IPFS. +Unlike Etherscan, Sourcify supports full matches with the metadata hash. The verified contracts are served in its [public repository](https://docs.sourcify.dev/docs/repository/) on HTTP and [IPFS](https://docs.ipfs.io/concepts/what-is-ipfs/#what-is-ipfs), which is a decentralized, [content-addressed](https://web3.storage/docs/concepts/content-addressing/) storage. This allows fetching the metadata file of a contract over IPFS since the appended metadata hash is an IPFS hash. + +Additionally, one can also retrieve the source code files over IPFS, as IPFS hashes of these files are also found in the metadata. A contract can be verified by providing the metadata file and source files over its API or the [UI](https://sourcify.dev/#/verifier), or using the plugins. Sourcify monitoring tool also listens to contract creations on new blocks and tries to verify the contracts if their metadata and source files are published on IPFS. [More on verifying contracts on Sourcify](https://blog.soliditylang.org/2020/06/25/sourcify-faq/). From 0d2f2eaf3e108a7280ca7db1b6bdf5557ff25f05 Mon Sep 17 00:00:00 2001 From: Emmanuel Awosika Date: Tue, 12 Jul 2022 07:41:04 +0100 Subject: [PATCH 05/12] Create source code verification file --- .../source-code-verification/index.md | 99 +++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 src/content/developers/docs/smart-contracts/source-code-verification/index.md diff --git a/src/content/developers/docs/smart-contracts/source-code-verification/index.md b/src/content/developers/docs/smart-contracts/source-code-verification/index.md new file mode 100644 index 00000000000..238648c865d --- /dev/null +++ b/src/content/developers/docs/smart-contracts/source-code-verification/index.md @@ -0,0 +1,99 @@ +--- +title: Verifying smart contracts +description: An overview of source code verification for Ethereum smart contracts +lang: en +sidebar: true +--- + +[Smart contracts](/developers/docs/smart-contracts/) are designed to be “trustless”, meaning users shouldn’t have to trust third parties (e.g., developers and companies) before interacting with a contract. As a requisite for trustlessness, users and other developers must be able to verify a smart contract’s source code. Source code verification assures users and developers that the published contract code is the same code running at the contract address on the Ethereum blockchain. + +It is important to make the distinction between "source code verification" and "[formal verification](/developers/docs/smart-contracts/formal-verification/)". The former, which will be explained in detail below, refers to verifying that the given source code of a smart contract in a high-level language (e.g. Solidity) compiles to the same bytecode to be executed at the contract address. The latter describes verifying the correctness of a smart contract, meaning the contract behaves as expected. Although context-dependent, contract verification usually refers to source code verification. + +## What is source code verification? {#what-is-source-code-verification} + +Before deploying a smart contract in the [Ethereum Virtual Machine (EVM)](/developers/docs/evm/), developers [compile](/developers/docs/smart-contracts/compiling/) the contract’s source code—instructions [written in Solidity](/developers/docs/smart-contracts/languages/) or another high-level programming language—to bytecode. As the EVM cannot interpret high-level instructions, compiling source code to bytecode (i.e., low-level, machine instructions) is necessary for executing contract logic in the EVM. + +Source code verification is comparing a smart contract’s source code and the compiled bytecode used during the contract creation to detect any differences. Verifying smart contracts matters because the advertised contract code may be different from what runs on the blockchain. + +Smart contract verification enables investigating what a contract does through the higher-level language it is written in, without having to read machine code. Functions, values, and usually the variable names and comments remain the same with the original source code that is compiled and deployed. This makes reading code much easier. Source verification also makes provision for code documentation, so that end-users know what a smart contract is designed to do. + +### What is full verification? {#full-verification} + +There are some parts of the source code that do not affect the compiled bytecode such as comments or variable names. That means two source codes with different variable names and different comments would both be able to verify the same contract. With that, a malicous actor can add deceiving comments or give misleading variable names inside the source code and get the contract verified with a source code different than the original source code. It is possible to avoid this by appending extra data to the bytecode to serve as a _cryptographical guarantee_ for the exactness of the source code, and as a _fingerprint_ of the compilation information. The necessary information is found in the [Solidity's contract metadata](https://docs.soliditylang.org/en/v0.8.15/metadata.html), and the hash of this file is appended to the bytecode of a contract. You can see it in action in the [metadata playground](https://playground.sourcify.dev) + +The metadata file contains information about the compilation of the contract including the source files and their hashes. Meaning, if any of the compilation settings or even a byte in one of the source files change, the metadata file changes. Consequently the hash of the metadata file, which is appended to the bytecode, also changes. That means if a contract's bytecode + the appended metadata hash match with the given source code and compilation settings, we can be sure this is exactly the same source code used in the original compilation, not even a single byte is different. + +This type of verification that leverages the metadata hash is referred to as **"[full verification](https://docs.sourcify.dev/docs/full-vs-partial-match/))"** (also "perfect verification"). If the metadata hashes do not match or are not considered in verification it would be a "partial match", which currently is the more common way to verify contracts. It is possible to [insert malicious code](https://samczsun.com/hiding-in-plain-sight/) that wouldn't be reflected in the verified source code without full verification. Most developers are not aware of the full verification and don't keep the metadata file of their compilation, hence partial verification has been the de facto method to verify contracts so far. +## Why is source code verification important? {#importance-of-source-code-verification} + +### Trustlessness {#trustlessness} + +Trustlessness is arguably the biggest premise for smart contracts and [decentralized applications (dapps)](/developers/docs/dapps/). Smart contracts are “immutable” and cannot be altered; a contract will only execute the business logic defined in the code at the time of deployment. This means developers and enterprises cannot tamper with a contract's code after deploying on Ethereum. + +For a smart contract to be trustless, the contract code should be available for independent verification. While the compiled bytecode for every smart contract is publicly available on the blockchain, low-level language is difficult to understand—for both developers and users. + +Projects reduce trust assumptions by publishing the source code of their contracts. But this leads to another problem: it is difficult to verify that the published source code match the contract bytecode. In this scenario, the value of trustlessness is lost because users have to trust developers not to change a contract's business logic (i.e., by changing the bytecode) before deploying it on the blockchain. + +Source code verification tools provide guarantees that a smart contract’s source code files matches the assembly code. The result is a trustless ecosystem, where users don’t blindly trust third parties and instead verify code before depositing funds into a contract. + +### User Safety {#user-safety} + +With smart contracts, there’s usually a lot of money at stake. This calls for higher security guarantees and verification of a smart contract’s logic before using it. The problem is that unscruplous developers can deceive users by inserting malicious code in a smart contract. Without verification, malicious smart contracts can have [backdoors](https://www.trustnodes.com/2018/11/10/concerns-rise-over-backdoored-smart-contracts), controversial access control mechanisms, exploitable vulnerabilities, and other things that jeopardize user safety that would go undetected. + +Publishing a smart contract's source code files makes it easier for those interested, such as auditors, to assess the contract for potential attack vectors. With multiple parties independently verifying a smart contract, users have stronger guarantees of its security. + +## How to verify source code for Ethereum smart contracts {#source-code-verification-for-ethereum-smart-contracts} + +[Deploying a smart contract on Ethereum](/developers/docs/smart-contracts/deploying/) requires sending a transaction with a data payload (compiled bytecode) to a special address. The data payload is generated by compiling the source code, plus the [constructor arguments](https://docs.soliditylang.org/en/v0.8.14/contracts.html#constructor) of the contract instance appended to the data payload in the transaction. Compilation is deterministic, meaning it always produces the same output (i.e., contract bytecode) if the same source files, and compilation settings (e.g. compiler version, optimizer) are used. + +![](https://i.ibb.co/xzyLgv5/Copy-of-Block-Split-Human-friendly-contract-interactions-with-Sourcify-verification-2.png) + +Verifying a smart contract basically involves the following steps: + +1) Input the source files and compilation settings to a compiler. +2) Compiler outputs the bytecode of the contract +3) Get the bytecode of the deployed contract at a given address +4) Compare the deployed bytecode with the recompiled bytecode. If the codes match, the contract gets verified with the given source code and compilation settings. +5) Additionally, if the the metadata hashes at the end of the bytecode match, it will be a full match. + + +Note that this is a simplistic description of verification and there are many exceptions that would not work with this such as having [immutable variables](https://docs.sourcify.dev/docs/immutables/). +## Source code verification tools {#source-code-verification-tools} + +The traditional process of verifying contracts can be complex. This is why we have tools for verifying source code for smart contracts deployed on Ethereum. These tools automate large parts of the source code verification and also curate verified contracts for the benefits of users. + +### Etherscan {#etherscan} + +Although mostly known as an [Ethereum blockchain explorer](/developers/docs/data-and-analytics/block-explorers/), Etherscan also offers a [source code verification service](https://etherscan.io/verifyContract) for smart contract developers and users. + +Etherscan allows you to recompile contract bytecode from the original data payload (source code, library address, compiler settings, contract address, etc.) If the recompiled bytecode is associated with the bytecode (and constructor parameters) of the on-chain contract, then [the contract is verified](https://info.etherscan.com/types-of-contract-verification/). + +Once verified, your contract’s source code receives a "Verified" label and is published on Etherscan for others to audit. It also gets added to the [Verified Contracts](https://etherscan.io/contractsVerified/) section—a repository of smart contracts with verified source codes. + +Etherscan is the most used tool for verifying contracts. However, Etherscan's contract verification has a drawback: it fails to compare the **metadata hash** of the on-chain bytecode and recompiled bytecode. Therefore the matches in Etherscan are partial matches. + +[More on verifying contracts on Etherscan](https://medium.com/etherscan-blog/verifying-contracts-on-etherscan-f995ab772327). + +### Sourcify {#sourcify} + +[Sourcify](https://sourcify.dev/#/verifier) is another tool for verifying contracts that is open-sourced and decentralized. It is not a block explorer and only verifies contracts on [different EVM based networks](https://docs.sourcify.dev/docs/chains). It acts as a public infrastructure for other tools to build on top of it, and aims to enable more human-friendly contract interactions using the [ABI](/developers/docs/smart-contracts/compiling/#web-applications) and [NatSpec](https://docs.soliditylang.org/en/v0.8.15/natspec-format.html) comments found in the metadata file. + +Unlike Etherscan, Sourcify supports full matches with the metadata hash. The verified contracts are served in its [public repository](https://docs.sourcify.dev/docs/repository/) on HTTP and [IPFS](https://docs.ipfs.io/concepts/what-is-ipfs/#what-is-ipfs), which is a decentralized, [content-addressed](https://web3.storage/docs/concepts/content-addressing/) storage. This allows fetching the metadata file of a contract over IPFS since the appended metadata hash is an IPFS hash. + +Additionally, one can also retrieve the source code files over IPFS, as IPFS hashes of these files are also found in the metadata. A contract can be verified by providing the metadata file and source files over its API or the [UI](https://sourcify.dev/#/verifier), or using the plugins. Sourcify monitoring tool also listens to contract creations on new blocks and tries to verify the contracts if their metadata and source files are published on IPFS. + +[More on verifying contracts on Sourcify](https://blog.soliditylang.org/2020/06/25/sourcify-faq/). + +### Tenderly {#tenderly} + +[Tenderly](https://tenderly.co/) is a platform aimed at accelerating workflow for Ethereum smart contract developers. It also [offers source code verification as a service](https://docs.tenderly.co/monitoring/verifying-a-smart-contract) for developers. + +You can choose to verify your contract with Tenderly by importing the source file or the metadata file generated by the Solidity compiler. Like other verification tools, Tenderly requires details like the contract address/network, compiler settings, and optimization features to verify any smart contract. + +It is possible to verify a contract *privately*, making it visible only to you (and other members of your team). Verifying a contract publicly makes it visible to everyone using the Tenderly platform. + +While useful for verifying contracts, Tenderly doesn't have useful features available with other tools on the list. For example, it doesn't allow end-users to check if a contract is verified (except the developers opt for public verification) and doesn't check for a match between metadata hashes. + +## Further reading {#further-reading} +- [How to verify the source code of Ethereum smart contract](https://developpaper.com/how-to-verify-the-source-code-of-ethereum-smart-contract/) +- [Verifying contract source code](https://programtheblockchain.com/posts/2018/01/16/verifying-contract-source-code/) From 0df62bc5ef7420929f079eb3174f1d69e5a2e3d3 Mon Sep 17 00:00:00 2001 From: Emmanuel Awosika Date: Tue, 12 Jul 2022 07:43:03 +0100 Subject: [PATCH 06/12] Add files via upload --- .../Source code verification.png | Bin 0 -> 69108 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/content/developers/docs/smart-contracts/source-code-verification/Source code verification.png diff --git a/src/content/developers/docs/smart-contracts/source-code-verification/Source code verification.png b/src/content/developers/docs/smart-contracts/source-code-verification/Source code verification.png new file mode 100644 index 0000000000000000000000000000000000000000..b25c9eb3f0fb378ba6c162a70e57dc3d236c724b GIT binary patch literal 69108 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�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 T%Tdr#ArNxXN{@=rhHw85M%HiS literal 0 HcmV?d00001 From ed1f4c43e1d19a6f13c72f3cb3ddf1d72226505c Mon Sep 17 00:00:00 2001 From: Emmanuel Awosika Date: Tue, 12 Jul 2022 07:45:56 +0100 Subject: [PATCH 07/12] Update index.md Added images. --- .../docs/smart-contracts/source-code-verification/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/content/developers/docs/smart-contracts/source-code-verification/index.md b/src/content/developers/docs/smart-contracts/source-code-verification/index.md index 238648c865d..0d2cc3bed77 100644 --- a/src/content/developers/docs/smart-contracts/source-code-verification/index.md +++ b/src/content/developers/docs/smart-contracts/source-code-verification/index.md @@ -46,7 +46,7 @@ Publishing a smart contract's source code files makes it easier for those intere [Deploying a smart contract on Ethereum](/developers/docs/smart-contracts/deploying/) requires sending a transaction with a data payload (compiled bytecode) to a special address. The data payload is generated by compiling the source code, plus the [constructor arguments](https://docs.soliditylang.org/en/v0.8.14/contracts.html#constructor) of the contract instance appended to the data payload in the transaction. Compilation is deterministic, meaning it always produces the same output (i.e., contract bytecode) if the same source files, and compilation settings (e.g. compiler version, optimizer) are used. -![](https://i.ibb.co/xzyLgv5/Copy-of-Block-Split-Human-friendly-contract-interactions-with-Sourcify-verification-2.png) +![](https://github.com/emmanuel-awosika/ethereum-org-website/blob/0df62bc5ef7420929f079eb3174f1d69e5a2e3d3/src/content/developers/docs/smart-contracts/source-code-verification/Source%20code%20verification.png) Verifying a smart contract basically involves the following steps: @@ -56,8 +56,8 @@ Verifying a smart contract basically involves the following steps: 4) Compare the deployed bytecode with the recompiled bytecode. If the codes match, the contract gets verified with the given source code and compilation settings. 5) Additionally, if the the metadata hashes at the end of the bytecode match, it will be a full match. - Note that this is a simplistic description of verification and there are many exceptions that would not work with this such as having [immutable variables](https://docs.sourcify.dev/docs/immutables/). + ## Source code verification tools {#source-code-verification-tools} The traditional process of verifying contracts can be complex. This is why we have tools for verifying source code for smart contracts deployed on Ethereum. These tools automate large parts of the source code verification and also curate verified contracts for the benefits of users. From 7a87d3a9a29754d159073988f27f3a4c39094ffd Mon Sep 17 00:00:00 2001 From: Emmanuel Awosika Date: Tue, 12 Jul 2022 07:55:06 +0100 Subject: [PATCH 08/12] Delete source-code-verification.md --- .../source-code-verification.md | 99 ------------------- 1 file changed, 99 deletions(-) delete mode 100644 src/content/developers/docs/smart-contracts/source-code-verification.md diff --git a/src/content/developers/docs/smart-contracts/source-code-verification.md b/src/content/developers/docs/smart-contracts/source-code-verification.md deleted file mode 100644 index 238648c865d..00000000000 --- a/src/content/developers/docs/smart-contracts/source-code-verification.md +++ /dev/null @@ -1,99 +0,0 @@ ---- -title: Verifying smart contracts -description: An overview of source code verification for Ethereum smart contracts -lang: en -sidebar: true ---- - -[Smart contracts](/developers/docs/smart-contracts/) are designed to be “trustless”, meaning users shouldn’t have to trust third parties (e.g., developers and companies) before interacting with a contract. As a requisite for trustlessness, users and other developers must be able to verify a smart contract’s source code. Source code verification assures users and developers that the published contract code is the same code running at the contract address on the Ethereum blockchain. - -It is important to make the distinction between "source code verification" and "[formal verification](/developers/docs/smart-contracts/formal-verification/)". The former, which will be explained in detail below, refers to verifying that the given source code of a smart contract in a high-level language (e.g. Solidity) compiles to the same bytecode to be executed at the contract address. The latter describes verifying the correctness of a smart contract, meaning the contract behaves as expected. Although context-dependent, contract verification usually refers to source code verification. - -## What is source code verification? {#what-is-source-code-verification} - -Before deploying a smart contract in the [Ethereum Virtual Machine (EVM)](/developers/docs/evm/), developers [compile](/developers/docs/smart-contracts/compiling/) the contract’s source code—instructions [written in Solidity](/developers/docs/smart-contracts/languages/) or another high-level programming language—to bytecode. As the EVM cannot interpret high-level instructions, compiling source code to bytecode (i.e., low-level, machine instructions) is necessary for executing contract logic in the EVM. - -Source code verification is comparing a smart contract’s source code and the compiled bytecode used during the contract creation to detect any differences. Verifying smart contracts matters because the advertised contract code may be different from what runs on the blockchain. - -Smart contract verification enables investigating what a contract does through the higher-level language it is written in, without having to read machine code. Functions, values, and usually the variable names and comments remain the same with the original source code that is compiled and deployed. This makes reading code much easier. Source verification also makes provision for code documentation, so that end-users know what a smart contract is designed to do. - -### What is full verification? {#full-verification} - -There are some parts of the source code that do not affect the compiled bytecode such as comments or variable names. That means two source codes with different variable names and different comments would both be able to verify the same contract. With that, a malicous actor can add deceiving comments or give misleading variable names inside the source code and get the contract verified with a source code different than the original source code. It is possible to avoid this by appending extra data to the bytecode to serve as a _cryptographical guarantee_ for the exactness of the source code, and as a _fingerprint_ of the compilation information. The necessary information is found in the [Solidity's contract metadata](https://docs.soliditylang.org/en/v0.8.15/metadata.html), and the hash of this file is appended to the bytecode of a contract. You can see it in action in the [metadata playground](https://playground.sourcify.dev) - -The metadata file contains information about the compilation of the contract including the source files and their hashes. Meaning, if any of the compilation settings or even a byte in one of the source files change, the metadata file changes. Consequently the hash of the metadata file, which is appended to the bytecode, also changes. That means if a contract's bytecode + the appended metadata hash match with the given source code and compilation settings, we can be sure this is exactly the same source code used in the original compilation, not even a single byte is different. - -This type of verification that leverages the metadata hash is referred to as **"[full verification](https://docs.sourcify.dev/docs/full-vs-partial-match/))"** (also "perfect verification"). If the metadata hashes do not match or are not considered in verification it would be a "partial match", which currently is the more common way to verify contracts. It is possible to [insert malicious code](https://samczsun.com/hiding-in-plain-sight/) that wouldn't be reflected in the verified source code without full verification. Most developers are not aware of the full verification and don't keep the metadata file of their compilation, hence partial verification has been the de facto method to verify contracts so far. -## Why is source code verification important? {#importance-of-source-code-verification} - -### Trustlessness {#trustlessness} - -Trustlessness is arguably the biggest premise for smart contracts and [decentralized applications (dapps)](/developers/docs/dapps/). Smart contracts are “immutable” and cannot be altered; a contract will only execute the business logic defined in the code at the time of deployment. This means developers and enterprises cannot tamper with a contract's code after deploying on Ethereum. - -For a smart contract to be trustless, the contract code should be available for independent verification. While the compiled bytecode for every smart contract is publicly available on the blockchain, low-level language is difficult to understand—for both developers and users. - -Projects reduce trust assumptions by publishing the source code of their contracts. But this leads to another problem: it is difficult to verify that the published source code match the contract bytecode. In this scenario, the value of trustlessness is lost because users have to trust developers not to change a contract's business logic (i.e., by changing the bytecode) before deploying it on the blockchain. - -Source code verification tools provide guarantees that a smart contract’s source code files matches the assembly code. The result is a trustless ecosystem, where users don’t blindly trust third parties and instead verify code before depositing funds into a contract. - -### User Safety {#user-safety} - -With smart contracts, there’s usually a lot of money at stake. This calls for higher security guarantees and verification of a smart contract’s logic before using it. The problem is that unscruplous developers can deceive users by inserting malicious code in a smart contract. Without verification, malicious smart contracts can have [backdoors](https://www.trustnodes.com/2018/11/10/concerns-rise-over-backdoored-smart-contracts), controversial access control mechanisms, exploitable vulnerabilities, and other things that jeopardize user safety that would go undetected. - -Publishing a smart contract's source code files makes it easier for those interested, such as auditors, to assess the contract for potential attack vectors. With multiple parties independently verifying a smart contract, users have stronger guarantees of its security. - -## How to verify source code for Ethereum smart contracts {#source-code-verification-for-ethereum-smart-contracts} - -[Deploying a smart contract on Ethereum](/developers/docs/smart-contracts/deploying/) requires sending a transaction with a data payload (compiled bytecode) to a special address. The data payload is generated by compiling the source code, plus the [constructor arguments](https://docs.soliditylang.org/en/v0.8.14/contracts.html#constructor) of the contract instance appended to the data payload in the transaction. Compilation is deterministic, meaning it always produces the same output (i.e., contract bytecode) if the same source files, and compilation settings (e.g. compiler version, optimizer) are used. - -![](https://i.ibb.co/xzyLgv5/Copy-of-Block-Split-Human-friendly-contract-interactions-with-Sourcify-verification-2.png) - -Verifying a smart contract basically involves the following steps: - -1) Input the source files and compilation settings to a compiler. -2) Compiler outputs the bytecode of the contract -3) Get the bytecode of the deployed contract at a given address -4) Compare the deployed bytecode with the recompiled bytecode. If the codes match, the contract gets verified with the given source code and compilation settings. -5) Additionally, if the the metadata hashes at the end of the bytecode match, it will be a full match. - - -Note that this is a simplistic description of verification and there are many exceptions that would not work with this such as having [immutable variables](https://docs.sourcify.dev/docs/immutables/). -## Source code verification tools {#source-code-verification-tools} - -The traditional process of verifying contracts can be complex. This is why we have tools for verifying source code for smart contracts deployed on Ethereum. These tools automate large parts of the source code verification and also curate verified contracts for the benefits of users. - -### Etherscan {#etherscan} - -Although mostly known as an [Ethereum blockchain explorer](/developers/docs/data-and-analytics/block-explorers/), Etherscan also offers a [source code verification service](https://etherscan.io/verifyContract) for smart contract developers and users. - -Etherscan allows you to recompile contract bytecode from the original data payload (source code, library address, compiler settings, contract address, etc.) If the recompiled bytecode is associated with the bytecode (and constructor parameters) of the on-chain contract, then [the contract is verified](https://info.etherscan.com/types-of-contract-verification/). - -Once verified, your contract’s source code receives a "Verified" label and is published on Etherscan for others to audit. It also gets added to the [Verified Contracts](https://etherscan.io/contractsVerified/) section—a repository of smart contracts with verified source codes. - -Etherscan is the most used tool for verifying contracts. However, Etherscan's contract verification has a drawback: it fails to compare the **metadata hash** of the on-chain bytecode and recompiled bytecode. Therefore the matches in Etherscan are partial matches. - -[More on verifying contracts on Etherscan](https://medium.com/etherscan-blog/verifying-contracts-on-etherscan-f995ab772327). - -### Sourcify {#sourcify} - -[Sourcify](https://sourcify.dev/#/verifier) is another tool for verifying contracts that is open-sourced and decentralized. It is not a block explorer and only verifies contracts on [different EVM based networks](https://docs.sourcify.dev/docs/chains). It acts as a public infrastructure for other tools to build on top of it, and aims to enable more human-friendly contract interactions using the [ABI](/developers/docs/smart-contracts/compiling/#web-applications) and [NatSpec](https://docs.soliditylang.org/en/v0.8.15/natspec-format.html) comments found in the metadata file. - -Unlike Etherscan, Sourcify supports full matches with the metadata hash. The verified contracts are served in its [public repository](https://docs.sourcify.dev/docs/repository/) on HTTP and [IPFS](https://docs.ipfs.io/concepts/what-is-ipfs/#what-is-ipfs), which is a decentralized, [content-addressed](https://web3.storage/docs/concepts/content-addressing/) storage. This allows fetching the metadata file of a contract over IPFS since the appended metadata hash is an IPFS hash. - -Additionally, one can also retrieve the source code files over IPFS, as IPFS hashes of these files are also found in the metadata. A contract can be verified by providing the metadata file and source files over its API or the [UI](https://sourcify.dev/#/verifier), or using the plugins. Sourcify monitoring tool also listens to contract creations on new blocks and tries to verify the contracts if their metadata and source files are published on IPFS. - -[More on verifying contracts on Sourcify](https://blog.soliditylang.org/2020/06/25/sourcify-faq/). - -### Tenderly {#tenderly} - -[Tenderly](https://tenderly.co/) is a platform aimed at accelerating workflow for Ethereum smart contract developers. It also [offers source code verification as a service](https://docs.tenderly.co/monitoring/verifying-a-smart-contract) for developers. - -You can choose to verify your contract with Tenderly by importing the source file or the metadata file generated by the Solidity compiler. Like other verification tools, Tenderly requires details like the contract address/network, compiler settings, and optimization features to verify any smart contract. - -It is possible to verify a contract *privately*, making it visible only to you (and other members of your team). Verifying a contract publicly makes it visible to everyone using the Tenderly platform. - -While useful for verifying contracts, Tenderly doesn't have useful features available with other tools on the list. For example, it doesn't allow end-users to check if a contract is verified (except the developers opt for public verification) and doesn't check for a match between metadata hashes. - -## Further reading {#further-reading} -- [How to verify the source code of Ethereum smart contract](https://developpaper.com/how-to-verify-the-source-code-of-ethereum-smart-contract/) -- [Verifying contract source code](https://programtheblockchain.com/posts/2018/01/16/verifying-contract-source-code/) From 15d92c52c98bd9aba94d4a04c9149c623008845e Mon Sep 17 00:00:00 2001 From: Sam Richards Date: Tue, 12 Jul 2022 08:52:47 -0400 Subject: [PATCH 09/12] Add page to sidenav --- src/data/developer-docs-links.yaml | 2 ++ src/intl/en/page-developers-docs.json | 1 + 2 files changed, 3 insertions(+) diff --git a/src/data/developer-docs-links.yaml b/src/data/developer-docs-links.yaml index cc89695074b..93e32f34d5d 100644 --- a/src/data/developer-docs-links.yaml +++ b/src/data/developer-docs-links.yaml @@ -97,6 +97,8 @@ to: /developers/docs/smart-contracts/compiling/ - id: docs-nav-deploying-smart-contracts to: /developers/docs/smart-contracts/deploying/ + - id: docs-nav-verifying-smart-contracts + to: /developers/docs/smart-contracts/source-code-verification/ - id: docs-nav-smart-contract-security to: /developers/docs/smart-contracts/security/ description: docs-nav-smart-contract-security-description diff --git a/src/intl/en/page-developers-docs.json b/src/intl/en/page-developers-docs.json index 9c5ca7769a0..c21d532378f 100644 --- a/src/intl/en/page-developers-docs.json +++ b/src/intl/en/page-developers-docs.json @@ -99,6 +99,7 @@ "docs-nav-token-standards": "Token standards", "docs-nav-transactions": "Transactions", "docs-nav-transactions-description": "Transfers and other actions that cause Ethereum's state to change", + "docs-nav-verifying-smart-contracts": "Verifying smart contracts", "docs-nav-web2-vs-web3": "Web2 vs Web3", "docs-nav-web2-vs-web3-description": "The fundamental differences that blockchain-based applications provide", "docs-nav-networking-layer": "Networking layer", From 371001c0321532951a7bad9c4b0cc94085a9f715 Mon Sep 17 00:00:00 2001 From: Sam Richards Date: Tue, 12 Jul 2022 08:59:46 -0400 Subject: [PATCH 10/12] Fix image --- .../source-code-verification/index.md | 62 +++++++++--------- ...ation.png => source-code-verification.png} | Bin 2 files changed, 32 insertions(+), 30 deletions(-) rename src/content/developers/docs/smart-contracts/source-code-verification/{Source code verification.png => source-code-verification.png} (100%) diff --git a/src/content/developers/docs/smart-contracts/source-code-verification/index.md b/src/content/developers/docs/smart-contracts/source-code-verification/index.md index 0d2cc3bed77..8b0d53fb1ff 100644 --- a/src/content/developers/docs/smart-contracts/source-code-verification/index.md +++ b/src/content/developers/docs/smart-contracts/source-code-verification/index.md @@ -5,70 +5,71 @@ lang: en sidebar: true --- -[Smart contracts](/developers/docs/smart-contracts/) are designed to be “trustless”, meaning users shouldn’t have to trust third parties (e.g., developers and companies) before interacting with a contract. As a requisite for trustlessness, users and other developers must be able to verify a smart contract’s source code. Source code verification assures users and developers that the published contract code is the same code running at the contract address on the Ethereum blockchain. +[Smart contracts](/developers/docs/smart-contracts/) are designed to be “trustless”, meaning users shouldn’t have to trust third parties (e.g., developers and companies) before interacting with a contract. As a requisite for trustlessness, users and other developers must be able to verify a smart contract’s source code. Source code verification assures users and developers that the published contract code is the same code running at the contract address on the Ethereum blockchain. -It is important to make the distinction between "source code verification" and "[formal verification](/developers/docs/smart-contracts/formal-verification/)". The former, which will be explained in detail below, refers to verifying that the given source code of a smart contract in a high-level language (e.g. Solidity) compiles to the same bytecode to be executed at the contract address. The latter describes verifying the correctness of a smart contract, meaning the contract behaves as expected. Although context-dependent, contract verification usually refers to source code verification. +It is important to make the distinction between "source code verification" and "[formal verification](/developers/docs/smart-contracts/formal-verification/)". The former, which will be explained in detail below, refers to verifying that the given source code of a smart contract in a high-level language (e.g. Solidity) compiles to the same bytecode to be executed at the contract address. The latter describes verifying the correctness of a smart contract, meaning the contract behaves as expected. Although context-dependent, contract verification usually refers to source code verification. ## What is source code verification? {#what-is-source-code-verification} -Before deploying a smart contract in the [Ethereum Virtual Machine (EVM)](/developers/docs/evm/), developers [compile](/developers/docs/smart-contracts/compiling/) the contract’s source code—instructions [written in Solidity](/developers/docs/smart-contracts/languages/) or another high-level programming language—to bytecode. As the EVM cannot interpret high-level instructions, compiling source code to bytecode (i.e., low-level, machine instructions) is necessary for executing contract logic in the EVM. +Before deploying a smart contract in the [Ethereum Virtual Machine (EVM)](/developers/docs/evm/), developers [compile](/developers/docs/smart-contracts/compiling/) the contract’s source code—instructions [written in Solidity](/developers/docs/smart-contracts/languages/) or another high-level programming language—to bytecode. As the EVM cannot interpret high-level instructions, compiling source code to bytecode (i.e., low-level, machine instructions) is necessary for executing contract logic in the EVM. -Source code verification is comparing a smart contract’s source code and the compiled bytecode used during the contract creation to detect any differences. Verifying smart contracts matters because the advertised contract code may be different from what runs on the blockchain. +Source code verification is comparing a smart contract’s source code and the compiled bytecode used during the contract creation to detect any differences. Verifying smart contracts matters because the advertised contract code may be different from what runs on the blockchain. -Smart contract verification enables investigating what a contract does through the higher-level language it is written in, without having to read machine code. Functions, values, and usually the variable names and comments remain the same with the original source code that is compiled and deployed. This makes reading code much easier. Source verification also makes provision for code documentation, so that end-users know what a smart contract is designed to do. +Smart contract verification enables investigating what a contract does through the higher-level language it is written in, without having to read machine code. Functions, values, and usually the variable names and comments remain the same with the original source code that is compiled and deployed. This makes reading code much easier. Source verification also makes provision for code documentation, so that end-users know what a smart contract is designed to do. ### What is full verification? {#full-verification} There are some parts of the source code that do not affect the compiled bytecode such as comments or variable names. That means two source codes with different variable names and different comments would both be able to verify the same contract. With that, a malicous actor can add deceiving comments or give misleading variable names inside the source code and get the contract verified with a source code different than the original source code. It is possible to avoid this by appending extra data to the bytecode to serve as a _cryptographical guarantee_ for the exactness of the source code, and as a _fingerprint_ of the compilation information. The necessary information is found in the [Solidity's contract metadata](https://docs.soliditylang.org/en/v0.8.15/metadata.html), and the hash of this file is appended to the bytecode of a contract. You can see it in action in the [metadata playground](https://playground.sourcify.dev) -The metadata file contains information about the compilation of the contract including the source files and their hashes. Meaning, if any of the compilation settings or even a byte in one of the source files change, the metadata file changes. Consequently the hash of the metadata file, which is appended to the bytecode, also changes. That means if a contract's bytecode + the appended metadata hash match with the given source code and compilation settings, we can be sure this is exactly the same source code used in the original compilation, not even a single byte is different. +The metadata file contains information about the compilation of the contract including the source files and their hashes. Meaning, if any of the compilation settings or even a byte in one of the source files change, the metadata file changes. Consequently the hash of the metadata file, which is appended to the bytecode, also changes. That means if a contract's bytecode + the appended metadata hash match with the given source code and compilation settings, we can be sure this is exactly the same source code used in the original compilation, not even a single byte is different. + +This type of verification that leverages the metadata hash is referred to as **"[full verification](https://docs.sourcify.dev/docs/full-vs-partial-match/))"** (also "perfect verification"). If the metadata hashes do not match or are not considered in verification it would be a "partial match", which currently is the more common way to verify contracts. It is possible to [insert malicious code](https://samczsun.com/hiding-in-plain-sight/) that wouldn't be reflected in the verified source code without full verification. Most developers are not aware of the full verification and don't keep the metadata file of their compilation, hence partial verification has been the de facto method to verify contracts so far. -This type of verification that leverages the metadata hash is referred to as **"[full verification](https://docs.sourcify.dev/docs/full-vs-partial-match/))"** (also "perfect verification"). If the metadata hashes do not match or are not considered in verification it would be a "partial match", which currently is the more common way to verify contracts. It is possible to [insert malicious code](https://samczsun.com/hiding-in-plain-sight/) that wouldn't be reflected in the verified source code without full verification. Most developers are not aware of the full verification and don't keep the metadata file of their compilation, hence partial verification has been the de facto method to verify contracts so far. ## Why is source code verification important? {#importance-of-source-code-verification} ### Trustlessness {#trustlessness} Trustlessness is arguably the biggest premise for smart contracts and [decentralized applications (dapps)](/developers/docs/dapps/). Smart contracts are “immutable” and cannot be altered; a contract will only execute the business logic defined in the code at the time of deployment. This means developers and enterprises cannot tamper with a contract's code after deploying on Ethereum. -For a smart contract to be trustless, the contract code should be available for independent verification. While the compiled bytecode for every smart contract is publicly available on the blockchain, low-level language is difficult to understand—for both developers and users. +For a smart contract to be trustless, the contract code should be available for independent verification. While the compiled bytecode for every smart contract is publicly available on the blockchain, low-level language is difficult to understand—for both developers and users. -Projects reduce trust assumptions by publishing the source code of their contracts. But this leads to another problem: it is difficult to verify that the published source code match the contract bytecode. In this scenario, the value of trustlessness is lost because users have to trust developers not to change a contract's business logic (i.e., by changing the bytecode) before deploying it on the blockchain. +Projects reduce trust assumptions by publishing the source code of their contracts. But this leads to another problem: it is difficult to verify that the published source code match the contract bytecode. In this scenario, the value of trustlessness is lost because users have to trust developers not to change a contract's business logic (i.e., by changing the bytecode) before deploying it on the blockchain. -Source code verification tools provide guarantees that a smart contract’s source code files matches the assembly code. The result is a trustless ecosystem, where users don’t blindly trust third parties and instead verify code before depositing funds into a contract. +Source code verification tools provide guarantees that a smart contract’s source code files matches the assembly code. The result is a trustless ecosystem, where users don’t blindly trust third parties and instead verify code before depositing funds into a contract. ### User Safety {#user-safety} -With smart contracts, there’s usually a lot of money at stake. This calls for higher security guarantees and verification of a smart contract’s logic before using it. The problem is that unscruplous developers can deceive users by inserting malicious code in a smart contract. Without verification, malicious smart contracts can have [backdoors](https://www.trustnodes.com/2018/11/10/concerns-rise-over-backdoored-smart-contracts), controversial access control mechanisms, exploitable vulnerabilities, and other things that jeopardize user safety that would go undetected. +With smart contracts, there’s usually a lot of money at stake. This calls for higher security guarantees and verification of a smart contract’s logic before using it. The problem is that unscruplous developers can deceive users by inserting malicious code in a smart contract. Without verification, malicious smart contracts can have [backdoors](https://www.trustnodes.com/2018/11/10/concerns-rise-over-backdoored-smart-contracts), controversial access control mechanisms, exploitable vulnerabilities, and other things that jeopardize user safety that would go undetected. -Publishing a smart contract's source code files makes it easier for those interested, such as auditors, to assess the contract for potential attack vectors. With multiple parties independently verifying a smart contract, users have stronger guarantees of its security. +Publishing a smart contract's source code files makes it easier for those interested, such as auditors, to assess the contract for potential attack vectors. With multiple parties independently verifying a smart contract, users have stronger guarantees of its security. ## How to verify source code for Ethereum smart contracts {#source-code-verification-for-ethereum-smart-contracts} -[Deploying a smart contract on Ethereum](/developers/docs/smart-contracts/deploying/) requires sending a transaction with a data payload (compiled bytecode) to a special address. The data payload is generated by compiling the source code, plus the [constructor arguments](https://docs.soliditylang.org/en/v0.8.14/contracts.html#constructor) of the contract instance appended to the data payload in the transaction. Compilation is deterministic, meaning it always produces the same output (i.e., contract bytecode) if the same source files, and compilation settings (e.g. compiler version, optimizer) are used. +[Deploying a smart contract on Ethereum](/developers/docs/smart-contracts/deploying/) requires sending a transaction with a data payload (compiled bytecode) to a special address. The data payload is generated by compiling the source code, plus the [constructor arguments](https://docs.soliditylang.org/en/v0.8.14/contracts.html#constructor) of the contract instance appended to the data payload in the transaction. Compilation is deterministic, meaning it always produces the same output (i.e., contract bytecode) if the same source files, and compilation settings (e.g. compiler version, optimizer) are used. -![](https://github.com/emmanuel-awosika/ethereum-org-website/blob/0df62bc5ef7420929f079eb3174f1d69e5a2e3d3/src/content/developers/docs/smart-contracts/source-code-verification/Source%20code%20verification.png) +![A diagram showing showing smart contract source code verification](./source-code-verification.png) Verifying a smart contract basically involves the following steps: -1) Input the source files and compilation settings to a compiler. -2) Compiler outputs the bytecode of the contract -3) Get the bytecode of the deployed contract at a given address -4) Compare the deployed bytecode with the recompiled bytecode. If the codes match, the contract gets verified with the given source code and compilation settings. -5) Additionally, if the the metadata hashes at the end of the bytecode match, it will be a full match. +1. Input the source files and compilation settings to a compiler. +2. Compiler outputs the bytecode of the contract +3. Get the bytecode of the deployed contract at a given address +4. Compare the deployed bytecode with the recompiled bytecode. If the codes match, the contract gets verified with the given source code and compilation settings. +5. Additionally, if the the metadata hashes at the end of the bytecode match, it will be a full match. Note that this is a simplistic description of verification and there are many exceptions that would not work with this such as having [immutable variables](https://docs.sourcify.dev/docs/immutables/). ## Source code verification tools {#source-code-verification-tools} -The traditional process of verifying contracts can be complex. This is why we have tools for verifying source code for smart contracts deployed on Ethereum. These tools automate large parts of the source code verification and also curate verified contracts for the benefits of users. +The traditional process of verifying contracts can be complex. This is why we have tools for verifying source code for smart contracts deployed on Ethereum. These tools automate large parts of the source code verification and also curate verified contracts for the benefits of users. ### Etherscan {#etherscan} -Although mostly known as an [Ethereum blockchain explorer](/developers/docs/data-and-analytics/block-explorers/), Etherscan also offers a [source code verification service](https://etherscan.io/verifyContract) for smart contract developers and users. +Although mostly known as an [Ethereum blockchain explorer](/developers/docs/data-and-analytics/block-explorers/), Etherscan also offers a [source code verification service](https://etherscan.io/verifyContract) for smart contract developers and users. -Etherscan allows you to recompile contract bytecode from the original data payload (source code, library address, compiler settings, contract address, etc.) If the recompiled bytecode is associated with the bytecode (and constructor parameters) of the on-chain contract, then [the contract is verified](https://info.etherscan.com/types-of-contract-verification/). +Etherscan allows you to recompile contract bytecode from the original data payload (source code, library address, compiler settings, contract address, etc.) If the recompiled bytecode is associated with the bytecode (and constructor parameters) of the on-chain contract, then [the contract is verified](https://info.etherscan.com/types-of-contract-verification/). -Once verified, your contract’s source code receives a "Verified" label and is published on Etherscan for others to audit. It also gets added to the [Verified Contracts](https://etherscan.io/contractsVerified/) section—a repository of smart contracts with verified source codes. +Once verified, your contract’s source code receives a "Verified" label and is published on Etherscan for others to audit. It also gets added to the [Verified Contracts](https://etherscan.io/contractsVerified/) section—a repository of smart contracts with verified source codes. Etherscan is the most used tool for verifying contracts. However, Etherscan's contract verification has a drawback: it fails to compare the **metadata hash** of the on-chain bytecode and recompiled bytecode. Therefore the matches in Etherscan are partial matches. @@ -76,9 +77,9 @@ Etherscan is the most used tool for verifying contracts. However, Etherscan's co ### Sourcify {#sourcify} -[Sourcify](https://sourcify.dev/#/verifier) is another tool for verifying contracts that is open-sourced and decentralized. It is not a block explorer and only verifies contracts on [different EVM based networks](https://docs.sourcify.dev/docs/chains). It acts as a public infrastructure for other tools to build on top of it, and aims to enable more human-friendly contract interactions using the [ABI](/developers/docs/smart-contracts/compiling/#web-applications) and [NatSpec](https://docs.soliditylang.org/en/v0.8.15/natspec-format.html) comments found in the metadata file. +[Sourcify](https://sourcify.dev/#/verifier) is another tool for verifying contracts that is open-sourced and decentralized. It is not a block explorer and only verifies contracts on [different EVM based networks](https://docs.sourcify.dev/docs/chains). It acts as a public infrastructure for other tools to build on top of it, and aims to enable more human-friendly contract interactions using the [ABI](/developers/docs/smart-contracts/compiling/#web-applications) and [NatSpec](https://docs.soliditylang.org/en/v0.8.15/natspec-format.html) comments found in the metadata file. -Unlike Etherscan, Sourcify supports full matches with the metadata hash. The verified contracts are served in its [public repository](https://docs.sourcify.dev/docs/repository/) on HTTP and [IPFS](https://docs.ipfs.io/concepts/what-is-ipfs/#what-is-ipfs), which is a decentralized, [content-addressed](https://web3.storage/docs/concepts/content-addressing/) storage. This allows fetching the metadata file of a contract over IPFS since the appended metadata hash is an IPFS hash. +Unlike Etherscan, Sourcify supports full matches with the metadata hash. The verified contracts are served in its [public repository](https://docs.sourcify.dev/docs/repository/) on HTTP and [IPFS](https://docs.ipfs.io/concepts/what-is-ipfs/#what-is-ipfs), which is a decentralized, [content-addressed](https://web3.storage/docs/concepts/content-addressing/) storage. This allows fetching the metadata file of a contract over IPFS since the appended metadata hash is an IPFS hash. Additionally, one can also retrieve the source code files over IPFS, as IPFS hashes of these files are also found in the metadata. A contract can be verified by providing the metadata file and source files over its API or the [UI](https://sourcify.dev/#/verifier), or using the plugins. Sourcify monitoring tool also listens to contract creations on new blocks and tries to verify the contracts if their metadata and source files are published on IPFS. @@ -86,14 +87,15 @@ Additionally, one can also retrieve the source code files over IPFS, as IPFS has ### Tenderly {#tenderly} -[Tenderly](https://tenderly.co/) is a platform aimed at accelerating workflow for Ethereum smart contract developers. It also [offers source code verification as a service](https://docs.tenderly.co/monitoring/verifying-a-smart-contract) for developers. +[Tenderly](https://tenderly.co/) is a platform aimed at accelerating workflow for Ethereum smart contract developers. It also [offers source code verification as a service](https://docs.tenderly.co/monitoring/verifying-a-smart-contract) for developers. -You can choose to verify your contract with Tenderly by importing the source file or the metadata file generated by the Solidity compiler. Like other verification tools, Tenderly requires details like the contract address/network, compiler settings, and optimization features to verify any smart contract. +You can choose to verify your contract with Tenderly by importing the source file or the metadata file generated by the Solidity compiler. Like other verification tools, Tenderly requires details like the contract address/network, compiler settings, and optimization features to verify any smart contract. -It is possible to verify a contract *privately*, making it visible only to you (and other members of your team). Verifying a contract publicly makes it visible to everyone using the Tenderly platform. +It is possible to verify a contract _privately_, making it visible only to you (and other members of your team). Verifying a contract publicly makes it visible to everyone using the Tenderly platform. -While useful for verifying contracts, Tenderly doesn't have useful features available with other tools on the list. For example, it doesn't allow end-users to check if a contract is verified (except the developers opt for public verification) and doesn't check for a match between metadata hashes. +While useful for verifying contracts, Tenderly doesn't have useful features available with other tools on the list. For example, it doesn't allow end-users to check if a contract is verified (except the developers opt for public verification) and doesn't check for a match between metadata hashes. ## Further reading {#further-reading} -- [How to verify the source code of Ethereum smart contract](https://developpaper.com/how-to-verify-the-source-code-of-ethereum-smart-contract/) + +- [How to verify the source code of Ethereum smart contract](https://developpaper.com/how-to-verify-the-source-code-of-ethereum-smart-contract/) - [Verifying contract source code](https://programtheblockchain.com/posts/2018/01/16/verifying-contract-source-code/) diff --git a/src/content/developers/docs/smart-contracts/source-code-verification/Source code verification.png b/src/content/developers/docs/smart-contracts/source-code-verification/source-code-verification.png similarity index 100% rename from src/content/developers/docs/smart-contracts/source-code-verification/Source code verification.png rename to src/content/developers/docs/smart-contracts/source-code-verification/source-code-verification.png From 435afaf5e86e61b2291c3e66e301cba8fc756c05 Mon Sep 17 00:00:00 2001 From: Sam Richards Date: Tue, 12 Jul 2022 09:00:42 -0400 Subject: [PATCH 11/12] Replace with higher res image --- .../source-code-verification.png | Bin 69108 -> 119863 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/content/developers/docs/smart-contracts/source-code-verification/source-code-verification.png b/src/content/developers/docs/smart-contracts/source-code-verification/source-code-verification.png index b25c9eb3f0fb378ba6c162a70e57dc3d236c724b..ad0d5a61f8e6a92f3e820cea6120b09a7e970256 100644 GIT binary patch literal 119863 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%0A%$BK5**u71QCYv&HT&uTE26T>5Oe^Y)5DTIjJV( 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
  • iVlE4O?0rHv;o7^vp+u^m&i9ezX2H#SJ;1zNngAxc+x@_gs_y zSGiNi!){xD!dG?S{HaYTuB|B!R?rEOvYN+@T7lavXG_j#9ysqgo`4Ik$xc z^V3qd-sF7Tzt5ZXNhwx zR-fbgrZcP{FRWQa3ENRwf;6Tshkv_8V05j9~&FZ3DcRu>cN;$AI22*>8Idh3U)WAw`(0dClga!0-;7=e$s;-C%MA8ES zpw2sRCcgmh$3ttl>;O#}7UC9xX?ks${>F_P4v{NBTV@2?@P$(NXqMSjHs#!&PtVTg z1mE@f*zP~lduwECZIPT{Ee~)XpX$6k?1T-$EHzJ0PjsArJYn##+D^y}iGldp*V`MI zxeFvjMFFXAnmZI1L}%1(Lye7%y|(y)vSj!XmBZmCm)iH$Q&KK7ODrFpV5|LM4K2eZ zjd|3#Pf79o?A(UCrBG(_6Eh?8F$wXduKxY$83l7yj_5%F(^xW(*5srifxD!`&f_&$ z1(c}`UJd@bL|#WVlJUFEU=W4D)(G6ZPf~Zawd0{7IKJT%p#@ZC?pi=^WmQywgHO(j z%WmxE=4Mw#baq?eELz}CCAe~-)cu$&+uvG9*?eH2b*y+YmJhBs+B@0LNJ(Qs?18YK zaad^ngK|)`{l2*g1ijc|wtuQI|5r*Xs#eaL7^v>_QzIi;3Qp5l-R>S9TDO2&45HIC zW_gTIfGf<}Z3@#9i4`y4g|8hFN26pg$_!CjhK3DKe<)i!k)#1b4haDQzzi(%3oes= zco4`5>{>+o?JWNa#bTGIAV(-_0?8~xR$U$StpEiW+H|kWDuH!PKuK`J)017Z+523N zp~+=XS6IK9n1L-u`<2a|-Y5;63_j+&TxwE*S)_Td;gc-Jk1+%HP5)sH|J$a5+U1|( zulaE;BrL4W+0Db_Xc}0QA@{9M_97Ar>f`$R?xi{3>mAIrOZK;T71Q;t_td~>=}8eA z=;NBl<}p9yI3pIPS4uAHjhqJDYy?cpY%LyY>WhA^WEi2oTuZ^WkH(6U968XltQt5} z=(%MDTJ+q3PPiC9_Oxu97jY8VLx&qoNrv!DWg9^limY~yLS22z^C8HU@}U2=e#EZUVFE}5)o zYRVkb_870nJBDDU$@7Ldey!|JQ2N~j(%NhugabX_4Sa$e!2dEozqP&n0KAglF`kZq zcW5dH+JGT6yrv;n#>dBzW@^&eTzq`vV`IV8V8^%nNUIP;f#4jdi8qZXAshoOdKe z{*?)FplpieY-7`4I_YOA|6g)sF#8LC+xhZ!RN`57!tnV9ebLd|j3oN~S$2F_eOxV- zSvm9`nX3QM!QI-fU`msqSvjviF(UrD4s@}FHHV?6_Sn&6AXh8Wm_E8_ZLN&D+AIr} zcv3R(Y454M3k)PSp$iX;6Af9%LGdb3T`X|_P_}T7TR!_=USQ_@0N8G6N$b%gDLQ^O zGCX!IZIj$ek8r{GR=91`hyEbqTXjdj%slaTB`T6XnMzPBPHX(&Z+iUp*6p-+Z*L%8 z(23W49XAhx79+eJUqj`OilK=t3Hkj4;@Uy}YrZ`--^=q*E>tL&xqp8?a1ZC^=8A4v zb;*I<3K+^*)`ZBiMkp$qy-v*24CcG@P;(ET(EmZs9{inD$;C4DH{yU1`hvYA<;Bh& zBc*T1#UULVtalhp@vv*HG3r=#@oVr}Kc^}=xi94`U`U>kD5c2!yMW?9OVxibN?=ZP zF6yr`;adosT?_71&L4fUuCukX6J24T^<-T>Uy|I~p{Jlq<#qko+CC_Ff#fJYiRL-F|Mul^5oc~|-FOzR&0fje=?Ya&ar*{|GJKp~EY_Bv zOXpH;@+}(KI@F3SRDWCDt(>=!ihb00B_ZR_csiS!#Q%IAs6XY?D8#aedAeKA^Dg*( zJ-49Crnb?lozpkazw>N#7`ULAL&MZgW{A~Ikd?zx$^1~*_~q-D^>?0HN*s0KPM3>W z)l=Sn1t7Lr`n4iVx8);slilLUtr$Al**VV#VKN~_D6gWRT@*6I3haVl6fM6dV9;9T z*G{>EZS=kSwYS}u8T8bbFrAP1CAanT)jbF=Sj*oZ+Eb}(=>?;dtrg}+v1yGyBr$SN z_qOJx2h_M=XjQc-DBcqFQ|W`}H1SG3VZ2N@P;N&cfwI=b^{oSEFH0LGYSVzCkL^!k zFyCXQz{AQ;-H81~h>{tH(7Yq3CS<>CtJ-&K&3-xg?9zaneIdODVQtT1EoZ;cM|^|g*}1TUm7h8gYty+d^NKw##e=p1B*#FH1 z>#;s@gS!B?ZRrL1u%6X!4SZrgx zy}Wk$z5;50n|O9^e7r*>z%-~IeGBll=-AkwhQ5$@0ai`fDClAaF4!?nkh;bY*kUL_ z7{Et@^nqctzL`(HVkejn|G=JbEgRw!AdtoO$rEt%A7(~VNTdtEea|_aST%( zP@hS&t@y`GKi~CX3L3e!DInrEne4GxRTnf`X{>pltaa#JCWn&UG^H^vwsjP1GdJUq zVy25!QD?a;)7)UGq`WkL-*LW7$0m#Vb+eE0_n-GYA_Y019|vZI>izrk@<{m^P{A=u zd6C@;;Bp7>u#i}BAC?-Z#1h3Hpxz)Wg&PdIg79#AdwUvcYVeW!^}TJ31(ev>*r9Q8 zWO&g4Aoln5ttpVbg#T#I1_Mi2VMTa=Tfd^$m1QN65Q(?|*my>SG`79z{yIP&G(X_N z2h8h{bc1q~FO1Fnr@xmozB?5>RSqvsVx1d(8*LhWwZAn`Y!B=_fL3ZuTG)=4Cnr8( z`5o|b<0I}VbL2)~1mOi`U7@^ok4%${{F*BDHT?K7A#+y0C>^z9Wj9+dmlBLkAlb z6(x5a?9RbicbXNv=716oFTNg{)b1;VZ-Q3Mutx9?_=q;Qx65*KVII{Zqdg{npEC@` zbFGumNwpV&gM_2w7U--TLIwuZ3@pI+nCmt zBO`0J-<5Pb7K?XP?Fnmc(YAby-0QZmaQ3mPw%yqla+hF@p3W@$_VGvDb+?en-d+a1 zdYbOAugxZ(N=w}Eh)lT{Fq*1M*~y#9@!G?{tHjlv>&A`pk`e`D0h30sQ3zE+bibdwC!Xsac#pLjIH1F}I7!%5C!9J@SyDiprk29Ard z!Nl2U%C|hj;Zunw4#akSjM0{xaRVT7*g42b0{jcMG9%%^!QfYl3X8Et8RL)N#XMet zV{ID_#|tbz%#si`HpyVC2*6Qa7+{CDZ{Kd4Z}Z{j1GPufp&9JFq0hW^1N)`B!VIyx z`XH!5a)Y50d?)@i=nmG4#*ZJfm=;}Wlb-Pe8UpaC=}G&M4zvYgRcPPjZzLuMY;_Cz`EHvQm@F1?6N9f8z2^p6$N%=;yi8%FtR;&87zC zGiEpkP&?pZjZ#;5fHGvQ9hQ7^)6-c@pg{t!{MfpH^cz>Nj?K^WH(vuRt5i+^xGpg4 zFg_JQ+*81PSx(-8+Rlx(RcPZ^$j*9LWjlbqi45(rE%f)DsBK@88(_Y-JqR2jZ>ht& z6)QN@{>hWdp`O7ou*KFHAmnAxHZd98Xq3MSayEMiyq0^C2A~TeAz@8BNGZUcPY{1} zo`s%%7HA2xOCX>DGZ@<_=+R*sd@+s0oy{&NxEm*LAU7RXPl$S0WXvJNhE8OnApwgf z3KQv^_jL~PtQ0;^j;Qwxz4%e2(3K$*J3K^wlVt7p&6ljgo8q2L+bu1-163>^40rrq zhMF4ks6BYVW3+Yda&%^>D`QZ5Ja)w3&(Hn$A;+!zI#DYWk&Ehb_e9@AaukS3Z{F0_ z?82o7GzMTI0}EYU$_;*$RVrwFo&~&aO;j?5bsLnRkt9%}Zyz$!f`8&wP*t6(fPotb zv>;&xmT(im_5*baJ3B^Gac(Xqkw?WApxN2i2T*IcXkv(sqAVrv09`QrNGF)F3bDvC z`b^C2>{PHlE2`L7+43M!MP4nss_G_`#~N%=d2l^&l<>ch>IwrR9SEb!<%gZ|8k;Rj z;Z`a_CdPol3uxGPe1rn%5dpQ75a<>Z7ss=g`y@J)Ar0#8m&ZjVC7AO$`~!bgR8i}N6OB~l7diY%TZN607>^l#QIhvcVF6E|*old>`-=%@p z`$Y3wujBpw0zXx(Qd4Jtsg%^$hqr#1I%gIY#0shg-+64m_I2x*B~!ttf}b`F9W=!u zr1~EwW_N0yCz9=qUXACLYaU+27@SS8Uj*XlzSs>CVB`N|)0HZEtO-_vHpA&DhH z3d@K5b=oof)k6Lt&?7FsMd_kjyi5)zzt zDo2zH9XLN4lQ4>F!at855w+b@Ro(g4!g3@ahh9*4Cq#WH&_?347!XFene(4 ziUi|+37aKbxtTcdacDnrPrM81hVU9T-ot7Z@0l;KYNYc4<|7KKWCPcI8QC6?p#`F( zy|A(x5u~Wt08_|H5BLmn!r^4u`XvE83@T`mXE+F3TLbXnU}3)Pj<>3m@L^;Tp@8y< zm$tG}fLRX~YVh6w%LWM*oRg0SQ`C#)f0Yo(k2C#ptjUIDll6Y21nM` zdRSR;%%ay_N#eT~4QOS6ibQA!8l?uKmn^SO6zuBjO$B1wYVg`eIR zUO=y&Kf|zz7a0D+?u_xjPgr}$^0Mir1tGylvem2hP9{bVFL9=B-4S~IP=D_ye{tKr zze^iO`_#UscwS1Mr{;e9(shQ~Eq;2#?yocIb>`l%U+}fC^wjxj;G5vf(!%1}Z=*YE z0~24W(O2}2dKaVUg)Aat*y zCJl-cqBoZxP9>o3&^#n|f(LbRc6Q)uM%Gh+%Hg4dg{!ZRkL!&s2n_?0;Gr4Nq=a|! zK_opG2G0~ec?&i+gey2hB_Fa)FB??F!_^A{BMS$-e7z9{9(;Q*l7tEu506knI3rFA z&G?b~+F&fo-1UW!U7F)*KpOAIJlr!Foon(*~B^$iRVsS9AH6)+mW`qxK~ zjKLMc?hS5sWeh}lCJ;x8OR5@QDKRK*yqKk`z9=80dZGF9!Dg^4e!MNT&R$ny+7|%#xGdZ zlvD6H`t6^cUyH}_yvpfE?U$+*gL!~WGOpgmelzvL|4mPChpO{ev2cVbz6P+EQly}OJ{sK2Z64Hs!P2QD z^*i}iFd#K%#i`gBB@l;}d!YDsiZfm)^hgFhpI`h1Jv}6M!ZP@!2ecI!(z2*b2$03l z($fbyrT)M(SCH+sl_KY5!0-vygL?3V9}bLK4!RQ&6jM$r3_McOy9d88z-`9N;Ls@F zT+YHa-2`0V)asy$=qs0k+k=zt2<-u-*n+y~H4#_tnYjLk*26xy1C(!uYQDXd@HC4d z>%H-a$2%16^#5_Q}4ey!>8gX$i%gXq<)K(u}xoJgAOp%bFdgn%K zeDLqJ&?>!{j-lvwty@v~O4O}kz-=~Lq7{J)C)BDbE32p|a^g1nUq+9t2=JS64T5fS zYrcubF)}*3!&MeKF1HT3-4i)p+wDj|$YGQK_Ym#p#M5&?BjjR$hN$(uYuTd)`D!*W z7&Is*A+S{@g<@olYrrJN;JULQEh6|H0MY)m*0eZm%+gMvALX_$E@pu}`X;xW171Wn zJm)=Ulun!#XY~v;#W1nFtP2SbxA@E~c#DV%n5nl_&CS_4LANWB^iWS*`$`jm?yH4| zu=xc@-ZmWGFkd-OY-R%XG2sC_`4#63;s!0Lx79!TCQ^S6+jxh^jR{vq3jc1j*6{c} zbS;0V4mpe)p@%7bKw!f@Jp3*q#RIc<=&z_#UY?`q`%rV6ZAoKP%Sj!=fq|kJQcza^A|AwCrKFO6beXT{C>7 z(^NB~z{z=C`f3isR4$?KSKS5!vuPV0ei9WW+kWW2(uu=t#%DYuOLB*M&z{wR1M?;~ z3k%BtV_p{U*l&}d!K^#7UkM@ugD0^dZiG=Jn;)DT;H}sa8Z3VG*0Z;>8&L(Hm&zV` zK5d-$=K3;w$H)0IaX{u#!(nduIPmcC3ni9~wY97wX>MqsU8>pOC@WD^!Rd;Kipo_1 zEp%(&HX^HU1nQ#eA-acIXY7*!W3yz866br+!u_I|{SJ-hs@~S-=GfE}&;@Bk9NgT5 zlc=wO41$l3$PqSfis$NZ_A09+U3SboSE17$og+e7a>EABde53|Z*_)@r+DSwuER}| z+a#U8Pt+8~erYsv{2E~N-aF~#GY;(hfE6-8&Mv09t7G`kW-c>kP$D`jv;X0$W!6kw z%8B#vDdSr@MsxCy=L?U*#|Nfz*(m?lMaR_9(;glsfV)5;P-rQaNp%}%@1bi3Sb*M6 zK3LpK(7E5+GR?*IK2FASj5 z_tnd1g!t8x)VAN3&Pmlxc7uugxgSWy&nEax%Ak$f?6ZC7O|?si-9kwS|Gwf`VCa)mbwuWrNWVH9*OEQq1ue_fz?Bz8+aSYF`>b4mSw57C1M&% z94KVA3A?qsOkjx6#`cMZm7$d6YA}d$1Faqe&c9EEd;}-~SKq)wRckmGU>GyM+d#vI zb*Vew1l%`Eq6(N*z>Pyd`?H`_o|CXj5WGXkfRTAXV`H~rGsHQ-1VwpydCY^6XEkP4_5;a2}Pg=bZJta$)rpf%Wh+k72)TqqbZd0_VX7FU!@TTW!gWU551} zCw}6#Ln|TX3X2JGQk$x-Y*yR58%NG7AuWM@;Aitq z>P^6^l>!n27xPPND;p>0Dzp^{Q}YQ~TbR|hrYnPw#&>rsfa?o#hDX5u#|suD{tHSk z=sLxHLHWGq0`%cYZnzDA$KF~og>vWc0uvVf2M>lIO!o>E(LM~(HJC(BmX_||!upXh z1f60Yz9blU+uMV;!J7s@So6+RgtI~>n8Mrx)6SXdaCRT$>eR#p%Ja+}&HfQg?6;x8 z4$k&l>7%kEOL+)^#8Og>r?O2&MeCIo-JrBzkA#Z~`+F;EVqrxg+}MaHuty1%TfDNC z3%!6^y_U8%27N#^P=G1l3qf65L+cL=1*1>1M-vd#4p7`Jmdn$rmcko{DnekOjX(4< zG7_ZQuU6mNQc_a~5y{EPL7!N`DB^;X$O?Y6=Ozx|lcmb1{rEAd7+NV8SPLm5t2VUJ zX28(KOi6c!l`ow?R>QHUuMc3CUP1aKI;=Vbv@nIVz@0AjHpN={+ZJ{LrGzC@nvpT> z2mO#q%BH4~#FTt@GxF*SOZRP{iM!d{cz@Qk())-oUCh$Qrzf-1T=` zImEUwKZ*&ZHqU8e{c4Jkx^veM=pqW0`s(1c8>S-?+<*s6t=1Dz#gxVpvdM8{T`&sz zCktsZbf|QIr$QU+K=>6-9(VzN|2|gIJ=u)Q%#0oV7^D~)F12YmZ5R`8?4oi{%WOih zA7y8lt3`nR!FB4`Jm^2zPjE_F28lRL{c@yk(eU+6Q76g8h3SPo`o6Si4YkC{30|Wu zlSi$K8dJ_++}uBnJtgfT_xl3mOOkJ*i25afqBCe+}{|3k*dr@u0Va3n+N|W z0r1%ci%$^g$OR*P9pRoiG`l5=L<^u%RMDNhU9}qoca<09`MiulzYmyig;F3bm>nXf zQHI}=x0^Q=SO$(i`W*3erf6OeLM;isQ;3eq&uR(NLbqa~Jc4Y%I1s1s5d41xNmfPW zZ%`-V+bm5O#_^+9D}d7vmh~Aarj$>C1Z%P}FZK#E3oJ&t52W$=$A>+kR-G2&-PGWv>ki(ktdtQ8R%to>S+ zZXYO<<;Yb1Tyg0`>ZXzxH7O^9JOv$BQy@lv&TVPwDH+kdxjTofth75GmxkGF*BHJ- zi;6%j{`ip#`CnX#YP86mB7hQsrAcJv==kcKr?or`0GD^*s51}z{W0y(Z~77v4M2op zgt7B;R;9HFbP2%DHY0S{Itmx5L62{N+*Ma8K$hb|?s5!zX(P-dP8GC2~f z-G}&!5W|V?jhd@BR(HjN7(jKr3jtJ=it?>2LBMk!$susX33(C7Ez6vOU5BQ}=kN)x zKA0}RsRkgw`1mhDIT-l=wr@?5s#E(CSBipOonNTDX7Q`uzH6^2W6Fy&DgK-$!|J3{ z`Mz6byQgGR(i<|m%#=bqyGb|q7tUI`J?~h;BMJ|l`i*Nnh9C1SdiAHqR zc_K;ISrf#dk;z{*)PHz*$Qt|8<8)wHG{UXt5+-G6Dw6t0Ll=+G1{tb8x)(?FpoTV< zsQLinCk_`R4ExKy4tPXK=piuctt?$!r42Dt$hedKY9&zPJe}jwxjY*Y!xb8uyEe<{ z6ef=!gEfpl`EO-?{UorfWBpNGRdq!@6X|Z^R6xZQwF5*yhgdvMS)~Ee#b92*B3CPJn zb$WkJCWKU9+1gTP0ZC`;G5!vl{B+z34r;zyPzR|*(XZOSULU44CY?_kQaWyksa`5; zZ$oS5ANTMyA*V0d&d8pqP9@E#aAww7X7O`>yZxIC^1BXr2bdOVK7T~(Jo$RIaqI z?Hy+@^UC;>l#}^TWB$Z+oR=m{4_Z`TQlCg zJ~w_%g!!tFXIll^H&Q^r10-I3K}We1eXwVP9w~6O)XW@+3AUfJ0U#(iVb(3*Kz!EoKiqp^2VTaOTsGe^ZkaKxr{Ll9V(orhVl@Jt-=Zc5{S!#q4Pu@{0+ z0H+`!-ua;+l7ld?=EV5m>g6mUDVZzh4Mzcl9k#_;z{8K84=^-Hcaog|_HIRN5Kq2Y zFd}gVcocHFa;APbzAkP0TAq@UlP@Qvq9jSYw+ZnM@4Q%bcePVq8mu}EYces}z2|pR^caJ0A5t!h43WtZ%i}UUg?tfK zfMus7ebRZVzBPUDQ`v)yDg1gFg3>18L zIyz&$Q``J$SlM#ZWEdDrd&iY*KLrMuw7r$RNL@rjm;hc$(M#@Deiiop!X!T=dZ4;v5Q7}zoIt`79Az%tU-(U|~( zC!kg(W)cGE1GYgM3VE=y(j97cz@w;m4m%CG6#O@u0S*S^89;#D$e;kjaDz|r?Z^rfcG8&WtTeA`+Em|O4MI@f}rU*P=Z3ZNeu_2Q%+1!Il}MOUgvBo z>)#gk++P+RN02A=*mJxYy6CNW)6X(SR~uQAmd^Fq?TPBs`v>U1OM4xOWU_9-hd=cB zA|W#QBIkYGH7UGP7+$$E3vJ2tXlvCTsK2=-a^c=?&35+=Ewz?geV((|$=>wzNk<1| zO6MgG(b4x6@tx5hf6p-?o_UV+qkr==Gkhl$057{%bn*Ii-iKeRyPvTCK~TC;Cun(q zsjFl7z0L3!iX|a8{wIcR$ylNO401a95_4a^-t=6f5%-PsME?5yvI00eRFE@ow^VMntKwS_MhuzOO)CGxV zZj*u%q44Q{1G$VNYMxq;1=t?m(&6P9^axfyL5NWfI1Yf4?1DuNblxbhG>^o^y%J5~ z10h&STJTq3rOhK$wl_DU8cEFuG;*!2r|Z-?b+I>B8BNDaL!j5 z2SRCnp$HsNFud$MxjL;5?7EuH`FUwc$+z94tU>2W2k{jc)P$#*Vha4Q!22(VP*yO! zgu{x#GesarV8@1m!;^8Juc(CO#i8xfcX*w_L^1oWPH$|tJ<~T4u^4QV~2oR~5(@FlfFUEpiKbGA2HU3p8$WXh?vE zhv2iz$4Gk^kBpvZl0G)7-!q>b}rd@gv{kcIkzs$yO|G^5g_*bWDu2 zzkpf>q2RCUoYym>r8k*roAr(A`sX*3-{vJp;%3XpP|svN`FV0k_t1S9&h|jg_fQ{~ ztW45}<$oO#uJQf+30oRD!Ad_rHqNJ9&j+(uV@1UdBoggWN?aTY@odZlBq}W>1rc0WQj%-g4Th#j)^MuPZ8V5+ zu&w$6dvXJ8QM@j0FK_Q`cT!%4AT1)$d(bkpVWn)BKDh;YI9ZQUZ|yhG_)t==>A-t( ziEtv;DSf57Are*EV+Qj}I>0KaXcHzUwLHu$*xCefN<{ zk-g()XiH2iv&@TQ2T`To}@EHW%NtgQFkgv!3~sGj^8 zr61*=tYf6pD<~-N4GX)b&TkqkMRrOmnCs2yYIHuoW&buvmaz zW3nfjacNJQ^YfoohWxAe*zh#?oFl*G(k;Rd~&MK*-{0uM)2 zxD}Vv4iJHtRJ?#Xtx*f6fVOw79oj#>R$O;k;R4W_x8H<2&EkR>ASMHPdPhiL4$zXX z(1x@h=IgMCi+lSv>K0_h1zTfLeMi?}>AxB!F)mo!2)d4%ux$Vd3dv~c0oI2svpiDp zON1bUwNA(%hW-Eb>(|}NS3vO&z>{rMU7cu>SjXVtt6TF$tfJR|yDK0-;>Zn({Sqdv z-Q8W;(4TwN)3Bt+U?8CG)QSkl{1>(fSd`={an`M__3t!z1DMVEhs3Y>O!-Zp&MP+G=aR1!Y?s&5W4{8w4Y*+a6X3o+;K7;jXpTh#V^!MJjD$8MJD)hkANTHlK^ zUG4qNL_0YaO{1|-zSnX$n*Je9pcXXECS>{f1K`Q6rIY!RqV@D^i$4qB0X#0jbs^Ef zpr$5CeajAbzPBy_uZ7*y2#Ku-0rJ~7mVOuXXOj9%$}kX9z2WJLdIotG;JphU*-RWv zz_)oqZ zo0GhL9oG?tV!2>z^66cat^tM!0=dephWzJ-`o7p9UvIA&fYbK zf(yvJk~rK7eYDa5=RF@re4Oz+RR%C#(k_M*i->a#lJ}kx^`#Yod_sd&NMIu zBcqewyvgHR25~^pXv`gN$gx>jUS4#{W>^v%T3GOdpIJzXf%fZ}U_7vfT2~>Gy0iKE zqEpCIuHS)hOau)p=ic_AqmznlJWY%Tv-%v=+W8p7I?0gkqZsN-t7tVl0i8HPP{)*Z zx1S^!2rRiwiAJnIt)*fn&thCXfHogFG!&!qRDM)p&9Gw0tg?c7 z!;`FI5+=EZHIm)Ggl#}1${__ID+%~^no$@U8v~(&^Z=z681TiosOstO*SW8TSOOD= zR=Y!t7#5k&Q22~=rzIylwKpK!U=(PB;`C6B4Q}KK(Ow7gh*3%`nBcrcB4t%{LCFvE z`k@10gtcn4nWo}thGE^LNhq>BM=|&X+wW>YAjKNi#lYSP5xoP)`Eob|An8}Od38(F zF6l|gL@gWs8H9p%(D=5Z+upL{%zYF0uB^$Np{4WK`qJnVQyZ(HMyWr4Q5*7WGjRj9 zQ=QT3&l-KtwdDTf-rB@|%Fa?|TJE^xUS1#D(Q|ek0qh`m_Zs+8pdQb9!2-wY^&0?P zrlxE@5tt6b;^;%*A_zHbalJla9-wWZ-8fIVdwZG|x-l@N*zI}(yG6*2&8K~jR^Fy- zh%2Zh-Zr{qr3=_XTibUiGP^@YT3T|M7&^G7U*S!eB>{>Rz=5{Y%}5Yf8(dSO|DkOb zGCz+F4;Ptcr>AKb;zP4}1d(qAn%9DfSm7}Df>mh6KuiEM)oTidoV)S!fPD+G8u+ko zz%^E=@R6V_Gj@G{ zJ+G*sCjdB1FrA$R_OrI9r1ZP}wh+@1$+PwcXKNP=7|f~2+ghO0J_FEC=9o7OY$@Bv zRe)L-4tA>J8atyoO@=#^mqpXOE%F61jF_pjWo*0GVvgYXlsI;mG zC{dz5%6r1@CRbZq8<*BnFOo43nl7(*k%z7dtNu&H}bIG<)dy4MAEu-7wc`ym;tl!zZR(It)9DU>tmSLHC{CO zy^hpYF?$6D0YRXL8htQWpbPRsNJ^n_d*0ym z0S{Z#U*gkbzgVnjfg2?>Z0Gg&y^7J708dR35vJRMml}9Dg6GZyK)8yo&5lb>#^sbw zKV!ipBBc2ej(E`Sd))j8XH|`a^BnAi*A*%_Y;{z;0=h;niGn!--gJe$X;T$GH)W=y z12dJ|I~5S6;|o14l0m{YK$P5!x3xoF64}*C9G8>?wL<6y1BNk<=(Vxm85mrd7v;Bb zrZFnmM*Rzfr&J?V-bRej3AA=W@)Ipn1=@LQp=?8i_diTH`6}q-u%zHdkU?#wWp|kp z#YDIaW}2UV4h{}Gv7GOc>ES(BR@wehYc3yFb7o)}ykRQIY;vKA1_U{o*KsEd_a(N? zioQso|1<{+CDPE)@^PUv==$$RikjG|m!Dd+moF114*L4c?31ix@fUDV zaNyvt<>mK9MflGw;O}gYP(YShf58R#sPGa`t)R3t`k9NHTYJ?htRKMoJ&WH3?^T;B zMidm-HmRi6o4>*Kx^sKslO%A%y9IZkkXAf}bfe0O7~rTjef$`p-)b)7y}#Vdr~Lf6 zRM!zw0O3RlBGp0*LXKkaj^MC^u+G?5C@CS>TaSZ(5QJR8`>k=nETA%k|p{0 zqPdrv9U|Zzb*cj|5w*tcu0J^W6$_)zEXLa)y%l5~Ecl*mPJXb(<#`*tn{eg-rMt48 zP=khZ?kmX)(t`qRy(bsN?^nsmCC(PnIkq~MEjQ1%ksq=4OqyioxO&svF^w*aAI)Ch zkKPsHywTkaJQ=_2;$A-g0|4!1xQnm-T&Z3ada>vF{MFLgAN@NfEtQ`?q)VRTMuRH! z^IZRqJ@Gu?{F$G;Dn~wC^D2P@7Y~DCcD5EQFY272YfITi2;K-H248$^9aw^=5?t*L zIuL@S8#6sjbOg`l+8P*9=(xdy(O#7%1~x69h9VT%RZTR}O9-KA#R>BWEE-5VPwcL* zfn;|abL8yObsvIXu$K2ufgXw>-wntakgPoTx3yKy`n9TH+bG!{EKWf_4E*h2eYr5O z%g`jW2Oit%Dj-fH67I;4q?`q4QF+sJ1aK*`+PS*!|AWcW&?LY3dkj#}7bd_tKwxS1 z7@Xrls|QBkX6$PLDpfYa%zRc)puwVks1f*<_`ZflJ@hQsBqqcm`rH1!ib<6nW+()1 z>iYqK=aa!gAWR@NcksT34=}zQa4lwJb?BMH{-2~WSwY;2;UDG8&x`Vpx*ABsB)ifw zqayo%)%Ef4SSv@VX=udWd7kL^WAzww+h12R|BQRh{*Tbjzw5NAuvCC{<(+(>GdlR;cT;E)A!gLp+BygN&C9?= zYXxKgtd5oDsX@vBTPm8qFrcYsNVtWST?NfN57_(vVa*a06SEmyMN|Hpd2x7MaO!eD zxkZrJRq&TkJa)8MO)*F8WBjW8eAtsr4iE1D$Jiypn_|RX0)o1xk5S~aDD>6akAkpg z0TOs|H1Y6|jhDN^?dOBjVj#&IU{GI)PfdMdX4aZ`O;XYqAbMa?cgKhAPK#r&DY%KT z76b6E{5wGO^Vz=YX+?AM8L9sX=IZI|`1mT{-%h7-y+Y8bg71W&(h5QWc5|{uFMG}3 zyz7n)0VkK@nwmpcgn&Q;xkj@Q++{RVh}1!CyFbEuN_jgRZP z*%XvE9KmAjQpV4#pZ?rY&ok|#RZpX#RJqL{poaiO#Pc*@F`{0SfKorZ_Q$6`y5wib zI6-v**JHO20iO*ZsMeCSTR=(CtxyBV0f^O{Z(%{HZ^;H$A{Gh&?zNugIa&)Y0$MAf zQW_JpwkJ|3{z zrafmlfa$HJS@i~ZyIT;4ZRpYp`iQHVkjAbhiscSVr%Nsr+g#S`|8~q0Kx&N_6!QN; zgm>=kpVxEQ$8Grc&qJ|!stn11jCNAyE^8C5>iNqXj^{J9ss7#XrI;BcU&r06q=Jt5 zQsxW6h@AKE=afStAYhV`&^Iujg{FiIIF%%om3iCvpZ@v-Pqty|i1%q~wm>;w&selRh7 zdO;llX7B*D8Wpv)$orKrl4Q~)IAB>TCH2mD95_Sc#385^^OjXL2u>kG>CgcGopWy;M)y|4GdXKv3W4>VCmKeD+A~`RH;dtbGU${?vw){w*4dI?ndm+qZgn ziOem~SWgNZ)lx{toaSRGrtFIbTY+u2qzbtE?QF>JDuB$**a~RB&6%=CQLP z;Gs(R9CD?F2SF>`3oQ(!iIWl#m`krLE(XlhNPTt-fs;L12m%BhBB?u$fmAEfUc0QE zGKY}BtZ0n790yowK`&r?C^)QQ{7scQ$aqyUr=rsg$df=FpT!l z0N*sa0HR{E*D(k9gOX4I;@PCII7sDwfChMU%~_T<-%e?GIBrQ7bg0wYv{*2xRuI~T zvNFra;Zw(B5_T9Nlty|~LU&KrO-AVl(5A)Rn{aV(02&)1ftjdOteW-zqcCAj=}bQ+ zQJ3siI$)I{pFiv$)P{%j7f_fa9{kPnYnCKoN_Z_H&`lM*XZ_D3J&Lz0 zFzVg<#RxRSIBE!sJT)d9Aa33gvz)?r=n$OTd^xh{{Q7kph0o$K@ z_9N!_H@G#K$)=+zA?xVN#Do&d@zIf-#+pVwAhf9YHXJ|?nCH6~$sh_5Fo{uW3k!=x zbL8p4iNJNh`^P;i+ReUzLs5+a>_O9_gS$0`$?53svv6{7WLrIg%?T9NlqHG6*Ta;U z+J=B7nM&QtI>7TwHchQ5ZuZJ1C<3M6eQps11lBsQ!t< z0-cFCaJaE~#ga)A*8`jYcyggysgosbyKSPSH3~W*Lk(ye11i<6a3B~l1}rbe6hMmu zNFl=jq9PC^E(XLVf(?Kv;vGx56XM~?dJ}vEs7B!0wUFWk44Lff)W)yV(?8_ofD5xS zKk;p62!Mw^L|@$o|C8rV26Tv>=u|W`?Vci3ys?>>N?^Oh8M!D=MpdKI)Cd|iEd>S4 z)f`4H1Q`cM9{6Hp1qaNO7Zu&ldkj`5I7PrSA0Yuf20(BS=#p5Not+Jw{5&OWb&#F| zUfNa$_#V<0_5{fSCKy5^DqU!RkANzZ7Cq4#wrQdCT1TD;wQ1H7W)DowgqvDAu;+z0 zk22YPHwFFfRd#j+`!pUL(eW|dXRuG=`rU-6;sIS$MT?-kvvWCsnrWpW7?x0?EkO*R;8&S6?k zIaEu^X(&;=$op`E>ox8p@m@oM5Z0NzDCBjQ90epyd0hInNRI!*)>npQxo+#yjf8-7Nq0z!APoXaN=gezqtYM^(xIeuBPiWSd`Jlj zNQcr0N`rKq!CZT-z4tli*ZMK9YvK32PmFPoJ9v0_hNK@o;)UCEDyOOnL|5s=LZYJN za)9rkX@Ii?=$LR#?vujL;KMpV4gu+ig{zOJPg@j}(*VlCtFMmbR##h_=!t5IZSo9K zoiu4++*|o~@Az#r{Hxi}^1E07c&xW-@9qv|=g?symy3>wFi*Tr&UC)jF%J0fceJFq ze@bG8DZ&P3z=dJ$=0)Ob6Et8$04L%+rrnpBZGfAfpXilg4(e=b*%7IPAv}ijW!aW} zJH^ntrx4SDtW(BQ+#?qeGRyBP(b_|OcsH;hz7Vb5AD#R=v;qFrhR3EK#rgQ+bhIg9 zPl6vvwhrL5<2|>O{wy!c;Um5nb>;#3im(0ttfqKppeSWa9_dmPF-OyY39iNZg7-UGiwX(?;;22Ff62SK2`5_OY)t~;rs^9? ztjmK^@)!4b{~ME0edXCzm|+#UGY=?&!cq{e!%?#s#x@P58z!06ASYa3E+nPr zifNYL@+ruXH8~!p)KI>;Ki$lIUFmxY9G2zPAAPU&DY#cx*2?WSmFret9ogsAUJI2G ziMIAV?_C*>rw`TCp3U41+Sx%?mNclo{4efR)9K5LZh&?sDqg@i#poCr`w|s6Pk?aT z2QlhDNbtXqUp7ZDC4_ZOP{wiu&Zj_i$0$UUSr=+za3(*rcnJ(wJ~{pgR*3(DHjI~- z7k~iit}Zad1-2X1;BaTe(n-Z6_yQ3CbVANzM+Pt`=y>mRe`tI>R1Fzd`mVq0SA!WU zyk`}g&rnd7c;KzdNKePW#FQR|{Z+A3*$-?b*kkOhWnc|9#KD3cOIN2LPojzE4U=TA zBpemh2M==ZV9Rz0n&O}+$o|5YgkM5ERff(0 zgn~PdzTTLFN|+zf1we)+jIaC~E07cxklz)2_@L(E0MHzi3aT=2R)cfv@0U8`@?R{8 z-v3WSV72AurhjsB^+0CzBE*@@^jGQBR#yGm#`5SWpg3)b2_|e*dp{o#$(Meb)z?;} zmBfotId*cPm|e0c=#{EH;Ca&jsE>DOcKi4RKlY7}zgTnMarwr=z){NgG99NfKsig& z+wD`X?LJR+R)ph?C>1?*^Z0x_&zTzyohc7H7+S5(AF>!f82HLrTx@S+w@pFqb-awt zUar#qKWAZ~`22!`vXK<>ii#F1AK~4CgtrHD04PL6Mq1SIkT(_ALW%3Q{++o7l?JV- zq@?dlsDB6-gp}VX&CQibc3a%#HZz+fg!?|`1|NNzXIhW-y_8E5KzX6j2n_5sC4&Kt zwl17NCM2^nA&0r5f}y!A<2R@VOf;;2RC2e3;AjWIHzk4pj6M#%L{UYDaJH_ zPQFS7p2W+MpV9t%M&AW9dg7`VAZFYhPWy`x4fmU&&y0$JKp;8<924GKw|QIWD}MQFT}cd)99T!be)$62h$kTS00-fw(0PE z7;|!3uQD>w>#_X11XJL~q+!%O{e5Nzw_9*}adkD6bfM7v>slwE1wf_Gqrt(& zg%U{Ln&k7fTk!G8Ne;JOG*cS>`qtJr_z#1FMG`dXfL!wBfWPVq0z!HEdwVOy_0_?{ z>;UG5hK!7i6$Y!>I(NDW@t&&=0!#!{44X(WWV36a!ygh$TMcKWrb020e_hC}?F5!sMvQk-tKutWhJKn!6l>kzlq{>pHwB8ifkwv4YYZ1jAxygf zwLHYfe-Sl%_m2IN-$szrICr3}8MFE;ZU(!B7t6Rp-1eWcN^OMQ-H5Yp1Wus-8~SK@ z0?#KfhB_lucaLLe*B0QAR<9N7&Y=+P z7l99V4RF`@4h|%o=lvn#3nsT-%8&{Gw!JW2g$L1yijHp3AS)6hWo1BI9f}$#GN^UY z(a=m;+@awzn8OJLo>A9FL_`R*q}5=awMp2483t3t_j<@&9Ga`pzJUu9h}(-raPTLw z%2Grk&W^SPRq_Lhi+=$`6$x}cXtOt}K-v$@Vq$X|h7I1nPe3AqzD)3W1p|C27&`^j zw#xytUHcW`C#@{@F{o z@*lGj*_`i_jm6=H<9;dB&~x?vF;0V9z&fAMd?YRwngQBOTiZ(ozds2T4Afaix)Dk# z8??R$Yl)<)_xb*Tt*^yYdv0dN!uhSOw9$b%NRLHqrGjds3O=Dl9zb1iU z3u0JA6~9wGnE_w9NlXmaOd;$*mQTQENNOF0Y5Nil+{WrADG%lIJOJ zh5FEo;dGxu_IA%CBW+elJjfO8+A1n4AUF^Nn=eQMe1kpB&Vc8!ax4nTc)ziqA8kFU z$reS2`?;z61Q;py%xMhGZEb$n3IYoiF#L$Wtym!qW6!`zLiGk9kp1?6Quz>~k+W5) z*_^?B%lmKxS-#^Fay`##ah2^C+d+F5iYl3wM=Tjib?u`y+IP_OCcBr zkm9KdGt{JVG*uIL1jobKuIc0|rU3|;yQ!(kFaQg3z9T3b?R|w8Y)6;^!ZBaFp(=bW z7HEA+R87Pf9T%pgcC}?P)T6r6x{i0{7^Hid-q^Ns5dlJ=|M)2Anjiap?^ z32wt~WMq-}@{@7fV*kub+GAKPEU?8I?V_Wkj4m8l;-TiKzvq>H*DHkdUsQ!l&&c0_ zSg(19%zZ1n88L6q^3YOsb9e5FItf{Xb zo|Fi_gHH>2k;OD(sVZjJ>q5Grmus*Phl?Y{^)!1eOeydch+S9K6BU03yO*x8LUNxAgJ4?mHG&Y829y#>6Q~$xeNFEnxb1Z zhGkZj!74-kU#}b&FO`5~WmJ&gRV7}3Rx&!D{Lz0F`i7WeovL*D#5N ze3pUshbk)jJ3H9~(lF1Xu-Aio^I!-l)nDcMm)>yci4(H`?IfkqLc@PI_GBF<`WE)_ zaPMY_x_Nkz&p4`T15YXLeE|NQ0!?G%m@Y%0!Q(PI>P-=n;~d6YJdwEkgwx+c3HHMp z?hIfu#P#zx%*WyRn7us$UB~l(n09FU^Xt{t;kxDFjx#0p)#bSh-*RQ;jaz&?g>UZz zF&(5sSC8COOpOpNx21gcmgNv#1Qd8D-x)S)Gc@-Y;})7*NA0nAcK3qnU!!Y-*N!^^li~ z>$-KDW)K#JfYzH1$f#6*$&i=mN*k$YX=6eyvSAMcuhleF5eWR(s$n`SYwO7HaQ@p* zhvM*Aa`W=QDzMw@%k*>;^p{gNw4g=I=@SA7COtjyE87`e%(_R||G5^a~u% z1U7t5ZP!v!c?}alCKeWWax~{U%FqQ{v$K&l`S|$g!A&vD6jT1~iL9u_b z7F*zy&F~t!`^{y$iH{m{V2f1o{5{+nFn8;$x~36*XP3yP!BD)--i`;c9$g5ZwL}~a zFT_&VCQRi=?m=9*v5`@f8~larYOp%eHkH@&IA3EBXTVKI5nC_N$gY_NBV8I`@F4G- zA>Xsek)V=h#3=YJUp< z5I|EE4dEsSXJ?I5RLea5BDm9_gfw-ze@$AZCtsuZ8i8}x45XJ)3oJ(obrN6ln>T~_ zg+TEMf9Os#xNv+{B_2Tj_sh4_%_n*~fM`}4W}Nv_FS_I7>o$DRd_>#Iecrpsx3`ny zqRfp-Cho}M+Pc$`KfbPYw2I}q2N6mxR~dHx6d{MiQ6Jdo>F4#I>iWOHPE+-i)2JPeFK&}xHZ=9x2H zcfcB|f?xE#y(W?l`2Jv>PH@I<7j8kK?ahvH(<$nXN&n`TaIQujLRpMRF!~Xp>e{a- zG!UT!9A?VcM9^L#&2pRSYKdTweU!<8ElKMSWvBDLEEM~WWvCKN9ab3q`$IXhLxRw_ z{<(ik_2TqTInYLmw^KOfz`0|##uVwUm{`X}xHuPtANwcb#x{W8X%m9yT)1QVwm6F3 zrKv{HCw#jA7gNGj)HoSXx^RKr&pdV=3^K_vt%BEKzFBdNY!??pNjxBZpA>2bFv%Wz zBjnlzX-fBXvwem*4mN)OmKj96z_#=c<0~5ll`6c6e_@-V2?1pu*9v*1^F_)S!6IP0 zJ3Y8BmDGY)nG5E(wr(t`=L+0hM66CvO-W;_-#rLW#F1F5n623{4QQiu#(9i?7Pz8= z+-^{;cJ)i@3foVpc$+N|Rn+^C%Lw;5f=io-x+YFA_G&GNz1X15xvj%QwX6^?cDq*= zA4M=w22E%Gzq#5Tol5=NB*Tv`WKJ0Wo-{vT{1W@}K;qR13J)`+jh81TT|9Y$Ss=xR zu?*%9Qu?fiAQ8Wv9Mm(|W5Uh;hk`oIydf75Ts75)t<-dWmwPL)cTYpZc<0zi_-A7@ z$ggg5(7AYM#-o5CMIfI&R?Ab(E7o9LOOJriBfbNBh&@Xo z1hbML5i2Vg4a0T1BY?BY*@FK43QrFCF>;H^_s1{gE+J>o;^{eDY@Ipg3lJiZx;(XtdM))9qWlwDNh4)mlUh90cQPB7uYyRnK)j-;pE zM(c@T;Z3|O0QeW}y_PxK4>?eg94EZ>DAT{9U{K5)t8E=JW!&9Vp z%a9uo_&~T_-PD|!l~pVBW|L5bF+gdPLcdAu@693=e--0R%EZqpA%x9t-)wZz|+Z$@Gbchws|siyE^cCx=jjst+xhH5LjQb;Q%7jm{P|~ zHzANR$Ed}L6tq29+Oep2d9%l0H2lJblor7UhCnXNZ1WlfG!3b0L!?oi{6x&}!QYK` zZiO|O;0_8Fs)S}X>f-<#X`~SKKhQJC%bKeDBMk-U<6+UD)o{GVTKZ4p<*`pr?Q6B_ z@`gojZP04z;B0^US9nK;@1vl={VvSSXf;ZmgQ_OyKNX5L73V_0P@zIf;<8` z`9hVkgb}|m<(vDHHy11$=ZT@PrD0H!8JBguZ1dbNq*tz}ZEt25)S$x{$MckE z?Q8@bwPk__lL{eQr$E@)?uFeQ>L0wbr$z@)ml-Vu^aVCC5T7Q@<+{R0w{xvTeTR?S zuLyq28)%OMKn1dJNkYP!m65TzxENSB+u#yJ@wYvI*-BQOBe;U$4pr65;MY6g*ny1v z?^f31jfa?|j{py)OmA@llHxH3=W6^_VqpR^qvkHl!(??UdG^nyZ)4nO z{*jkgeG_e($V@M|cPxFhs)6D%d*!_bAVbiV=%R_>osD>g=TlF+^s zCY4N35Prvf&p=b|S$nKduxkK@Vok{V53lRAb#*Pw#^@Qy^7BedBQFGZz_TdDewLh? z8jOXX)+Hw=2eFj+=~h)SI5S}3MUa9_GGcxYu2C4c7WUr>0k(*?WW$Sfmud!p3u}tO z+Y_$OGu|4oMNFecerxpjap?66Z|eF5u#5nF4lXVdri$8Hp(K7Hc@a7r6>IBXEkbuS zxR^l$!4QlO9#_naa{rgf$)E1!<(F#vy(ORTb~~b9eQycw?j4%D_vlBcqm#k+ZJM-g zR}Q@?XDtRms`Tq!6}N|W77NLXy&M3(lYD`(@pLUAp|h#6Fxr4hMeuME zbUWauCFsq=aBUFB4Y1ycuA;m=gd>VFF!E6iQ553{bi!(s}N}=tsR|4!95ZPEd zoNt!0V08v-1(ZmDb4zMa^eV(vKS2RPJ`1nt#Kf)cFxj$6rY7g{L)dQcp@2sIK%0CS zupe?Ns9=Lm=haEchH~?PR-l(44>$vtJR`cJFq4Q#^26F*5)T`j*ZMC4sGQ&UKM&q+ zv$V&0gTr8t)g8)(4(iqa#oI8(EG)97obj;MO#3R~`0@Kg1>gJHN6V-3WBE_EjXu0X z3A_5<@YZMZ=ewjM?}(xl6SXc$YP0o>SNv{JN;D=3L)23%;>>M1p0fFJ=-CkSk zH8|J>xf2LVO?-CIAMX*0gU%_}9?<=0XkNQRfq_57gz^R-W_VB}$;$RLH#eKaxnD`3<9kHHe5M2{rW>G59*VbJiSGsq$-`E6`HW2&8is6RbT%b7X269 zIq<2R%0%Zr#fQg|U3LeW>KJlRO)hEcJajqgWPP#i+dpn3xpnvIxLhRliPnNIPN8~U4D(bP^bU6ML0PoRiUkNo4&mQOPJ~QZHtphLRu+K zMc`RXHU&P=)*CT>+yDgVAg{A{s}vv#*fX?LVYaf3!_r$ zo2^6s3gdAUkFT{EG~CaW86+iXM>dCs;^29&uRluU)IHpub8>XNK^YSnxkN6(#%2Sg zZQzL;^oNRBJ$**2&{XIR;vk4C7y^q4kB@1y#Qb)p zj$Ygee!^XT|NmZKW(DiHH@H)qb(hS!3eVV3866VV$u#3#^6XxRS)(fVZ~KJZ4B;XL z=Fvx8?aPM>z)}Ml>9g3Kk#Yf|?O_W~+>ajVbY*(`>rK&#?rBN3&(P4w!SIBOi>qQI zABMZ;AJCg?JY_*i4%4m1GpvX@Bp4sZvooz2`6nqMMP5KbYC~uBO`DD`3&78sr(F@G zdg1z8lc})3Q@{xzLp+!w)l3q^g!b1NM4%3MLd^>5CUEQJW%`fIOy&Ps z%=_CzdJlfy>uIn0+P$u)L2eVQH6%S$8Y#^z!o0|2b@yO4vh?i(XOS)KalO69!FA| zT3LlM%dYI&Wth4!zRkm&23O=TWg9ay4FiLSI&dC#b#u$*2FmDchymQ5&ouPeF)Efd zuD84_YCwAWEYN+1@ovF622ndc9zfJ#zptHU00ObXM6yGNKmyP=MW(*3fiEz&9g1N? zil*?x?Y;rmO>Ud0+UWxNYtK!MrRHPscC5r}7;Tvh0f1dk1%`YuVXF(0SxlTHlnH5Z zlYv+LfBMpL5zDsxq7Z4CmEp)&6VSkr8)f@C-nJ~`=50N9)2zEv%qNlwhX?~sbWmPP zeyQhS0BimLmmeqhRS>CNibPk@ACWE5HL))Jl4Po&ygZZQXD`k|fo<-1+!4fVM1zbR z;W-rtjD(GA^E3@zUBwZdAw2`({O0C&f7?#kUcP+UUT0lLfRA4(zz$p(&;{G5fK93u zH{4m8;VSH))d#aIi)Yesx)j3t)M3PERX}dze`CEY7icc3K~f-qsYURhTji_5S$y5W zzXWVg;9p6TQv0d{&lWm+m=Ne$z?C9GMNCAr00gBv2nNn$m$?5P+zYE$Uu4u5;?=i9 zNl?r=(%XyWb}L{9zy!T;n}tdb;b3(Jr$9n@iI4+!{(~#wws*4fzKCeP_fUu3z%mc7 zm+}({XVxNIjoeRgy{!_*@e|}2a1ns%z~r!h*X3tk53?&iCIZnmJ}O@l0VMk$4V^C! z7V^5HrTE1>OY5$==I}&;^TMEUi{5kr5#bQj9mw9qQNO`y;P(!w^&mOLbn}Gc`b|bk z=>P}D>%=-4&NGlyQ<9Tsr^t zn3y<%U`t?ffKVztrrLkK9jj;%bcCJEHsT4uGpT4_S0_5og`%qaxSiQ_hW9l-GU>JT zV}OkN)~xi14`3jM1_rqa@OFTC?eA-Nm0hn7olpnlThaFb^pe;sb)MPc}xMz^tgo)2zEIE@xwu8L@9520sH)p z2o^`MH zN&3Etdrb~%@-fKS= zZUkHC6C;QE>uJiAj8l{gjn;W6`sf*$IiiqE;OnqytbgzS`ST~xNPyLteN&yiR2IN( zUA7MhEWR7#tRf=r5E{mJ_Fkv-^75!nD}nFDSIwcZu>v%!r*j}c0Mg7__|RrhMqu;H zAMTaexh;|KO-c7wvErc*a(;x^zJz&BAQ+RT3pn3;(&|Iu*t^to<#+f~;{AKB!K3rM z=HEKHpC;@+P5k-v+qm4M{F|;uqd=Y@N1l0R)E&~)c&J=06Qrf(?_+4lp_3A#NfV~N zrI1%hm0y)6B8>Bl^K1&u3DqjTi1rqE=y=q4^jx}pwd+EkYy95XMs-p3_QHAV#>JUD zR{i_}l?IRhDdUUz#sFR=7@3`H$Slk zSZ+av!)G_-V&!Np9t^PhiUU#ou#`+55_dSeIED||+rD*%{H$;-FyqX(W=;Uldw{Vd zPQeqEogcLue-NJp49!*K^?t$3p=%a&rwOY+sZhJ3-$$)&!w9L@zs<1$-EtGkZF1RX zo4?lo{K*T=uvK+%_^>msv@gUHT*43$TEc)Aibi|yvTW)aPUhk-g6K1<(qFJ z-H?S`#6HpZMh<-KnL~M$Dark@^h)aTAVM(y>SE^a_!+@R#v5Caw|Er_3olJ=I1KSm z&IVhBCzlFdZ}E{+?-esJR))+C4YeD#;h1}QQPzTdUS$?IZJ%!J(JJdILO=ggvhPR( zr^RfE*?3WynsySZRyAS=+E%hDwXVD30!p)POi~^r@(ge$-l}NOw%A%I#Ve*U(-Q!o zAdnVu7EjR31-b5K6W7_{hZxdQ22~u-qQKYZwn|_O04ej}ISeNW z9L3p-4i662*4G!b&CD3eoI5{f+X!D>AxU)dhq5J6S~IZC4G+gt zdp@uS?{BT0Qb?KopWC9_#AENk^UsHqwF5`ax!$YdQyJCWMZU15z5Qx>@88LOSN- zwD8UN$a53lUw@#9z}M-vO3*ZyjX*egxOKVlrw2G4ptyyJ!m=$d`Q%#;FJPcNcm}DQygh0%RpdKqJm1iysc;v#P3uI=t(cU+U}r)mD30dRE^! z0H{XV8X7r^e!!1;(?0}Z4loC~Z$(Z^3m@=TxlA724lNAkFCJdHeL?4Ub=j2J~_51(pxJ4bMW%<1t9 zOW!k4y=Q5w+xc}$F;=(bv;VGeYWll5qUV7It-ExRS5_I(zH@6S=PMFk=S-z#fd*E4 zZLdzp{ARKZj0~^V`rh=w0rfoX9|TbHmDP+Tc?2A9ywLNq`}m&cDas5ux8$~XEL!^V zLZMWKB(^xt8%bbQ@~O4e*bT$>q#brGJpGRfA&VA_%)+I7?%MW#{)|TI&JN`xJ-xpw zELBl%sB$DyS6)#Ot3z_w9id>wP)f*u0=hc41M2X#Ke{SjqK&1cTm%jD{@VG6u)~4( z7S9fa5WM>f1n_Ox+mssI^KaUinwd#Ef*Wm`rmillAW+a@ycw&i41K+-DwEdX#*~(! zVLx3fkx(#-$W!^d$f=aMHYt<{k8O|L#ixUDZ0zNOV#Ql8s#Wqi34@-j^bp^*oi5y# z@;UwZt}iZ9@lhs;ap{?#kO=Nk_4$(ST#0DY0UklW{zJ#7V^<&ED|6$Wgz>ii*x1@V z#(qZ-Rga@3OOAJ;-6dP&P!3YkX4hOJeb+niVYVT6p280-5U&mjvjs*g;}_1 zL1%j*G2m|{&hs#i<#RldeTW}G3em{6_V#!|M&!K`u+3QRY#3Vd@$*APlOwQWs|0LV z&|f(Bo57s~P9>?(aoWOq6{bsg5`U%Ff`nbD0t)`#a)p9Z`R?lCPQRc^IyI zkYfkFiNn|1q=XqX1=21eUnp5#HMC6=`bN2buFmrNxV?7#GP2;adh_wgT@Y|Nw5XEeVu*#< zV~41}Vqc)jrw^)}19!R}=%o5eGBPM_=}=0c2@BR*LO%LN^`PWTi)VFYWIr%ZK;}|X zfCeR7KKeJHRH@NI#rlT7acETSov?<>xUy-kg=Kz*FOAS=sNZYd-P~yJdA*!#_4SE+ z{;YkE^+&QZ``ZaHb-5vcHVG!nu2|d^H-N>0rrY+G+y?*4G@q z4uaPOAafOE>!ctlEl3>4#KwBV-}m-@6JlBn>1H;zwh`~_0ERF(hh#H)^3b-x?@S7W zZ!olEN$_Du+ND;mpXnEL(&niBDce^@mviuTXAi~!@ zYCGGoo7y$G^bATXNp_Ogid_2{Ye}EN`Y0>rp&GL>&+&J}YF6u|FKCR%~@cVw?W#H=U>_5hBPesZc!NkcKDR2oo{2}3=D?Ov5 zZ=q#hZ)X${5doK5jxb`bA#Hfc^|p<$p|T~w#gz>z5JK&4j4Ea>&$~8FgD;eacIONl zTcAn3RU}A&+L`=nIqgRLWNbIolD%(XDk!iFBakd-vq%ucG#>VR`4SPqAAFcD?iwLA zFgSRNhc{O|=AAhR+qYhS&WjK>)$V%_k0{v37av+oHd1vA&&;T76@v64Cp|V!$taJB zsxXu-4JwF=`=$>i-o)N2jk){9v@EIQB+OGMPcojHY6C|Z9W6}hGrOh7go9-ZvO-az z0|E6ZL6+a`yO+52pHZhS_nYwBMg%oqxK!UGthw0HctLlyT_<)q%9Ng7@tZ<;k*oZ4S;5QE)&86F;sEJqx7O9Ui(xC4An4fIqgL0uosKd4umIJ+rganoM5W z@Wn8@-Pl^C6l11aNk2PJ9g4zP|1jxN&V zdt97GH3nAI@Rc-gK&~PwhF_!GCS@&V7z(peq}^kEefIyc-f(sFJn2Av`b-R%3u1HM z2A5w+3Xqpt7#|d`O?$Mj3)gOT<)c)66Q8?X!(RH*!~XQL+41(0nm|1hPL#@VtchP+ z8Hr3Equ!y#U+)Kb_+*ZKxWY3~R zu}de$5)c#&*%DK}W=?q0t~|51XA-(WkuK$zIa{-MJy#3BAIV5&Fg*aFRQqp*O+W`K z+BJr&Y?Yu#ZX|)^#Hgw`Ybz_$^nM;DZf-RLd8pf~dVaf(67taVr#=U+zM0kA3cCrO z91=!iC+?ita`jVa?nzeWQQ;m)u)E`o3%r*;JP^g@-%S7t0SE=+DF9GNay3ayOqAa$ zcX4%fc=jx3Z?@Ifu=_oA{A6v!kS|_XTU*8;^nc#oE6MR2F!z z2FTC5t>tSncO~~bFIb=A--PS@rQ6#CoL*hS{nY*;MvdbhcehNl9mJ#5l+(>Nc zST~fD9My*NCw==*=nK7=DwINV#VH13811ipu+VhoPE{yu9xs?2+AcVJx#7 z`346oY24sf9x==@=9RyH@xmv$yy@CIEp1!?-N*2_1~EvL>dG1mNH066{PXs~HaDw$gKS>%0~3*f1)9C@C>ikKA4CfE zqrO9DR{yCA@ma+-RmWvTMPTjRMWcBrjQ0bsg*aQRDEPsmUywl8oF@^hr>7U!s$1_c zgE8_%K?{n2{AWCXw)KDH^!$p|3^JV+0?dz`KpaNQ;g&Kt zUxY*oPA3M7rxM5O`p{w2)^IHjFJ)0Ve#=zd6xc62@1+mZy)Vh%Xmd;bX7b3)aQ*TA zpel;zw#Vi9$!5HUEP>OjdR)o#iNEit324?SsVTEk@m18$vJ9H4ju5^3`vfLFrCYxb zcZQeTe^_*T2Sbwq?vrpUAv!yEy*T($FZZCATkO(Ss0o36YzfH5!kilWj%Lh+<8q_V zN!918zYAkYGs0O32?A15yaVbmV|{r4@+<~;dwJ(N$7<`jCccC?3~D5;)KM4)jGKwK z)YMc|WJ8yiEzQzZ5@31;i4Kg`#>SaD+K?!x`?><3q+)7F`=^^%_56?1jJ7s^W%C{;0+%^awM&1;R_=vU1Y-=dxlXKJ$f= z5?n*NeMCVH+4u%!5THm*R@Nd&yOp@$`vWZ90`9{0vNvRQWG2)`k;EX8giBb-n`-qQ ztqm08*9;bnR+`?>Ie0&SSLaiATQTPN>@1Hu9kBP&;o-`gva8_{5rG#z;Q0Kp#HP;q zsWcR>p`jQ@W%sQ^RLGADVejUZc!(=giD)w&Br_08T|obk#c1`T$#oX9DuZ!XH$??{ zE1BDkgNQa>ayFQCf|&cx%+H^hM&n?%;$&~1zQ?gf$^05}xy-ePZ%dHz86k9}j+Y9c z|5(jA1b_sdyM<0N0<+m8P$|N^2@E}OR;WneEXPP;l7Gt1&b~g&6zZaxNylGn!w#Cn z1qFkW^7K@Z@I-N>g$EQqy8G0DZ#ph+BwVJuE7?Ns4W%A$4&x=zjBYM0FmR!5 zgQ?}mUZhTA9UbURVkPd1h=d)DLgryMnH~+Cc+vdJl@M8|Y*WxYZsOzO29?nJSYNEZ za|*;(Qgo;0voQS~=c%+0AWJ3(GC&I92}q`>?aS>pKxAlWY|N?E=C*kc!|$Kr!(fl^ z40lVo0me_AozUoXAmH~ZJIdV(pKBX784c9pQ!+j8#hRrj-rfu|lMPw+xt)zq?w}WS zjPx#=#NX5abYYtPy-$Z=oCq*hV+Xj%Rt?9VvF58Zp4B$ELOD6{ zeni~L8o;o_O5$UkQrc$==+5?84%p@0;F{BxXjV_F`4;hcPSiF79g`NkMoQj3jL*z` zxC-yp10s5jftAC(d0yNVS+u3wT*z2-bR5qNZBQJ5}E|^q3RCvSCF%nCq z^GuwJGS)jx0uUnvH-~6{G{>cfhIgc>7+$t5-YYfvtyt z{@IfnGpgci+=0Kn<%z$tshSyi}dpEmr0~fk2$|M9JV0)^L7^p zd=EI@f4F+{`{hMlOv$Bjbu&oGK*XN6t-_i>9t^*Q`L}En5T6_~I zK*I%y9>H*ZQ6vjdBC*U2^i@l0Omb3q8ni1tolVATF6x15k?V<}lhEO0h*n+F#m#*GGzuw&!|k3Fy9% z&b`%=E%PaTWPOO`hhx`$oSsf;zUiJg;Cx`;oM}k${mN3S;-HgLWw!i?%g6RKveIE) zD?>v7jp}Z*{iIm&4fZR?^qKEMJ-^b^{Enl$o<1~UYY=zaJiTM^cWhiDe9I+E!x7<4it(s)6GNlSbZ>9N;I}IH9nFgW05k+kS0|-12^}BzEW&BX zyUz%+TK`xHT)Kf3ch{p>y1CShi`|9JUnm_Y*3Ds|ex-Iy+OpSulQHX~dp-wPgDj3u zCI<(zV$}vWu%nNAc-xlt0LuBJ`pM@^p(m@aXhDG7DdOoEVagxvc630gp1W>A!&3J2 zy95s>XPyzBm#1fkCbO1vc#U7jwH1%XyD_uYgsU)W8k!LOhfn^d*}jg0zDEEnSLxiu z{7W#P3k60Nd&|FkW_qZ>Wg|tzC--`!X{$9#M(yqlEI+UP8<8 z*#Oi|Ud{u4D-gOGuJbK{olE)$J|QE|tbs6VQE2*uycY$3|7n%z{_d2nN%nKxJ>EH?@We*)n zO>ASM*n=XtpYtSe;fE!2Bq6}7Z~7hgs3Z*GORm!ec2}YQ44A+WP(>mr3Wf3{+s)I+ z9tMLTHH&9&Ap5~EmIdzjz%`#z3t4~2!-@`H-Lyq zZ{K2##ewuN2$R5EPn{->hJqp$qON$? zu6g3`RJc8hi;R@*n?!MJmVgmWO;0~(hKZd?vzuB|@ zAXgCQ5h}DD>$r65Hg!~E>npz zVw#{M82;4r<^{nPcM-bkSE;vkKbM^z<5RqA&C(IyAeyfECZ45zf3)rvX1XJ1ldvSO zxmgN@Q|4|e1-`C(4&|Oy?aO8ijF1zP77v&0j-Z6oP~0xvt!gDbfbptqUqfJ30i_W* zm_s>wZU&gokOm!Tj=D_)sBE>~wTrS^st66Zz{!J#OR(pdOSo}Gh z6#Lnf`EKlZUfgIPvLt%#ZRUkV2eVb0#erH8E6XFsa$D^mCBYL|QTI4{@7<+7qLaLr zIl22`Ok*#O3E!L34ISYc5l|nNA7;pgG;E@_pY`09)t|V8?pjk41?0*QZ^MG zn+90K2QO_fm!v>Q(%$Z`DGTN)Q1%xOfMCfl7&HYf%%HO~b#PD%;SK0|c*+Qe#nr`y zNI1yC)U+L7{uD_8fm~*c&2zw4i+hCtu7!mjWd=w#|7U>P7C?Cb%vN+mHY8s@tUvez zAe!KRiErK<9)W^A0oM#TJ;i1{oHsXoH1V;qu(HWMy#5^2T}lOo3gUiFKtRCqbMjFY zbmN>Y4_n*cw@iGbpV2AFZJsY2AB%=Yn&8TQ#f(aUZlpE|Gi;fe(Z%%ktoo(1tF6+5 z2VaKs6dMP(jqyEC-qRyS<3u<@S}dXWt|a~kASn->cX|XxY@&}*vzr4E za?e?ts(;Ciz)_X@KGOI=wqCGCG;E;%LXl;MLI zmww_p%@?BW;+i5Nj-hM7v*lUG@NhC#gE)~3H4g5k@skkm0A1Ed zq?Y2~&$k+dO%!6X;1Y?zTJZ-(b8I1brHR~ z>Nh+d`EB6Ugqj6kepMMI%8U5tJMr*1-MraJCoCkSfo#sEqQ@j`#EwY^;s~%>P1M-l z*x-7$g?N8UoN;Voq9~$(oPuJi$+a{JkFoNhH2158N)WTUE&9W35hNJ`1x-z9qeA|` z9d=Cwn7r{2Ijao}&ED?-<>bvp2gx@Zr z`zra9a0hmIG1avBt@j9|PxG?{lIeS~xfVll=fixuuHKbVcrfMY&0F!3KOVHVh>eIn zc(FBb{#1J|jq>@`!bn=(I@Fc35u}&DU<~+8+Ev-p_ns`{VYz!~u9-?Sxn083u{Zz` zzIgtE5~MGV5$3Q!XR{1FJ@tZ-i$K@N$Ug8F*;vf8ct->#YJiSui&b2e2(kA^+yX7fQbsHs zxuV9#)Gvgf=6=txM!8}ejDUXy+mZS;mK?#p1c^F7zk*t8fgU95K)TuqBhPh2fou2q zoVuc77)(<)tYB{8-iCw2fSD?nMj1$@mZYwy2md;8VPTeLTVnYV2HvhfC5OCR996Vb4HFZSFdqPuaCH|Fz+J3mxle2O!5Cqki)tnT9!@WN<1$X*$`E$}Hy&4IuOSa5{#3w%+}y?j2%)B%&?z}Wz>TUQQA ziH?lCJ%h1iM6P-?kSeJ3ivVa^!v>cXKuI$Z?*NNDd`**LaKx#sTxiL94%Mg6(GT~0 z%D_;K2T4lQO~AtlIWtmMpI=*3B4Z@x?PL(iS5;NLMm2PGLc_uUq3dmQTv1X}yV&U@ z04iIr44h(ce3#cGbbQ`%(EcNbc=$GjX4fCN$(3WnDfUiv^6N5UISeo-DV!KfhUK-`omOTBJL0MtBqN4FWPL#U~_AK8!n*}3wc`b zX;n0SG@u_EfskDz(MOC9KZxDFq<`|DDhgb5>}6|Qn?9yH@QWwClddAsndYK=wy7JO z2o#R=dl|#rEy7}LbVV`DZq8v&()bG)=N5TJoO8B!@K7(8*>R=6cwoLf;5Fx1JZg5t z3fc{Y;+`nnL4~}OuMOztz$t=*_ zKbqt-)gC6#8@Tcm7YkOl;)DCav% z0NDcs1yGarU5yPGRKe*|?*(E4xc-Fv6cGiPD%*CB1PtPVOifOx{SqoZ7cU1C@m!4MG&e&sm)2 zpngenSsTg$yMr3E421QpT6jIZpx_(MV4PP2*!PeG3GwG8_q`pIobNj0j10iVA)56R zdd3x*S3+oW`l=EOTY?GjI)wk}4TgLNm8h&w4GpgimbsRl=zJXdoPQ9X|8}Y3Bx-T^s zLW|`a;P`fd*~;p^9Q3Zx<5Q>hoBhJpn7KGise5PRdwX;T)yTc_ z_i)Z~`PZzQjcBr}3Qo`>xgICCGu|yn7M4;)H&V5X7dJ4=ea)Z8n>d?QmZ!}vyJVdU4hO6^%Sg5V7f*;CuD{Jc2x|rrl#3)$mSsVetbmB4psOcD}C zi>0*2jAm~-C6D&@5^Pp@xVd3sbOLrOaWGA$D6ixDP>_KF5^(Zp@JD>o;4E$KH#`dB z^HE|lGL{cyM%S6imx#Sv(|8`yK&_mtccQ}ykB&}ks4NCo90-V@08}nU#5IZ`%ICc@ z{2#+0r#Hx0>nu?el2xzm=D#IkC_GyHnF_{@BnWIyOE1`zwk@9fERLAnH<_{A<>LWG zaAxcR6aSJY5-AK2B59-r04bD+%L#hx?uTn6cNc7$gOyr78v!9`y62 z5e7gE)93|0w6WIBj+?}!zGs{D0@QpNKt!R~sZC7EDJ``FdSxGLX#?EDAVBF;zrUTgg;{mFgR zh^zvQKmdf%7Inqy{lvhVUlLU8lADb@I-Ot&UAo!-R#lo2Yf=01A5?uAI4txwS z?PE`czE9)Pqu3)BT2fMZN2O&D-d?+7ibO)~SqsqSgU$a#+(7 zk|=vu_Etinl!%PVi0oMk5fvFBGfHNZoskkz**jTTm67o~-(AvKNc`QgQUUyL+klbLMl` z&~m?~!-s}-@zfB44XcFp*|WrMH{kw+bfPGK^VTi!!^XdUEp-f%WqkF7bz!dU#cb|E z&}&)AE@ji_<5c8#>PiNDmSc21=03gvCM{_dw7{rr&?X)x3x3wUL*>yC ziL?}bNe&G%e-B&nLEH5jN@G+k_NQauSIy}#k)W#Pqm}a&T?Bu$%SwwwdK&Ao%UQKf zU=La4M!iq-g^xFjetbrGx!FV38j^U6hpbq>P=e=V%NB%Ha3}bMdSencHosZ zF`%+*&xy1Dd+0BFWA&;Q_AZaY`~7k=j4T>3;T6GTuX;Krkxb38G z;6@&2_WLyN&hcG7cCREhmnSUT9;U@n-|atRar1nP<9?CNrYF8KUJE}~mJV;d$W|md z)ngZCA4(vealy2d*BDrN6wyGZmqY9hon+9_l#B$~q4 z0B>=TpW@jrbnJ3u-RabXGb7uFH|`2BE27e5xdECQ+<$ot!Gj-NVtn`ad4~rzhTt#A z*~u)OL)C z)%#A~+AkskvxjIADG+Yjs2A>nNg-yxtMyVg!BDQ3EEd!I^Xq9h>*67+@NZ_WEhYX^wm#1JlN_KhsNbHgZ(Z{_^=!KdMcVq;s{r)p{6VN7f;JP%? zuNY&}8SeG3AFnmf)=H}z@89<#>T7IWQhm8k-{!(vJ=JWquu(8L`)XOl``730%LJX6 z4|{Mjc%x4;E`omzV;e6_>mHb`hE*J1s1X+V(K3D^?)4X!FrjhaS6$@|y51Wf^WWW( z9N=x$JH)I(UZx#Ph>LRn9vA7DCljU&-Q1RFb|2PrF82d`G)5sMEPT70JS8LJ2uQ2~ zWKU#ruZO*Uj8@L-q4)AoNTbTJiCz9LL^GO7HJ`N$xG}1&)Ut0><#1lyLdh2t4<#U~ zFasLsTnAA0G%0^@V^GfK6wSvxnnvY@w>KM2Xm~h`|M?E=5K&XA1f#ks2F7C@Z>LZY)rT}05M0i&=jLa9l@H#i&@ogCr|t%?|D25tA9tWO=;aHBItHN0 zXL1}s+hT38u(*hnm-U#RMwwrobnDhAnE?NQfUK>@Ywn!8Is6?~d{(bfgW2MW8XN1^ zpG|O!9;e$JhbK2T-$Ur-;StgiWFQ2LY6Ru1Co?vYLZ2#}KMA z0S`gDsYHcGUEDJn&n|?wc3q!}OBh|HN=#yt8(BEeo8IRduCwkgo!TRn`Tosj_Bl(3 z(IB&qeN2%tpZQX0mRHmV)zf~x3HLGD-P~JT`PJlX!_1CtBIjxiq@z*_Z1399w$IR- z*9v^*{)vj3zAxqn^(|ycZdz~RbB?{NG0$cw_J*~-y8Tt+ng;VuvU4F92~^_2KJ)oz6cC(?Ewq1ioS!sHiWPB{re|- zg60^QuzYDZ)!V4!G*ZsPq}T3obr8s0-90^vw}PEM6YgYjHR+qoV6=B+WG+h0ymztz z;{Tz=A+s(+CXF(Gne5EY7tkp_J#c|CSpG33x&3Lob5vvdR4DeF z8JtzTaDUi*%SlU1%enam_C*?)?eCyu;Q)=EX`dcP`bcP<^w#{~DoJVgx#VYbsDr!g z8iS~q8gIyb6JRe2Of4((0D@ja)s~3m;v&u0Fur0j4w?Oo^0p1y&LFV*j!ws{tk3%B zZe4AIZ2p*2>$`UnVq$kqLLWWa+pYK{nHx01wIPDs%5g7O^(W>bVj9$%U$WP%AaG=C zp)e#q7&5NO}41V{K_4+v>>cMRX&pOvlTVr6$%01!V!KGqu8`B_IHAd6-VbEV#KbQT~x2=dUB9kzCMj-ni?LHAx=@(vb( zt~-H;rudyyL2%}g?f}p1?$cl%KECKnRn z?#c69$!X;P=Q8aX?wAD0Ka(Rk3B)oFx{r%0DCm0R!>x2-Zf=kkbjib)d(}?8$9u)< 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 literal 69108 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�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 T%Tdr#ArNxXN{@=rhHw85M%HiS From 612a753c603f9d6fa289932c2790b03f484c4e43 Mon Sep 17 00:00:00 2001 From: Emmanuel Awosika Date: Tue, 12 Jul 2022 14:38:06 +0100 Subject: [PATCH 12/12] Update index.md Fixed the listing under "How to verify source code for contracts". --- .../smart-contracts/source-code-verification/index.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/content/developers/docs/smart-contracts/source-code-verification/index.md b/src/content/developers/docs/smart-contracts/source-code-verification/index.md index 8b0d53fb1ff..2e8bb652d37 100644 --- a/src/content/developers/docs/smart-contracts/source-code-verification/index.md +++ b/src/content/developers/docs/smart-contracts/source-code-verification/index.md @@ -19,7 +19,9 @@ Smart contract verification enables investigating what a contract does through t ### What is full verification? {#full-verification} -There are some parts of the source code that do not affect the compiled bytecode such as comments or variable names. That means two source codes with different variable names and different comments would both be able to verify the same contract. With that, a malicous actor can add deceiving comments or give misleading variable names inside the source code and get the contract verified with a source code different than the original source code. It is possible to avoid this by appending extra data to the bytecode to serve as a _cryptographical guarantee_ for the exactness of the source code, and as a _fingerprint_ of the compilation information. The necessary information is found in the [Solidity's contract metadata](https://docs.soliditylang.org/en/v0.8.15/metadata.html), and the hash of this file is appended to the bytecode of a contract. You can see it in action in the [metadata playground](https://playground.sourcify.dev) +There are some parts of the source code that do not affect the compiled bytecode such as comments or variable names. That means two source codes with different variable names and different comments would both be able to verify the same contract. With that, a malicous actor can add deceiving comments or give misleading variable names inside the source code and get the contract verified with a source code different than the original source code. + +It is possible to avoid this by appending extra data to the bytecode to serve as a _cryptographical guarantee_ for the exactness of the source code, and as a _fingerprint_ of the compilation information. The necessary information is found in the [Solidity's contract metadata](https://docs.soliditylang.org/en/v0.8.15/metadata.html), and the hash of this file is appended to the bytecode of a contract. You can see it in action in the [metadata playground](https://playground.sourcify.dev) The metadata file contains information about the compilation of the contract including the source files and their hashes. Meaning, if any of the compilation settings or even a byte in one of the source files change, the metadata file changes. Consequently the hash of the metadata file, which is appended to the bytecode, also changes. That means if a contract's bytecode + the appended metadata hash match with the given source code and compilation settings, we can be sure this is exactly the same source code used in the original compilation, not even a single byte is different. @@ -52,9 +54,13 @@ Publishing a smart contract's source code files makes it easier for those intere Verifying a smart contract basically involves the following steps: 1. Input the source files and compilation settings to a compiler. + 2. Compiler outputs the bytecode of the contract + 3. Get the bytecode of the deployed contract at a given address + 4. Compare the deployed bytecode with the recompiled bytecode. If the codes match, the contract gets verified with the given source code and compilation settings. + 5. Additionally, if the the metadata hashes at the end of the bytecode match, it will be a full match. Note that this is a simplistic description of verification and there are many exceptions that would not work with this such as having [immutable variables](https://docs.sourcify.dev/docs/immutables/).