This repository has been archived by the owner on Jan 5, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 146
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
8f215ca
commit 7e58054
Showing
2 changed files
with
46 additions
and
41 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
--- | ||
slug: /deploy/how-it-works | ||
title: How it Works | ||
hide_title: true | ||
--- | ||
|
||
# How it Works | ||
|
||
By using Deploy, your contract metadata is automatically uploaded to IPFS and verified | ||
making your contract usable in any web3 app without having to copy your contract ABI. | ||
|
||
This works by: | ||
|
||
1. Using the default behavior of solc (the solidity compiler) - appending the encoded contract metadata to the contract bytecode. | ||
2. Uploading the contracts metadata to IPFS | ||
|
||
## Encoding & Extracting the Contract Metadata | ||
|
||
By default, when compiling any solidity contract, the solc compiler: | ||
|
||
1. Computes the IPFS hash of the contract metadata JSON artifact | ||
(containing information including the contract name, ABI, source code, comments and compiler settings). | ||
2. Encodes the computed IPFS hash using CBOR encoding | ||
3. Appends the encoded bytes at the end of the compiled bytecode | ||
|
||
This means that from any deployed contract, you can: | ||
|
||
1. Get the contract bytecode using the standard RPC call `eth_getCode`. | ||
2. Decode the data at the end of the bytecode using a CBOR decoder. | ||
3. Extract the IPFS hash from the decoded data. | ||
4. Download the original contract metadata which contains source code, ABI, etc. | ||
|
||
Since **IPFS hashes are immutable**, the encoded contract metadata is guaranteed to be correct and unmodified. | ||
This means that all contracts are auto-verifiable by design and without needing any third party! However, **the compiler only computes the IPFS hash and encodes it, it does not upload anything to IPFS**! | ||
|
||
## Uploading Contract Metadata to IPFS | ||
|
||
By using Deploy: | ||
|
||
1. Your contract metadata is **automatically uploaded to IPFS** meaning that we can make use of solc's default behavior to unlock our [SDKs](/sdk). | ||
2. Your contract is **automatically verified** on [Sourcify](https://sourcify.dev/). | ||
|
||
This makes it easy to build web3 apps, using our [SDKs](/sdk), without having to copy or update the contract ABI. Instead, the ABI is retrieved from the contract metadata uploaded to IPFS! | ||
This acts as a **source of truth** and thus is always up to date. | ||
|
||
For more information on how contracts are automatically verified using Deploy, visit the ["Self-verifiable contracts using solc and IPFS"](https://mirror.xyz/joenrv.eth/DdbK6GR-CkeYxHoU8sKl0AFYbGeQwZcvCM5Qvzipr0g) blog post. |