# What is Tres Chain?

A Cryptocurrency so sweet you can actually taste it.

Dear Tres Chain community,

It is with a heavy heart that we announce the official shutdown of our mainnet servers on October 15, 2024. After three years of relentless effort and dedication to push our project forward, we have come to the realization that it is time to move on.

What started as a mere dream to create a token, evolved into a project with multiple utilities and culminated in the development of a blockchain. We never anticipated the extent of our accomplishments, the vast knowledge we acquired, and the profound understanding we gained throughout this journey.

However, being intelligent and skilled developers alone is not enough, and unfortunately, the current state of this space is not conducive to our aspirations. Therefore, we have made the difficult decision to let go of this dream and explore new horizons, with the hope of eventually finding our way back.

We would like to express our deepest gratitude to each and every one of you who supported us throughout this incredible journey. Your unwavering belief in our vision and your continuous encouragement have been invaluable to us. We could not have come this far without your support.

We understand that this news may come as a disappointment to many, but please know that it was not an easy decision for us to make. We have explored every possible avenue and exhausted all resources to ensure the success of our project. However, sometimes it is necessary to recognize when it is time to let go and redirect our efforts towards new endeavors.

We encourage you to reflect upon the lessons we have learned together and carry them forward in your own pursuits. The knowledge and experiences gained from this project will undoubtedly serve as a solid foundation for future endeavors.

Our whitepaper and roadmap will remain accessible for those who wish to delve deeper into our journey and the insights we have gained. You can find the whitepaper at <https://docs.treschain.io>

Once again, we extend our heartfelt appreciation to all our supporters, contributors, and community members. Your belief in us has been a driving force, and we will forever be grateful for your unwavering support.

While this chapter may be closing, we remain hopeful for the future and the possibilities it holds. We believe that, eventually, our paths will cross again, and we will embark on new adventures together.

Thank you for being a part of this incredible journey.

Sincerely,

The Tres Chain Dev

Note: as of May 31st, 2024 the project is no longer active. All the work is now on the hands of the community 100%. The Testnet will be deprecated as was initially posted in the Telegram Channel.

Tres was created on October 2021, our initial goal was to create a cryptocurrency project where we can give out something back to the community. Our main goal was to create a token where we can give scholarship awards to students in need, our main focus was to launch Tres Leches Cake as our first charity project. We launched the project with a lot of ups and downs, however, did never stop us from continuing and growing our utilities. To many, a cryptocurrency that is charity based won't be successful without utilities, and to some extent they were correct.&#x20;

So what is Tres , is our approach to building new and better things with the right intentions. Our project has evolved from one cryptocurrency token to a family of tokens with utilities across all of them. Our initial goal was to launch in Cardano, Solana, and Binance Smart Chain. This has since evolved to become a multi-blockchain project to create our own blockchain project as well.&#x20;

Flash forward to the year 2022 and we now have a cryptocurrency wallet, a smart swap, a stacking platform, an NFT for ownership, an NFT for Dessert Rolodex, a multi-blockchain token, and much more. we continue to build, evolve and develop and most of all to give back to others as best as we can.

Evolution of the Chain, with the evolution of the chain and our products we have decided to name the chain TRES and our products will continue to flow using TRES as its main brand. Stay tuned for all the rebranding items.

The Tres Chain (chainid 6066) is a public blockchain platform that enables users to securely and reliably transfer value, store data, and execute smart contracts. It is powered by a consensus mechanism called Proof of Work (PoW).

The Tres Chain has a native token, Tres (TRES), with 18 decimal places and a total initial supply of 25 million tokens. The token will be used to pay for transaction fees, reward miners, and incentivize developers and users.

The Tres Chain has an explorer located at <https://treschain.io>, which allows users to view and search the blockchain, including transactions, blocks, and smart contracts.

The Tres Chain is designed to be secure, reliable, and efficient. It is built on a modular architecture that allows for scalability and flexibility. In addition, it is designed to be resistant to censorship, tampering, and manipulation.

The Tres Chain also has a built-in governance system that allows stakeholders to participate in the decision-making process. This system is designed to ensure that the network is managed in a fair and transparent manner.


# Our Logos

<div><figure><img src="/files/SC6Qz14HOpIeggVEBP66" alt=""><figcaption><p>100x100</p></figcaption></figure> <figure><img src="/files/eIAEOfHzCZlUXGpdsIY9" alt=""><figcaption><p>200x200</p></figcaption></figure> <figure><img src="/files/k3Kvw6LeK4620rvQ0aPR" alt=""><figcaption><p>640x640</p></figcaption></figure></div>


# Project Overview

Welcome to our Project Overview, you read what is Tres Chain. Here we will outline our goals for the project, our current utilities, and where we are at with each of them. if you are interested in contributing to the project, feel free to do it. Reach out to us as we continue to build and develop something different for this space.&#x20;

We currently have the following platforms already developed, released, and in production.

1. Multi Blockchain Token.
2. Cryptocurrency Wallet (Android, iOS and Extension)
3. Smartswap for Multiple Blockchains.
4. Voting System for our community to vote on improvements.

as you can see we have been extremely busy building our project and its utilities.


# Vision

The vision for Tres Chain Blockchain is to create a secure, efficient, and reliable blockchain platform that will enable users to safely and securely transact and store data. Tres Chain Blockchain will be powered by a consensus mechanism that is fast, secure, and reliable. It will also feature advanced privacy and scalability features to ensure that users can trust the platform to handle their transactions and data securely. Additionally, Tres Chain Blockchain will provide developers with the tools and resources necessary to create and deploy decentralized applications (dApps) that are secure, efficient, and reliable. Ultimately, we strive to create a blockchain platform that will revolutionize the way users interact with each other and with the world.


# Scholarship

Our number one goal is to give back to the community, we intend to earn at least 1,000 USD a semester so we can give it back to a student, an institution, or a project that is focused on learning and that is willing to give more to the award winner than what we normally will give away.

Our first scholarship winner was <https://incube2.com>, we donated $1,000 on August 15, 2022, the first time we are able to accomplish this by ourselves. We will continue to push forward and encourage people to learn, grow, and get educated in the areas of need.&#x20;


# Voting

Our voting system is located at <https://snapshot.org/#/treschain.eth>, the idea is that our holders can create proposals and can get the rest of the community to vote and create a change.


# Community

Since our goal is to create a community project, one of our primary goals is to have a very stable community of Desert Fans that are willing to help, share and improve the experience for others.

Our primary community is located on Telegram under <https://t.me/treschain/340> we have plans to increase the community engagement and grow it to be something special.&#x20;


# Social Media

Our social media es currently as follows, we are looking for community members that can take over some of our social media work since we are focused on development mainly.

| Social Media | Url                                                                                                                              | Status                                                   |
| ------------ | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------- |
| Twitter      | [https://twitter.com/tresleches](https://twitter.com/treslechestoken)[chain](https://twitter.com/treslecheschain)                | Active                                                   |
| Instagram    | [https://www.instagram.com/tresleches](https://www.instagram.com/treslechestoken/)[chain](https://instagram.com/treslecheschain) | Active                                                   |
| Facebook     | <https://fb.me/treslechescakeofficial>                                                                                           | Active/Low Engagement                                    |
| Youtube      | <https://www.youtube.com/channel/UCiXq5DJbcbdM9ZBFVFGv98g>                                                                       | Active, Like and Subscribe                               |
| Medium       | <https://treschain.medium.com>                                                                                                   | Active, No subscription so we cant post until we buy it. |
| Reddit       | <https://www.reddit.com/r/TresLechesCake/>                                                                                       | Active, we need more engagement from the community.      |
| Discord      | <https://discord.gg/ep29yETXFC>                                                                                                  | Active, not a lot of people there.                       |


# Tres Coin and Tres Token

Our Coin is based on our Chain and it will be branded as Tres Coin, inside our own chain we can convert Tres Coin to Wrapped Tres Token that will be used for our internal products, like swap and others. In other chains this will be called Tres Token, the idea of the token in other chains is to use it potentially for a bridge scenario or just to track our brand inside other blockchains so our contract address and others are configured correctly.

Wrapped Tres = [0x66bc84b4270cA0F056E27e5cD77B2401522191c6](https://explorer.tresleches.finance/address/0x66bc84b4270cA0F056E27e5cD77B2401522191c6)

Tres Token on Ethereum = [0x66bc84b4270cA0F056E27e5cD77B2401522191c6](https://etherscan.io/address/0x66bc84b4270cA0F056E27e5cD77B2401522191c6)

Tres Token on Binance = [0x66bc84b4270ca0f056e27e5cd77b2401522191c6](https://bscscan.com/token/0x66bc84b4270ca0f056e27e5cd77b2401522191c6)

Tres Token on Polygon = [0x66bc84b4270cA0F056E27e5cD77B2401522191c6](https://polygonscan.com/address/0x66bc84b4270ca0f056e27e5cd77b2401522191c6)

Tres Token on Avax= [0x66bc84b4270cA0F056E27e5cD77B2401522191c6](https://polygonscan.com/address/0x66bc84b4270ca0f056e27e5cd77b2401522191c6)


# Tokens

What is a cryptocurrency token?

A crypto token is a virtual currency token or a denomination of a cryptocurrency. It represents a tradable asset or utility that resides on its own blockchain and allows the holder to use it for investment or economic purposes.


# Archived

The following are no longer active.


# Tres Leches Cake(archived)

Status: Archived

Tres Leches Cake

Symbol: 3LechesCake

Decimal: 9

Total Supply: 900 Billion

Contract: 0x97B846DB4E521A07185d3da4408a12897316b618

Blockchain: Binance Smart Chain

Swaps: [Pancake Swap ](https://pancakeswap.finance/swap?outputCurrency=0x97B846DB4E521A07185d3da4408a12897316b618)and [Tres Leches Swap](https://swap.tresleches.finance/swap?chain=bsc)

<figure><img src="/files/s0rWoFiWVqn0UtCVCnPO" alt=""><figcaption><p>Tres Leches Cake</p></figcaption></figure>

{% embed url="<https://youtu.be/SztMmOXMaZc>" %}


# Tres Leches(archived)

Tres Leches is our main token utility

Status: Archive

Tres Leches Token

Symbol: 3Leches

Decimal: 18

Max Supply: 25 Billion

<figure><img src="/files/W6Z97hPvcIOPbzE2CVsA" alt=""><figcaption><p>Tres Leches Token Logo</p></figcaption></figure>

| Blockchain          | Contract Number                                                                                                                 | Status     |
| ------------------- | ------------------------------------------------------------------------------------------------------------------------------- | ---------- |
| Binance Smart Chain | [0x27387362a24b27129da9fb8e4b68a170b72c9e74](https://bscscan.com/address/0x27387362a24b27129da9fb8e4b68a170b72c9e74)            | Active     |
| Polygon Mainnet     | [0x00525557A8cA7E01c633AE18925AE7Ae57Cb7d61](https://polygonscan.com/address/0x00525557A8cA7E01c633AE18925AE7Ae57Cb7d61)        | Active     |
| Phoenix             | [0x27387362A24B27129da9Fb8e4B68a170B72C9e74](https://phoenixplorer.com/address/0x27387362A24B27129da9Fb8e4B68a170B72C9e74)      | Active     |
| Dogechain           | [0x9bc11331Bf27D3ebAf784a83B2edC25094086728](https://explorer.dogechain.dog/address/0x9bc11331Bf27D3ebAf784a83B2edC25094086728) | Active     |
| Ethereum            | Pending                                                                                                                         | Not Active |


# Tres Leches Cupcake(archived)

Status: Archived

Tres Leches Cupcake

Symbol: 3LechesCC

Decimal: 18

Contract: 0x291ca2F1D6eE89f23a7E6f06b352c2f5ec74A59b&#x20;

Blockchain: Binance Smart Chain

Swap: [Pancakeswap](https://pancakeswap.finance/swap?outputCurrency=0x291ca2F1D6eE89f23a7E6f06b352c2f5ec74A59b\&chainId=56) and [Tres Leches Swap](https://swap.tresleches.finance/swap?chain=bsc)

<figure><img src="/files/gyKm7KrzVhz1G086m5go" alt=""><figcaption><p>Tres Leches CupCake</p></figcaption></figure>


# Staking(archived)

You can access our staking platform using <https://staking.tresleches.finance/v2>, we currently have the following options for our platform.

1. Status = Archived
2. &#x20;Token Staking.
3. &#x20;Liquidity Staking.
4. &#x20;NFT Staking.
5. &#x20;NFT Owner Staking.


# Coin Distribution

25,000,000  Coins Minted

5,000,000 Coins Added to dex Xeggex

1,000,000 Coins Burned

<https://treschain.io/tx/0xc3c96f7e1957f007a27b79ba71b559a04a64f3cbbbc2f8258baac200f6666668>

10,000,000 Locked

The initial market cap can be calculated by multiplying the total number of tokens (25,000,000) by the initial price per token.

To calculate the initial price per token, we need to subtract the liquidity (5,000,000) from the total supply (10,000,000) to get the number of tokens available for sale, which is 5,000,000.

Then, we can divide the total value of the available tokens (5,000,000 tokens \* 1,000 USDT) by the number of available tokens (5,000,000 tokens) to get the initial price per token:

Initial price per token = 1,000 USDT / 5,000,000 tokens = 0.0002 USDT/token

Now, we can calculate the initial market cap:

Initial market cap = 25,000,000 tokens \* 0.0002 USDT/token = 5,000 USDT

Therefore, the initial market cap for 25,000,000 tokens with 5,000,000 tokens liquidity and 1000 USDT is 5,000 USDT, and the initial price per token is 0.0002 USDT/token.


# Swap

Our Swap is available at [https://swap.](https://swap.tresleches.finance)treschain.io


# Addresses

#### Supported Factory Networks

<table><thead><tr><th width="263">Network</th><th>Factory</th></tr></thead><tbody><tr><td>Ethereum</td><td><pre class="language-typescript"><code class="lang-typescript">0x217bE88CBEc6d0C4F95D8c34433F8Ce9950433b1
</code></pre></td></tr><tr><td>Binance Smart Chain</td><td><pre class="language-typescript"><code class="lang-typescript">0x217bE88CBEc6d0C4F95D8c34433F8Ce9950433b1
</code></pre></td></tr><tr><td>Polygon mainnet</td><td><pre class="language-typescript"><code class="lang-typescript">0x217bE88CBEc6d0C4F95D8c34433F8Ce9950433b1
</code></pre></td></tr><tr><td>Phoenix</td><td><pre class="language-typescript"><code class="lang-typescript">0x217bE88CBEc6d0C4F95D8c34433F8Ce9950433b1
</code></pre></td></tr><tr><td>Dogechain</td><td><pre class="language-typescript"><code class="lang-typescript">0x217bE88CBEc6d0C4F95D8c34433F8Ce9950433b1
</code></pre></td></tr><tr><td>BSC Testnet</td><td><pre class="language-typescript"><code class="lang-typescript">0x217bE88CBEc6d0C4F95D8c34433F8Ce9950433b1
</code></pre></td></tr><tr><td>Ropsten</td><td><pre class="language-typescript"><code class="lang-typescript">0x217bE88CBEc6d0C4F95D8c34433F8Ce9950433b1
</code></pre></td></tr><tr><td>Polygon Mumbai</td><td><pre class="language-typescript"><code class="lang-typescript">0x217bE88CBEc6d0C4F95D8c34433F8Ce9950433b1
</code></pre></td></tr></tbody></table>

#### Supported Router Networks

<table><thead><tr><th width="248">Network</th><th>Router</th></tr></thead><tbody><tr><td>Ethereum</td><td><pre class="language-typescript"><code class="lang-typescript">0x217bE88CBEc6d0C4F95D8c34433F8Ce9950433b1
</code></pre></td></tr><tr><td>Binance Smart Chain</td><td><pre class="language-typescript"><code class="lang-typescript">0x217bE88CBEc6d0C4F95D8c34433F8Ce9950433b1
</code></pre></td></tr><tr><td>Polygon mainnet</td><td><pre class="language-typescript"><code class="lang-typescript">0x217bE88CBEc6d0C4F95D8c34433F8Ce9950433b1
</code></pre></td></tr><tr><td>Phoenix</td><td><pre class="language-typescript"><code class="lang-typescript">0x217bE88CBEc6d0C4F95D8c34433F8Ce9950433b1
</code></pre></td></tr><tr><td>Dogechain</td><td><pre class="language-typescript"><code class="lang-typescript">0x217bE88CBEc6d0C4F95D8c34433F8Ce9950433b1
</code></pre></td></tr><tr><td>BSC Testnet</td><td><pre class="language-typescript"><code class="lang-typescript">0x217bE88CBEc6d0C4F95D8c34433F8Ce9950433b1
</code></pre></td></tr><tr><td>Ropsten</td><td><pre class="language-typescript"><code class="lang-typescript">0x217bE88CBEc6d0C4F95D8c34433F8Ce9950433b1
</code></pre></td></tr><tr><td>Polygon Mumbai</td><td><pre class="language-typescript"><code class="lang-typescript">0x217bE88CBEc6d0C4F95D8c34433F8Ce9950433b1
</code></pre></td></tr></tbody></table>


# How to add liquidity

You need to have tokens and a pair to add liquidity into our swap, once you have this 2 available click on Liquidity > Add Liquidity and follow the steps on the portal.


# How to swap


# Wallet

Our CakeWaller is currently available at Google Play using the following link.

{% embed url="<https://play.google.com/store/apps/details?id=finance.tresleches.cakewallet>" %}

<figure><img src="/files/KNvS9hgZgDwYfaJYlz2V" alt=""><figcaption><p>CakeWallet</p></figcaption></figure>

Our iOS wallet is under development, should be released first quarter of 2023.


# Android

once you download the CakeWallet for the on-screen details to signup, we will update this section with some product details and areas. soon.


# IOS

Coming Soon, January 2023


# Dapp Catalog

our dapp catalog can be found on <https://tresleches.finance/wallet/browser/index.html>


# Extension


# Privacy Policy

## Privacy Policy

Tres Leches, Bladepool or any related entity (the "Company," "we," or "us") would like to inform you on how we collect, use and disclose information. This Privacy Policy describes our practices in connection with information that we collect through websites operated by us from which you are accessing this Privacy Policy (the "Websites"); which may be accessed through HTML-formatted email message(s) that we send to you that link to this Privacy Policy. Collectively, we refer to the above as the "Service."

We take the protection of your personal data very seriously. By using the Service, you agree to the collection and use of information in accordance with this policy. We collect several different types of information for various purposes to provide and improve our Service to you.

**Contact Email**

When you send us an email we will store your provided personal information in order to process your inquiry and to provide you with our services to the extent applicable. We will keep copies of such communication as long as it is necessary for dealing with your inquiry.

**Tracking & Cookies Data**

We use cookies and similar tracking technologies to track the activity on our Service and hold certain information. Cookies are files with a small amount of data that our website stores on your device to collect and track information and to improve and analyze our Service.

**Changes to this Privacy Policy**

We may occasionally revise our privacy policy by posting the changes here.

By accessing any part of the Websites or Service, you agree that you are providing your express consent to the terms and conditions of this Privacy Policy.

**Contact Details**

If you have further questions with regards to this privacy policy do not hesitate to contact us at <hello@tresleches.finance> with the subject line "Privacy Policy". The last changes were made: 2022.02.28


# Terms of Use of Blockwallet/CakeWallet

These Terms of Use (hereinafter referred to as "Terms") apply to the access and use of the BETA version of the non-custodial Ethereum browser wallet (hereinafter referred to as “Wallet”) provided by Virtual Privacy AG (hereinafter referred to as “BLOCKWALLET” or “our”) available via the webpage <http://blockwallet.io/> and any mobile application (hereinafter referred to as “Website”). These Terms constitute an agreement between the customer (hereinafter referred to as “You” or “Your”) and Blockwallet and govern Your access to and use of the Site and Services (hereinafter referred to as “BETA version” or “Service”) provided by BLOCKWALLET and is an agreement between BLOCKWALLET and You or the entity You represent. It will be assumed that You have read all of these Terms before You apply for any Services from BLOCKWALLET.

The sole purpose of this BETA version is to test the use of the wallet, to obtain feedback on its performance, and to identify defects (hereinafter referred to as “Testing”). You expressly acknowledge that the BETA version is a test product and may contain bugs, errors, and other problems that could cause loss of data stored in the platform, inconsistent performance, and other failures including but not limited to systems crashes, interruptions, and data loss. You are advised to use caution and not to rely in any way on the performance and functioning of the BETA version. The BETA version is made available to You free of charge and no warranty shall be provided for the BETA version, except for the operability of the BETA version.

We do not guarantee that the Wallet will be developed to reach any subsequent development stage (e.g. release version) or that any subsequent versions will have the same or similar functionality and characteristics to the ones that the BETA has. To maintain and develop the Wallet we may collect limited and anonymized information and performance data.

**We may not be held responsible for any damages you may have because of any failures of the Wallet.**

Please read these Terms carefully before using the Site or Services. By using the Site and clicking a button or checkbox to accept the Services (hereinafter referred to as “Effective Date”), You (1) accept and agree to these Terms and (2) consent to the collection, use, disclosure, and other handling of information as described in our Privacy Policy. If You do not agree to the Terms, then You may not access or use the Services.

**1. Acceptance and changes to Terms**

1. Any and all terms, conditions, licenses, limitations, and obligations contained within and on the Website are incorporated into these Terms by reference, including, without limiting the generality of the foregoing, the following Website policies and pages: the Privacy Policy; Risk disclaimer and any other documents that might be announced in the Website. In the event of any inconsistency between these Terms and any other pages, policies, terms, conditions, licenses, limitations, or obligations contained within or on the Website, these Terms shall prevail.
2. By using any of the Services or any associated websites, APIs, you acknowledge that you have read, understand, and completely agree to these Terms in effect from time to time. If you disagree with these Terms or with any subsequent amendments, changes, or updates, you may not use any of the Services; your only recourse in the case of disagreement is to stop using all of the Services.
3. These Terms may be amended, changed, or updated by Blockwallet at any time and without prior notice to you. You should check back often to confirm that your copy and understanding of these Terms is current and correct. Your non-termination or continued use of any Services after the effective date of any amendments, changes, or updates constitutes your acceptance of these Terms, as modified by such amendments, changes, or updates.

**2. Use of BLOCKWALLET Website and Services**

1. You may access and use the Services in accordance with these Terms. You agree to comply with the Terms and all laws, rules, and regulations applicable in Liechtenstein to Your use of the Service.
2. BLOCKWALLET is a non custodial, EVM compatible browser wallet. Send, receive, bridge and swap EVM-compatible crypto assets inside the wallet, in a non custodial manner.
3. Using BLOCKWALLET wallet carries no rights, express or implied, other than the limited right to use Wallet as a means to enable access and interaction with the BLOCKWALLET Services, if and to the extent that the Services are successfully completed and deployed.
4. To use the Services, You need to create a wallet on the Extension (hereinafter referred to as “Account”) to be able to access the Services. You have first had to choose either to import Your existing wallet or to create a new wallet. You are required to open an account and You must complete the registration process by providing accurate information as prompted by the applicable registration form. You will also be required to choose a password and backup password. You are entirely responsible for maintaining the confidentiality of Your password and account and for any and all activities that occur under Your Account.
5. You must keep Your Account’s password safe and not shared with third-parties. We are not responsible for unauthorized access to Your Account. You agree to notify BLOCKWALLET immediately of any unauthorized use of Your account or any other breach of security. BLOCKWALLET will not be liable for any losses You incur as a result of someone else using Your password or account, either with or without Your knowledge. However, You could be held liable for losses incurred by BLOCKWALLET or another party due to someone else using Your account or password. You may not use anyone else’s account at any time, without the permission of the account holder.
6. You must keep Your Account’s password safe and not shared with third parties. We are not responsible for unauthorized access to Your Account. You agree to notify BLOCKWALLET immediately of any unauthorized use of Your Account or any other breach of security. BLOCKWALLET will not be liable for any losses You incur as a result of someone else using Your password or Account, either with or without Your knowledge. However, You could be held liable for losses incurred by BLOCKWALLET or another party due to someone else using Your Account or password. You may not use anyone else’s Account at any time, without the permission of the Account holder.
7. Once the wallet is created, You can start using the service by sending or receiving transactions on compatible blockchains.
8. If BLOCKWALLET stops or suspends support for the wallet, Your private key can be used to access Your crypto assets on any other compatible wallet.

**3. Your Responsibilities**

1. Except to the extent caused by our breach of these Terms, (a) You are responsible for all activities that occur in Your Account, regardless of whether the activities are authorized by You or undertaken by You, Your employees, or a third party (including Your contractors, agents or end-users), and (b) BLOCKWALLET and our affiliates are not responsible for unauthorized access to Your Account.
2. You will ensure that Your Use of the Services does not violate any applicable law. You are solely responsible for Your Use of the Services.
3. You are responsible for properly configuring and using the Services and otherwise taking appropriate action to secure, protect, and backup Your Accounts and Your Content in a manner that will provide appropriate security and protection, which might include the use of encryption.
4. You shall immediately report any malfunction or defect found while using the Service. The report can be made to the following e-mail address: <hello@blockwallet.io>.
5. You are liable for the correctness of the information You have submitted to BLOCKWALLET during registration.
6. When accessing Services, You shall not: (i) negatively interfere with other customers; (ii) damage, disable, or in any way disrupt the Website; (iii) conduct, pay for, support, or in any way be involved in any illegal activities, including but not limited to money laundering, terrorist financing, fraud, illegal gambling, illegal weapons sale and drug trafficking; (iv) use any automated means or interface to access Webpage or to extract data; (v) use another customer’s account; (vi) provide false or misleading information to us.

**4. Liability. Warranties. Indemnification. Suspension**

1. To the extent permitted by law, BLOCKWALLET will not be liable for any damages, losses of profit, usage or data, loss of business, loss of business, failure to use the Service, customers misunderstanding of the Service or any other loss originated from negligence or fraud or otherwise arising out of or connected to the Service or these Terms.
2. You shall indemnify and hold harmless BLOCKWALLET, its affiliates, contractors, licensors, and respective shareholders, members, directors, officers, employees, attorneys, agents, and suppliers from any claim, damage, lawsuit, tort, cost, or expenses.
3. The Services are provided on an “as is” and “as available” basis without any warranty or representation expressed or implied. BLOCKWALLET does not make any representations or give warranties that the access to the Service, use of the Account, the functionality of the wallet will be continuous, uninterrupted, timely, or error-free.
4. You understand and agree that BLOCKWALLET shall not be liable in connection with any force majeure event, including labor disputes or other industrial disturbances, electrical, telecommunications, hardware, software or other utility failures, software or smart contract bugs or weaknesses, earthquakes, storms, or other nature-related events, blockages, embargoes, riots, strikes, acts or orders of government authority, acts of terrorism or war, technological change, changes in interest rates or virtual currencies or other monetary conditions, and, for the avoidance of doubt, changes to any blockchain-related protocol.

**5. Intellectual property (IP) protection**

1. Unless otherwise clearly specified, all copyright and other IP rights of our Service (hereinafter referred to as “Content”) constitute our proprietary rights and are protected by international laws and national IP and copyright laws.
2. Subject to the terms of Terms, we grant You a personal, limited, revocable, non-exclusive, non-sublicensable, non-transferable license to do the following: (a) access and use the Services solely in accordance with these Terms; and (b) copy and use Our Content solely in connection with Your permitted use of the Services.
3. The use of such protected material without a license or specific authorization violates copyright and IP rights and shall result in criminal and/or civil penalties.
4. You may view, download and print the documents from the Service solely for your personal use and own information purposes.
5. Neither You nor any end-user will use the Services in any manner or for any purpose other than as expressly permitted by these Terms. Except as expressly authorized, neither You nor any end-user will, or will attempt to (a) modify, distribute, alter, tamper with, repair, or otherwise create derivative works of any Content included in the Services, (b) reverse engineer, disassemble, or decompile the Services or apply any other process or procedure to derive the source code of any software included in the Services (except to the extent applicable law doesn’t allow this restriction), (c) access or use the Services in a way intended to avoid incurring fees or exceeding usage limits or quotas, (d) use scraping techniques to mine or otherwise scrape data, or (e) resell or sublicense the Services unless otherwise agreed in writing. You will not misrepresent or embellish the relationship between BLOCKWALLET and You (including by expressing or implying that we support, sponsor, endorse, or contribute to You or Your business endeavors). You will not imply any relationship or affiliation between BLOCKWALLET and You except as expressly permitted by this Agreement.
6. If You provide any Suggestions to BLOCKWALLET, we and our affiliates will be entitled to use the Suggestions without restriction. You hereby irrevocably assign to us all right, title, and interest in and to the Suggestions and agree to provide us any assistance we require to document, perfect, and maintain our rights in the Suggestions.
7. Blockwallet and the Blockwallet logos, the URLs representing the Website, trade names, wordmarks, and design marks (hereinafter referred to as "Blockwallet Marks") are trademarks of Blockwallet or its related companies. In addition, all page headers, custom graphics, design, button icons, scripts, source code, content are copyrighted by Blockwallet. You agree not to appropriate, copy, display or use the Blockwallet Marks or other content without express, prior, written permission to do so. Unless otherwise indicated, all materials on Blockwallet are © Blockwallet.
8. You acknowledge and agree that any materials, including but not limited to questions, comments, feedback, suggestions, ideas, plans, notes, drawings, original, or creative materials or other information or commentary you provide on the Website or one of Blockwallet ‘s social media accounts, regarding Blockwallet or the Services (collectively hereinafter referred to as "Feedback") that are provided by you, whether by email, posting to the Website or otherwise, are non-confidential and will become the sole property of Blockwallet. Blockwallet will own exclusive rights, including all intellectual property rights, and will be entitled to the unrestricted use and dissemination of such Feedback for any purpose, commercial or otherwise, without acknowledgment or compensation to you.

**6. Your Representations & Warranties**

1. You represent and warrant to Blockwallet as follows:
   * that, if you are an individual customer, you are 18 years of age or older and that you have the capacity to contract under applicable law
   * that, if you are not an individual customer, you have the requisite power and authority to sign and enter into binding agreements for and on behalf of the customer;
   * that you understand the risks associated with using the Site and Services and you are not otherwise prohibited by law from using the Site and Services;
   * that you will not use the Site or any Services in order to disguise the proceeds of, or to further, any breach of applicable laws or regulations, or to deal in any contraband cryptocurrencies or proceeds;
   * that you will not trade on the Site or use any Services with anything other than cryptocurrencies that have been legally obtained by you and that belong to you;
   * that you will not falsify any account registration details provided to Blockwallet;
   * that you will not falsify or materially omit any information or provide misleading information requested by Blockwallet in the course of, directly or indirectly relating to, or arising from your activities on the Site or use of any Services, including at registration;
   * that any trading or other instructions received or undertaken through your login credentials or from your authorized e-mail address on file with Blockwallet are deemed to be valid, binding, and conclusive, and that Blockwallet may act upon those instructions without any liability or responsibility attaching to it; and,
   * that you will fairly and promptly report all income associated with your activity on the Site pursuant to applicable law and pay any and all taxes eligible thereon;
   * that you understand that cryptocurrencies are often described in exceedingly technical language that requires a comprehensive understanding of applied cryptography and computer science in order to appreciate inherent risks. The ability to use cryptocurrencies on Blockwallet’s Services does not indicate approval or disapproval of the underlying technology regarding any cryptocurrencies, and should not be used as a substitute for your own understanding of the risks specific to each cryptocurrency. Blockwallet gives you no warranty as to the suitability of the cryptocurrencies used under these Terms and assumes no fiduciary duty in Blockwallet‘s relations with you.
   * You agree that Blockwallet is not responsible for determining whether or which laws may apply to your transactions, including tax law. You are solely responsible for reporting and paying any taxes arising from your use of the Services.

**7. The Website and Services Accuracy**

1. Although Blockwallet intends to provide accurate and timely information on the Website and while providing Services, the Website (including, without limitation, Services) may not always be entirely accurate, complete, or current and may also include technical inaccuracies or typographical errors. In an effort to continue to provide you with as complete and accurate information as possible, information may be changed or updated from time to time without notice, including without limitation information regarding Blockwallet‘s policies, products, and services. Accordingly, you should verify all information before relying on it, and all decisions based on information contained on the Website are your sole responsibility and Blockwallet shall have no liability for such decisions. Links to third-party materials (including without limitation websites) may be provided as a convenience but are not controlled by Blockwallet. You acknowledge and agree that Blockwallet is not responsible for any aspect of the information, content, or services contained in any third-party materials or on any third-party Websites accessible or linked to the Website.

**8. Regulations. Compliance with local laws.**

1. It is Your responsibility to comply with local laws in respect to the legal usage of the Service and the regulatory qualification of virtual currencies in Your jurisdiction.

**9. Jurisdiction. Applicable law. Disputes**

1. These Terms have been drawn up in accordance with the laws of the Republic of Liechtenstein and the application, interpretation, and termination shall be governed by the laws of the Republic of Liechtenstein.
2. Jurisdiction of the United States of America (including all territories of this country) is specifically excluded from these Terms. We reserve the right to change the jurisdiction of Blockwallet and these Terms at any time at our own discretion, as well as use any parent companies, subsidiaries, and/or other affiliated companies for the execution of these Terms, our products, and other activities related to our business.
3. Any disputes regarding the use of the Service and/or in connection with these Terms shall be settled through negotiations. If the Parties fail to resolve the dispute through negotiation, the disputes shall be settled by Harju Maakohus (Harju County Court), pursuant to the procedure provided by the law of the Republic of Liechtenstein.
4. You and Blockwallet agree that any party hereto may bring claims against the others only on an individual basis and not as a plaintiff or class member in any purported class or representative action or proceeding. No adjudicator may consolidate or join more than one person’s or party’s claims and may not otherwise preside over any form of a consolidated, representative, or class proceeding. Any relief awarded to any one Blockwallet user cannot and may not affect any other Blockwallet user.

**10. Term. Termination**

1. The term of these Terms will commence on the Effective Date and will remain in effect until terminated under this Section 7.
2. You may terminate the agreement with BLOCKWALLET at any time on the basis provided by law.
3. You agree that BLOCKWALLET may restrict Your access to the extension in case of, but not limited to:
   * non-conformity to the requirements from these Terms;
   * a requirement from any applicable law to which we are subject in any jurisdiction;
   * an order from a court, or governmental authority;
   * unusual, unauthorized or fraudulent activity in Your Account;
   * false, misleading, inaccurate, incomplete, or outdated information;
   * any other reasons that BLOCKWALLET deems relevant for termination of the agreement between You and BLOCKWALLET and suspension or cancelation of Your Account.
4. BLOCKWALLET shall have the right to file claims against You or Your legal representative for compensation.
5. If an event of force majeure occurs, the party injured hereto by the other’s inability to perform may elect to suspend the agreement between You and BLOCKWALLET, in whole or part, for the duration of the force majeure circumstances.
6. Upon termination, suspension, or cancellation on the basis of the previous clauses, You will be denied access to the Account temporarily or permanently.

**11. Disclaimer. Risk**

1. Blockwallet makes no representations, warranties, or guarantees to you of any kind. The Service is provided “as is” and “as available”. Except to the extent prohibited by law or to the extent any statutory rights apply that cannot be excluded, limited, or waived. Your use of the Service shall be at Your own sole risk. BLOCKWALLET makes no representations or warranties including any implied or express warranties of merchantability, satisfactory quality, fitness or a particular purpose, non-infringement arising out of any course of dealing or usage of trade that the Service will be uninterrupted, error-free or free of harmful components, and that any content will be secure or not otherwise lost or altered. BLOCKWALLET does not warrant that Your use of Service will be uninterrupted or error-free, nor does BLOCKWALLET warrant that it will review Your content for accuracy or that it will preserve or maintain Your content or end-user data without loss. BLOCKWALLET will not be liable for delays, interruptions, Service failures, or other problems inherent in the use of the internet and electronic communications or other systems outside the reasonable control of BLOCKWALLET. You may have other statutory rights, but the duration of statutorily required warranties, if any, will be limited to the shortest period permitted by law. To the extent permitted by law, BLOCKWALLET is not responsible for any delays, delivery of failures, or any other loss or damage resulting from (i) the transfer of data over public communications networks and facilities including the internet; (ii) personal injury or property damage or any nature whatsoever resulting from Your access to and use of BLOCKWALLET Services and/or any all personal information and/or financial information stored therein; (iii) any loss of Your data or content from the BLOCKWALLET Services; or (iv) any delay or delivery failure on the part of any other Service provider not contracted by BLOCKWALLET, and You acknowledge that the Service may be subject to limitations, delays and other problems inherent in the use of such communication facilities. You acknowledge that BLOCKWALLET cannot guarantee the absolute prevention of cyber-attacks such as hacking, spyware, and viruses. Accordingly, BLOCKWALLET shall not be liable for any unauthorized disclosure, loss, or destruction to make or pass on any representation or warranty on behalf of BLOCKWALLET to any third party. BLOCKWALLET does not warrant, endorse, guarantee or assume responsibility for any product or Service offered by third-party through the Website or BLOCKWALLET Services, and BLOCKWALLET shall not be a party to or in any way responsible for monitoring and any transaction between You and third-party providers of product or Services.
2. BLOCKWALLET Services rely on emerging technologies, such as Ethereum. Some Services are subject to increased risk through Your potential misuse of things as public/private key cryptography. By using the Services You explicitly acknowledge and accept these heightened risks.
3. Since You can use crypto assets for sending and receiving please note that crypto assets and markets are decentralized and not regulated. The Crypto asset market is determined only by supply and demand and is often highly unpredictable and volatile. The price of a crypto asset is usually not transparent and highly speculative and susceptible to market manipulation. In the worst-case scenario, crypto-assets could be rendered worthless.
4. Accordingly, crypto assets should be seen as an asset class with extremely high risks. You should not deal in these products unless You have the necessary knowledge and expertise, You understand these products’ characteristics, and Your exposure to risk
5. Since blockchain is an independent public or private peer-to-peer network and is not controlled in any way or manner by us, we shall not be responsible for any failure and/or mistake and/or error and/or breach which shall occur in blockchain or in any other networks in which the crypto asset are being issued. You will be bound and subject to any change and/or amendments in the blockchain system and subject to any applicable law which may apply to the blockchain. We make no representation or warranty of any kind, express or implied, statutory or otherwise, regarding the blockchain functionality nor for any breach of security in the blockchain. You should be aware of the risks that may result from any system failure which could mean that Your order may be delayed or fail.
6. You acknowledge that there are risks associated with the system over the internet including, but not limited to, the failure of hardware, software, and internet connections, the risk of malicious software introduction, the risk that third parties may obtain unauthorized access to information and/or assets (including Your crypto asset/token) stored on Your behalf, cyber-attack, the crypto asset network failure (such as Blockchain), computer viruses, communication failures, disruptions, errors, distortions or delays You may experience when trading via the Services, howsoever caused, spyware, scareware, Trojan horses, worms or other malware that may affect Your computer or other equipment, or any phishing, spoofing or other attacks. You should also be aware that SMS and email Services are vulnerable to spoofing and phishing attacks and should use care in reviewing messages purporting to originate from us.

**12. Miscellaneous**

1. The defined concepts that are written in the upper case first letter in the Terms are used in the indicated meaning unless the context indicates a different meaning.
2. These Terms set forth the entire understanding between BLOCKWALLET and You with respect to the Service. You agree to rely only on the Terms alone. These Terms supersede any previous statements made by BLOCKWALLET or individuals associated with the BLOCKWALLET.
3. The failure by us to enforce any provision of these Terms will not constitute a present or future waiver of such provision nor limit our right to enforce such provision at a later time. All waivers by us must be in writing to be effective.
4. If any term, clause, or provision of these Terms is held unlawful, void, or unenforceable, then that term, clause, or provision will be severable from this agreement and will not affect the validity or enforceability of any remaining part of that term, clause or provision, or any other term, clause or provision of these Terms and the invalid condition shall be replaced by a valid condition as close as possible to the outcome and the detail of the replaced condition.
5. No failure of BLOCKWALLET to exercise any right, power, or privilege under these Terms is deemed to be a waiver thereof, nor any partial exercise of a right, power, or privilege should preclude the exercise of the entire or other rights, power or privilege.
6. You may not assign any of the rights conferred to You under these Terms without prior written consent from BLOCKWALLET. BLOCKWALLET may assign any right or obligation under these Terms without any notice to or consent from You.
7. These Terms are provided in English. Any translation has the sole purpose of being convenient for You. In case of any inconsistency, contradiction, or doubt, the English version of these Terms shall prevail.
8. You can contact us, if You have some question, feedback, or complaint related to our Service, by sending BLOCKWALLET a message through <http://blockwallet.io/> Contact section or by sending an e-mail to <hello@blockwallet.io> The last changes were made: 2022.11.25

![Glitch effect](https://blockwallet.io/static/images/deco/promo-left.svg)![Glitch effect](https://blockwallet.io/static/images/deco/promo-right.svg)

### We care about your money.


# How to use the Phishing Protection feature

he phishing protection feature helps to make your wallet unique and easily verifiable from phishing attempts by scammers. It's a uniquely generated art for your wallet that is being displayed on all the sensitive areas where you need to use your password. This feature makes it very difficult for scammers to perform phishing scams because they don't know the design of your generative art.

**We highly recommend that you have this feature turned ON and that you remember your art and not disclose it to anyone.**&#x20;

*Your unique anti-phishing art is being displayed on the "Login" & "Import/Export Account" pages.*

![Screenshot\_2022-03-16\_at\_15.25.49.png](https://help.blockwallet.io/hc/article_attachments/4803540531601/Screenshot_2022-03-16_at_15.25.49.png)    ![Screenshot\_2022-03-16\_at\_15.25.06.png](https://help.blockwallet.io/hc/article_attachments/4803545837457/Screenshot_2022-03-16_at_15.25.06.png)

**It's important to note** that if you ever try to interact with your BlockWallet but it doesn't show your anti-phishing art, it likely means that you are a victim of a phishing attempt and that you should avoid using the wallet and instead contact our community managers on [Telegram](https://t.me/blockwallet) or [Discord](https://discord.com/invite/EKVZ2xWXEH) for further guidance.&#x20;

&#x20;

### Access/Using the phishing protection feature

* To access the phishing protection menu, start by clicking the settings icon at the top right of the main screen of your wallet.\
  ![Screenshot\_2022-03-16\_at\_15.12.38.png](https://help.blockwallet.io/hc/article_attachments/4803145748113/Screenshot_2022-03-16_at_15.12.38.png)
* In the Settings menu, click "Preferences".\
  ![Screenshot\_2022-03-16\_at\_15.13.55.png](https://help.blockwallet.io/hc/article_attachments/4803192209681/Screenshot_2022-03-16_at_15.13.55.png)
* In the preferences menu, click "Phishing Protection".\
  ![Screenshot\_2022-03-16\_at\_15.14.54.png](https://help.blockwallet.io/hc/article_attachments/4803235278737/Screenshot_2022-03-16_at_15.14.54.png)
* In the phishing protection menu, you'll be able to toggle it ON/OFF and regenerate a new image.\
  ![Screenshot\_2022-03-16\_at\_15.15.57.png](https://help.blockwallet.io/hc/article_attachments/4803255911313/Screenshot_2022-03-16_at_15.15.57.png)

### Important points to remember:

* Turn ON the phishing protection in your wallet settings for extra security
* Make sure to remember and always look for your anti-phishing art when writing your password
* **Do** **not** share your anti-phishing art online or with someone else
* **Do** **not** interact with BlockWallet if it doesn't display your anti-phishing art


# What Is a Dropped Transaction?

A dropped transaction is a transaction that was never mined. The transaction was broadcast to the network but dropped from the connected nodes. Dropped transactions typically occur for a number of reasons:

* The connected nodes drop a pending transaction from the transaction pool (usually due to a lower gas price compared to other pending transactions)
* A node can only have so many pending transactions before certain transactions are dropped from its pending pool (network dependent)
* The gas fee provided for the transaction was too low
* The transaction would fail if it got mined

When a transaction is dropped, it is no longer broadcasted by the network nodes. As a result, it won’t be processed and is not recorded on the blockchain. Assets and gas fees used in dropped transactions are returned to the sending address.

## Replaced Transactions

Dropped transactions can theoretically still be mined until they are replaced. Dropped transactions are replaced when another transaction using the same nonce is broadcasted and confirmed by the network. A nonce indicates the number of transactions made by an address. It starts at 0 and increases by 1 with every transaction. BlockWallet automatically resets the nonce to the nonce used during the dropped transaction, making replaced transactions possible.\
\
Replaced transactions are typically broadcasted for the following reasons:

* The initial transaction had a low gas price and would take a long time to confirm, so users initiate a second transaction with a higher gas price to replace it
* The node was not fully synced, resulting in an incorrect nonce being used
* Initiated by users to replace or cancel a pending transaction

As dropped transactions are not recorded on the blockchain, another transaction is initiated with the previous nonce value. This means that the second transaction has replaced the dropped transaction by taking its position in the nonce sequence.&#x20;


# How do Hardware Wallets Work?

To start off, hardware wallets are extremely secure. While hardware wallets may be a bit more tedious to use when compared to hot wallets like MetaMask, it gives you complete control over your assets, and even requires you to physically approve signatures and transactions before they’re executed - this provides an extra layer of protection against cyber-attacks, phishing sites, and malware.

## Hardware Wallets Store Your Private Key

To be clear, cryptocurrencies are never stored within the hardware wallet itself - they live on the blockchain. The hardware wallet merely stores your private key. And the private key associated with your hardware wallet opens the lock to your address on the blockchain where your assets actually live. To access your funds, all you need to do is connect your hardware wallet to your computer to interact with your tokens.

## The Safest Method to Store Cryptocurrency

Your private keys stored on the hardware wallet are protected by a PIN and an optional passphrase. Should a thief take possession of your hardware wallet, it’s near impossible for them to extract your keys. The keys are never exposed to the internet so they can’t be stolen. That’s why it’s known as cold storage.

If your hardware wallet is lost, the assets are backed up with a single seed phrase. A seed phrase, also known as a recovery phrase, is a list of words that re-generate your private key. You can use your seed phrase to move your keys to a different hardware wallet.

Be sure to keep your seed phrase in a safe place, because there is no way to retrieve your assets if that is lost.

## Interacting With The Blockchain

Hardware wallets let you sign and confirm transactions on the blockchain. When you create a blockchain transaction, you’re “signing” a special message, and your “signature” proves ownership of your private key. It’s impossible to forge this signature without the private key, so no one else can make a transaction on your behalf without it.


# How to get the Ledger Hardware Wallet

To purchase the Ledger Hardware wallet, simply go to the [Ledger website](https://shop.ledger.com/#category-cryptocurrency-wallets).

There are 3 hardware wallets available:

* Ledger Nano X
* Ledger Nano S
* Ledger Nano S Plus

While they both do the job, there are some additional features in the Ledger Nano X and Ledger Nano S Plus that aren’t available on the Ledger Nano S. You can view the differences for yourself and see which one suits you the best [here](https://shop.ledger.com/#category-cryptocurrency-wallets). If you’re simply looking for a place to store your crypto offline for the most affordable price, the Ledger Nano S does the job just fine!

We **strongly recommend** buying your Ledger device directly from their website. While nothing is 100% tamper-proof, there is a higher possibility of your device being compromised when buying from a third-party retailer.


# How to get the Trezor Hardware Wallet?

To purchase the Ledger Hardware wallet, simply go to the [Trezor website](https://trezor.io/#comparison).

There are 2 Trezor hardware wallets available:

* Trezor Model T
* Trezor One

While they both do the job, there are some additional features in the Trezor Model T that aren’t available on the Trezor One that you can review [here](https://trezor.io/#comparison). If you’re simply looking for a place to store your crypto offline for the most affordable price, the Trezor One does the job just fine!

We **strongly recommend** buying your Trezor device directly from their website. While nothing is 100% tamper-proof, there is a higher possibility of your device being compromised when buying from a third-party retailer.


# What is an HD Path?

We don’t recommend you update this setting unless you can’t find the addresses you’re looking for.

&#x20;

## What is an HD Path?

While setting up your hardware device on BlockWallet, you might have come across the following choice to select an HD Path to identify your hardware device.![HD\_Path.png](https://help.blockwallet.io/hc/article_attachments/6670372711441/HD_Path.png)

An HD Path simply dictates which addresses are displayed and the order they are displayed. Keep in mind the list of addresses may change depending on the derivation path.

When connecting your hardware wallet with BlockWallet, you will have 3 options:

* **Ledger Live** (*this option is selected by default)*
* **BIP 44 Standard**
* **Legacy (MEW / MyCrypto)**

When connecting your Trezor Hardware wallet, BIP 44 Standard is the only option available for the device.

TIP: When connecting your hardware wallet, if you do not see the wallet address you typically use, try changing the HD Path to rearrange the order in which your wallet addresses are displayed. This might help you find the address you’re looking for.


# What is Lock Timeout?

o increase your safety, BlockWallet’s Lock Timeout feature will log out after a certain period of time. By default, this period is set to 5 minutes.

If you would like to change the Lock Timeout period or disable this feature, follow the steps below:

1. Select the settings gear icon in the top right-hand corner of your wallet.
2. Select the “Preferences” tab with the wrench icon.
3. Select the “Lock Timeout” tab with the lock icon.
4. Here, you can enable/disable the Lock Timeout feature with the toggle and change the lock timeout period using the drop-down selector.

![Lock\_Timeout.gif](https://help.blockwallet.io/hc/article_attachments/6815345254289/Lock_Timeout.gif)


# How to Add a Custom Network RPC

With the many EVM-compatible networks popping up, adding custom networks will be essential to navigating your favorite DApps and DEXes.

**What is a RPC?**

RPC stands for remote procedure call, a set of protocols that allow a client such as BlockWallet to interact with a blockchain. Adding network details in the manual process outlined below allows BlockWallet to connect to a particular network and interact with it.

Note that if you’re operating BlockWallet from multiple devices, adding a network on one device does not mean it will appear on another device even when accessing the same account.

Also, you will need to re-add custom networks if you uninstall the BlockWallet extension.

### Using Chainlist to add a network

The easiest way to add a custom network is [ChainList](https://chainlist.org/). It’s a trusted service which does not require technical details like an RPC URL or Chain ID.

We recommend taking a look at the list of networks available on [ChainList](https://chainlist.org/) and adding networks from there, especially for beginners. For a helping hand, check out our HelpDesk article on[ How to Add a Network Using Chainlist.](https://help.blockwallet.io/hc/en-us/articles/7786076532497)

### Adding a network

Follow the steps below to add a custom network manually.

1. In the main wallet screen, select the gear icon on the top-right-hand corner.
2. Select “Networks”
3. Select “+ Add New Network”
4. Type in the network's Chain Identification or Chain Name
   1. Note that if you are looking for a **testnet** OR **networks supported by default** you will only see those results by modifying your search filter by selecting the icon in the top right-hand corner.
5. If your search query comes back with zero results, it’s due to one of the following reasons:
   1. You entered the Chain Identification or Chain Name incorrectly. Double-check your entry and try again.
   2. Your desired network is a non-recognized network and it needs to be added manually.
6. To add a network manually, enter the Network Name, RPC URL, Chain ID, and Currency Symbol.
7. Once this info has been entered, press “Save”.

### Editing network details

*This is an advanced feature. If you’re not 100% sure with what you’re editing, do not change network details.*

You have the option to edit network details as long as it’s not selected for use. To do so, navigate to the “Network” tab in settings, select a network, and edit the details. Remember to press save once you’re done.

### Risks of adding an unknown network

As the blockchain ecosystem expands, many custom networks are built, but not all of them can be trusted. This is an inherent risk to adding custom networks.

Here are a couple of best practices when adding custom networks:

* Do your due diligence
  * BlockWallet does not verify non-recognized networks, so be sure you trust the network provider before adding it to your BlockWallet account. A malicious network provider can lie about the state of the blockchain, withhold transactions, and record your network activity and IP address.
  * Additionally, the quality of the underlying RPC is not guaranteed, the wallet experience can be degraded because of a low-quality RPC provided by the custom network.
* Always use established bridges or portals to move tokens between networks.
  * When bridging your tokens (moving your tokens from one chain to another), make sure you trust the network operator and the receiving address you send funds.
  * **If you attempt to send crypto assets directly from one network or chain to another, it will most likely result in permanent and irreversible asset loss.**
* Make sure that custom network information is accurate.
  * Always verify custom network information before adding it to your BlockWallet account. As mentioned above, BlockWallet does not verify non-recognized networks.


# Tips to Stay Safe When Connecting to DApps

Just like a regular app, DApps allow for endless possibilities, with the added benefit of decentralization.

In just a short period of time, we’ve witnessed an explosion of innovation that has created the likes of OpenSea, UniSwap V2, Compound, and NBA Top Shot, just to name a few.

But this exponential rise in DApp development also has its downsides. Just like how crypto markets are chuck-full of scammers, the same goes for the world of decentralized applications. And because of this, every day, more and more people fall victim to fraudulent DApps made by scammers.

By following the tips outlined below, you can mitigate the risk of losing funds by spotting malicious DApps.

### Confirm the DApp is legitimate and reputable

Websites like [DAppRadar.com](http://dappradar.com/) and [DApp.com](http://dapp.com/) have information on popular DApp on the market. From there, you can look over the DApp’s on-chain graphs to check if you see anything fishy going on.

Another way to check a DApps legitimacy is by visiting its social media links to see if the creators are active. We recommend only using DApps with active engagement and a good reputation amongst its community.

Lastly, the DApp’s code should be audited by a qualified smart contract auditor, such as [CertiK](https://www.certik.com/). If the smart contract has not been through auditing, fatal bugs that could compromise your assets are a possibility.

### Make sure you’re visiting the correct URL

Scammers will sometime create a fake DApp with a similar URL to try and fool unassuming users. For example, they might use an “o” instead of a “0” or slightly tweak the spelling of a website.

Once their targets are on the fake website, you’ll be prompted to enter your seed phrase, private key, or connect your wallet, giving up access to your assets.

Another method that scammers will use to redirect you to fake websites is by running Google Ads to show up first on Google’s search results.

To avoid visiting malicious URL’s we recommend typing the URL directly in the search bar, or only clicking links that are directly distributed by the team.

### Look out for your Phishing Protection Artwork

For all legitimate BlockWallet extensions, your unique Phishing Protection artwork will show up when asked to enter sensitive information like your password. If you do not see your Phishing Protection artwork pop up when connecting to a DApp, do not enter any sensitive information.


# How to Use BlockWallet Bridges

BlockWallet Bridges lets you move tokens from one blockchain to another, right inside of BlockWallet. Limit your exposure to potentially malicious third-party protocols.

## Before you start bridging

Here are a couple of tips and safety reminders you should know about before using BlockWallet Bridges.

### Slippage

Similar to token slippage, slippage is the amount of change between the price the bridge was initiated at and the final transaction price that BlockWallet will tolerate. Given the highly liquid and fluctuating nature of cryptocurrencies, prices can change from second to second. By default, slippage is set to 0.5% - if you’d like to increase or decrease the slippage on your swap, select the “Settings” tab on the bridges confirmation page (after you click “Review”).

### Gas Fees

Even though there are zero trading fees for your bridges, you still need to pay gas fees. **Make sure you have enough native network tokens to pay the gas fees on your current chain AND destination chain!**

### Border Cases

While very simple to use, this is still crypto and while we’re still so early, lots of different border cases can occur. Check out the list below to make sure you’re prepared if you ever run into one of these scenarios.

#### Missing Native Token on Destination Chain

We just mentioned it, but since this is by far the most common error when bridging, we’re going to mention it again.

**When bridging, please make sure you have enough native network tokens to pay the gas fees on your current chain AND destination chain!**

For example, if you’re bridging USDT from the Ethereum Network to BNB Chain, make sure you have enough ETH tokens and BNB tokens as well. If you don’t have any BNB tokens in your account, you won’t have the gas fees to move the bridged USDT anywhere. Don’t worry though, we have warnings in place to help you avoid this.

#### Alternate Token Refunds

Just like the name implies, alternate token refunds are when the bridge operation fails, and the user is refunded an alternate token from the one that was used to initiate transaction.

For example, if you want to bridge 5 DAI from Ethereum to Polygon, but somehow the bridge operation fails. During an alternate token refund, instead of being refunded your 5 DAI, you would receive 4.9988 USDC instead.

A similar border case to alternate token refunds is **alternate token bridges**. This happens when the user receives a different token on the destination chain than the one they initiated the bridge with.

For example, if you wanted to bridge 5 USDC from Polygon to Gnosis. With an **alternate token bridge**, you would receive 5.0005 DAI on the Gnosis chain instead of the 5 USDC you’d be expecting.

While these situations aren’t ideal, keep in mind that the **token asset value remains the same in both scenarios.**

#### Provider/Tool Errors

When requesting a quote or routes to bridge your tokens, it’s possible that one or more tools that we’re using won’t be able to provide results. The possible error messages you may run into are outlined below, followed by what caused to error message to appear.

NO\_POSSIBLE\_ROUTE: No route was found for this action.

INSUFFICIENT\_LIQUIDITY: The tool's liquidity is insufficient.

TOOL\_TIMEOUT: The third-party tool timed out.

UNKNOWN\_ERROR: An unknown error occurred.

RPC\_ERROR: There was a problem getting on-chain data. Please try again later.

AMOUNT\_TOO\_LOW: The initial amount is too low to transfer using this tool.

AMOUNT\_TOO\_HIGH: The initial amount is too high to transfer using this tool.

FEES\_HGHER\_THAN\_AMOUNT: The fees are higher than the initial amount -- this would result in a negative resulting token.

DIFFERENT\_RECIPIENT\_NOT\_SUPPORTED: This tool does not support different recipient addresses.

TOOL\_SPECIFIC\_ERROR: The third-party tool returned an error.

CANNOT\_GUARANTEE\_MIN\_AMOUNT: The tool cannot guarantee that the minimum amount will be met.

### How to Bridge Tokens

1. Select the desired network you’d like to bridge tokens from.
2. Select the token you would like to bridge from the “Assets” tab on the home screen.
3. Select the Bridge icon.
4. Enter the number of tokens you would like to bridge.
5. Select the network you would like to bridge to.
6. Press “Review”.
7. On the Bridge confirmation page, there are several features to ensure you’re satisfied with your bridge.
   1. In the “Settings” tab, you can customize slippage and also turn on Flashbots Protection. This option will only be available for transactions consuming more than 42,000 gas.
   2. In the “Details” tab, you can view the contract address and other details like fees and rates.
8. If you are satisfied with the details of your transactions, press “Bridge”.
9. Once the bridge transaction has been initiated, the “Activity” tab on BlockWallet home screen will show that your “BlockWallet Bridge” is pending. You can also check the “Activity” tab in the destination network to confirm there’s an “Incoming Bridge”.
10. Once the bridge is complete, your tokens will now be available on the destination network!

For all the visual learners out there, don’t worry, we’ve got you covered! Here’s a screen recording walkthrough on how to bridge ETH tokens from the Ethereum network to the Polygon network. In the recording, you’ll see the details of all the steps outlined in the instructions above.

![ETH\_to\_BNBCHAIN\_GIF.gif](https://help.blockwallet.io/hc/article_attachments/10790529073425)


# Blockchain

**Chain Name:** Tres Mainnet

**Coin Name:** Tres

**Coin Symbol:** TRES

**Coin Decimal:** 18

**ChainID:** 6066

**RPC:** <https://rpc.treschain.io>

**Explorer:** <https://treschain.io>

**Chain Name:** Tres Testnet

**Coin Name:** Tres

**Con Symbol:** TRES

**Coin Decimal:** 18

**ChainID:** 6065

**RPC:** <https://rpc-test.tresleches.finance>

**Explorer:** <https://treschain.co>


# Node List

Here are the list of nodes and enodes that are active as of June 1st, 2024, they are controlled and supported by the community at the given time. Is important that each node follow each other and trust each other.

| Name             | enode                                                                                                                                                                       | Notes                                                       |
| ---------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------- |
| Xeggex Exchange  | enode://431a4082ae86bfd7afc4bb6431793572caa0f9811d82be8f445fd67ac1c537d114847335bf620ef52941bbd198c13911f4f694ea930aa2aa8b19793bfcc2c346\@104.219.232.174:20042             | Very Important to Trust it, is the only liquidity provider. |
| Main Node        | "enode://333de758402827269778b4a96f675b3d207ddb4b7fdb2a60d505d7d10d5eac564a0aa2b6cded48bbbaf7328092b81eef293c182a04e302b4b0dd01285a324b60\@147.182.143.50:0?discport=30301" | Archive and Main Node.                                      |
| Second Node      | "enode://9ef27748c88e2a6f9a380765249611a52c3ffe16cd1f4ef2f27d22f33b3882401f9f81cca39f8aa1a7a76ae5d27897a526f9e0e3b9c2c7cf23db1516dec4cf32\@24.199.110.166:30304?discport=0" | Second Node = Backup                                        |
| Third Node       | "enode://dce9e3ad9ca72d84d6715918b95315bf4e85b3fad561eb82e737577f213044521d17ebd90f76952f83601979b271157ee3d7069f293309888d07f5fe7d53b555\@139.144.169.56:30304?discport=0" | RPC                                                         |
| Community Node   | "enode://f11c9200ba8fbc5a981ae8d9ffb64fe8802a1038c62fcd4b74527d69749b5644b79626703c69aa795c1dfb497add76dd5781968ede65eaa4e7d477eb4eed9038\@103.150.93.184:30303?discport=0" | Noir                                                        |
| Community Node 2 | "enode://cb385188e823a22d670a106c04ef7d0b51ddb73683986e26fe9e76a238337696d71288e9a44f87315f9a99fc259961a237feafbd6a9ff73af53fc329ebfb1df4\@103.127.97.80:30306"             | Noir Main                                                   |
| Community Node 3 | "enode://ed29ad600c0f93f590d7066cf43dde44ba1b6741d2bb0aafb19d89fe5cfb3fad2ed107bbd887629e4cf5f8205a81911eeeb68e39e171840e109672ec57a3ddf2\@143.198.88.148:30303"            | Nothing Important Node                                      |
| Community Node 4 | "enode://ed29ad600c0f93f590d7066cf43dde44ba1b6741d2bb0aafb19d89fe5cfb3fad2ed107bbd887629e4cf5f8205a81911eeeb68e39e171840e109672ec57a3ddf2\@143.198.88.148:30303"            | 何もない                                                        |

is important that each node sync each other or there will be delays.


# Install Node 2023

Node basic steps

{% file src="/files/EXRMt9jfE7OTW30JkqZ6" %}

<pre><code>// Some code
cd /usr/local

sudo su
wget https://go.dev/dl/go1.19.linux-amd64.tar.gz
tar -zxvf go1.19.linux-amd64.tar.gz
cp go /usr/local/go -R #Only if not in the path
apt-get update
apt-get install git make gcc
apt install –reinstall build-essential
IF ERROR
step 1) pico /etc/apt/sources.list
step 2) apt-get update

<strong>git clone https://github.com/treschain/TRESCLI
</strong>cd TRESCLI
export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH=$GOPATH/bin:$GOROOT/bin:$PATH
source ~/.bashrc
go version
make geth
cd /usr/local/TRESCLI/build/bin cp -r geth /usr/local/bin/
cd /usr/local
mkdir node

git clone https://github.com/treschain/Blockchain
cd Blockchain/Configuration/Genesis/Mainet
cp -r treslechesmainnet.json /usr/local/node

cd /usr/local/node

geth init treslechesmainnet.json
geth --networkid 6066 --datadir data --identity "External Miner" --bootnodes enode://333de758402827269778b4a96f675b3d207ddb4b7fdb2a60d505d7d10d5eac564a0aa2b6cded48bbbaf7328092b81eef293c182a04e302b4b0dd01285a324b60@147.182.143.50:0?discport=30301  --port 30306 --miner.threads 1 --miner.etherbase=0x000000000000000000000000000000000000dEaD --syncmode full --http --http.vhosts "*" --http.corsdomain "*" --http.port 8548 --cache 8192  --ws.port 8549 --http.api debug,net,eth,web3,txpool --ws.api "eth,net,web3,network,debug,txpool" --gcmode "archive" --authrpc.port 8550  console

type node.AdminInfo copy enode and send to node group
CTRL + D and exit the console.

sudo nano  /etc/init.d/geth
copy the following into the geth.

</code></pre>

You need to edit the ipaddress from here to match your node.

<pre><code>/usr/local/bin/geth --networkid 6066 --datadir /usr/local/node/data --identity "Main Node" --bootnodes "enode://333de758402827269778b4a96f675b3d207ddb4b7fdb2a60d505d7d10d5eac564a0aa2b6cded48bbbaf7328092b81eef293c182a04e302b4b0dd01285a324b60@147.182.143.50:0?discport=30301" --port 30303 --miner.threads 1 --miner.etherbase=0x000000000000000000000000000000000000dEaD --ipcdisable --syncmode full --http --http.vhosts "*" --http.corsdomain "*" --http.port 8545 --nodiscover --nat extip:<a data-footnote-ref href="#user-content-fn-1">147.182.143.50</a> --http.api admin,eth,net,miner,engine,txpool,web3,debug --http.addr 127.0.0.1 --ws --ws.addr <a data-footnote-ref href="#user-content-fn-1">147.182.143.50</a> --ws.port 8549 --ws.api eth,net,web3,network,debug,txpool  --ws.origins "*" --authrpc.port 8551 --authrpc.addr <a data-footnote-ref href="#user-content-fn-2">147.182.143.50</a> --rpc.gascap 80000000 --rpc.txfeecap 2 --graphql --graphql.corsdomain "*" --graphql.vhosts "*" --gpo.blocks 10 --cache 8192 --verbosity "0" --gcmode "archive" &#x26;
</code></pre>

```
#!/bin/bash
#
### BEGIN INIT INFO
# Provides:          geth
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Should-Start:      $network $named $time
# Should-Stop:       $network $named $time
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start and stop the geth daemon
# Description:       Controls the geth server daemon
### END INIT INFO
#
. /lib/lsb/init-functions
start() {
   PCOUNT=`pgrep -c geth`
   if ((PCOUNT==1)); then
      /usr/local/bin/geth --networkid 6066 --datadir /usr/local/node/data --identity "Main Node" --bootnodes "enode://333de758402827269778b4a96f675b3d207ddb4b7fdb2a60d505d7d10d5eac564a0aa2b6cded48bbbaf7328092b81eef293c182a04e302b4b0dd01285a324b60@147.182.143.50:0?discport=30301" --port 30303 --miner.threads 1 --miner.etherbase=0x000000000000000000000000000000000000dEaD --ipcdisable --syncmode full --http --http.vhosts "*" --http.corsdomain "*" --http.port 8545 --nodiscover --nat extip:147.182.143.50 --http.api admin,eth,net,miner,engine,txpool,web3,debug --http.addr 127.0.0.1 --ws --ws.addr 147.182.143.50 --ws.port 8549 --ws.api eth,net,web3,network,debug,txpool  --ws.origins "*" --authrpc.port 8551 --authrpc.addr 147.182.143.50 --rpc.gascap 80000000 --rpc.txfeecap 2 --graphql --graphql.corsdomain "*" --graphql.vhosts "*" --gpo.blocks 10 --cache 8192 --verbosity "0" --gcmode "archive" &
   fi
   echo $"Geth Started"
}
stop() {
   PCOUNT=`pgrep -c geth`
   if ((PCOUNT>1)); then
      /usr/bin/killall -9 geth &
   fi
   echo "Geth Stopped"
}
case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  status)
        status geth
        ;;
  restart|reload|condrestart)
        stop
        start
        ;;
  *)
  echo $"Usage: $0 {start|stop|restart|reload|status}"
  exit 1
esac
exit 0
 
```

Set Permissions

```
sudo chmod 755 /etc/init.d/geth
sudo chown root:root /etc/init.d/geth
```

sudo update-rc.d geth defaults&#x20;

sudo systemctl enable geth

sudo systemctl start geth

```
sudo systemctl daemon-reload
sudo systemctl status geth
sudo journalctl -u geth -f
# if netstat is not installed
sudo apt install net-tools
sudo netstat -tulpn
geth attach http://127.0.0.1:8545
```

follow the steps to secure your node.

[^1]: This need to be replaced by your ipaddress.

[^2]: update this with your ipaddress.


# Install and Configure your Node

#### Ubuntu via PPAs <a href="#ubuntu-via-ppas" id="ubuntu-via-ppas"></a>

The easiest way to install Geth on Ubuntu-based distributions is with the built-in launchpad PPAs (Personal Package Archives). A single PPA repository is provided, containing stable and development releases for Ubuntu versions `xenial`, `trusty`, `impish`, `focal`, `bionic`.

The following command enables the launchpad repository:

```
sudo add-apt-repository -y ppa:ethereum/ethereum
```

Then, to install the stable version of go-ethereum:

```
sudo apt-get update
sudo apt-get install ethereum
```

Or, alternatively the develop version:

```
sudo apt-get update
sudo apt-get install ethereum-unstable
```

These commands install the core Geth software and the following developer tools: `clef`, `devp2p`, `abigen`, `bootnode`, `evm`, `rlpdump` and `puppeth`. The binaries for each of these tools are saved in `/usr/local/bin/`. The full list of command line options can be viewed [here](https://geth.ethereum.org/docs/interface/command-line-options) or in the terminal by running `geth --help`.

Updating an existing Geth installation to the latest version can be achieved by stopping the node and running the following commands:

```
sudo apt-get update
sudo apt-get install ethereum
sudo apt-get upgrade geth
```

When the node is started again, Geth will automatically use all the data from the previous version and sync the blocks that were missed while the node was offline.

#### Windows <a href="#windows" id="windows"></a>

The easiest way to install Geth is to download a pre-compiled binary from the [downloads](https://geth.ethereum.org/downloads/) page. The page provides an installer as well as a zip file containing the Geth source code. The install wizard offers the user the option to install Geth, or Geth and the developer tools. The installer adds `geth` to the system’s `PATH` automatically. The zip file contains the command `.exe` files that can be run from the command prompt. The full list of command line options can be viewed [here](https://geth.ethereum.org/docs/interface/command-line-options) or in the terminal by running `geth --help`.

Updating an existing Geth installation can be achieved by stopping the node, downloading and installing the latest version following the instructions above. When the node is started again, Geth will automatically use all the data from the previous version and sync the blocks that were missed while the node was offline.

Download treslechesmainnet.json or treslechestestnet.json from github.

<https://github.com/3LechesCake/Blockchain/tree/main/Configuration/Genesis>

get init --datadir data treslechesmainnet.json


# Nodes

Download the miner from <https://github.com/3LechesCake/Blockchain/tree/main/Miner>

once downloaded ensure is connected to the bootnode and you should be able to mine transactions for the blockchain and earn tokens.

Create bootnode --genkey=boot.key

then create the following service.

Create Boot Node as Service

sudo nano /etc/systemd/system/bootnode.service

```
[Unit]
Description=Ethereum BNode
After=syslog.target network.target
Wants=network.target

[Service]
User=tresservice
Group=tresservice
Type=simple
ExecStart=bootnode -nodekey /usr/local/testnet/bnode/boot.key -verbosity 7 -addr 147.182.143.50:30301

KillMode=process
KillSignal=SIGINT
TimeoutStopSec=90
Restart=always
RestartSec=5s

[Install]
WantedBy=defaul.target
```

sudo systemctl enable bnode

sudo systemctl start bnode

Create Node 1 as Service

sudo nano  **/etc/init.d/geth**

```
#!/bin/bash
#
### BEGIN INIT INFO
# Provides:          geth
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Should-Start:      $network $named $time
# Should-Stop:       $network $named $time
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start and stop the geth daemon
# Description:       Controls the geth server daemon
### END INIT INFO
#
. /lib/lsb/init-functions
start() {   
   PCOUNT=`pgrep -c geth`
   if ((PCOUNT==1)); then
      /usr/bin/geth --networkid 6066 --datadir /home/blockservice/node1/data --identity "Main Node" --bootnodes enode://333de758402827269778b4a96f675b3d207ddb4b7fdb2a60d505d7d10d5eac564a0aa2b6cded48bbbaf7328092b81eef293c182a04e302b4b0dd01285a324b60@147.182.143.50:0?discport=30301 --port 30304 --miner.threads 1 --miner.etherbase=0x4f00aa38162c6f24c505c9374c7b6b4631186066 --ipcdisable --syncmode full --http --rpc.allow-unprotected-txs --http.vhosts "rpc.tresleches.finance"  --http.corsdomain "*" --http.port 8545 --nodiscover --nat extip:147.182.143.50  --http.api admin,eth,miner,net,txpool,personal,web3 --http.addr 147.182.143.50 --ws --ws.addr 147.182.143.50 --ws.port 8549 --ws.api eth,net,web3  --miner.etherbase 0xe6D74C742698D26511504FBA2261a6097d556066  --ws.origins "rpc.tresleches.finance" --rpc.gascap 80000000  --rpc.txfeecap 2  &
   fi
   echo $"Bnode Started"
}
stop() {
   PCOUNT=`pgrep -c geth`
   if ((PCOUNT>1)); then   
      /usr/bin/killall -9 geth &
   fi
   echo "Geth Stopped"
}
case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  status)
        status geth
        ;;
  restart|reload|condrestart)
        stop
        start
        ;;
  *)
  echo $"Usage: $0 {start|stop|restart|reload|status}"
  exit 1
esac
exit 0
```

Set Permissions

```
sudo chmod 755 /etc/init.d/geth
sudo chown root:root /etc/init.d/geth
```

Enable Geth Service

<pre><code><strong>sudo update-rc.d geth defaults
</strong>sudo update-rc.d geth enable
</code></pre>

if you notice your syslog increasing take a look at this.

{% embed url="<https://stackoverflow.com/questions/35638219/ubuntu-large-syslog-and-kern-log-files>" %}


# Setup a Node

## Installing Geth

Last edited on December 1, 2022

There are several ways to install Geth, including via a package manager, downloading a pre-built bundle, running as a docker container or building from downloaded source code. On this page the various installation options are explained for several major operating systems. Users prioritizing ease of installation should choose to use a package manager or prebuilt bundle. Users prioritizing customization should build from source. It is important to run the latest version of Geth because each release includes bugfixes and improvement over the previous versions. The stable releases are recommended for most users because they have been fully tested. A list of stable releases can be found [here](https://github.com/ethereum/go-ethereum/releases). Instructions for updating existing Geth installations are also provided in each section.

### Package managers <a href="#package-managers" id="package-managers"></a>

#### MacOS via Homebrew <a href="#macos-via-homebrew" id="macos-via-homebrew"></a>

The easiest way to install go-ethereum is to use the Geth Homebrew tap. The first step is to check that Homebrew is installed. The following command should return a version number.

```
brew -v
```

If a version number is returned, then Homebrew is installed. If not, Homebrew can be installed by following the instructions [here](https://brew.sh/). With Homebrew installed, the following commands add the Geth tap and install Geth:

```
brew tap ethereum/ethereum
brew install ethereum
```

The previous command installs the latest stable release. Developers that wish to install the most up-to-date version can install the Geth repository's master branch by adding the --devel parameter to the install command:

```
brew install ethereum --devel
```

These commands install the core Geth software and the following developer tools: clef, devp2p, abigen, bootnode, evm, rlpdump and puppeth. The binaries for each of these tools are saved in /usr/local/bin/. The full list of command line options can be viewed [here](https://geth.ethereum.org/docs/fundamentals/Command-Line-Options) or in the terminal by running geth --help.

Updating an existing Geth installation to the latest version can be achieved by stopping the node and running the following commands:

```
brew update
brew upgrade
brew reinstall ethereum
```

When the node is started again, Geth will automatically use all the data from the previous version and sync the blocks that were missed while the node was offline.

#### Ubuntu via PPAs <a href="#ubuntu-via-ppas" id="ubuntu-via-ppas"></a>

The easiest way to install Geth on Ubuntu-based distributions is with the built-in launchpad PPAs (Personal Package Archives). A single PPA repository is provided, containing stable and development releases for Ubuntu versions xenial, trusty, impish, focal, bionic.

The following command enables the launchpad repository:

```
sudo add-apt-repository -y ppa:ethereum/ethereum
```

Then, to install the stable version of go-ethereum:

```
sudo apt-get update
sudo apt-get install ethereum
```

Or, alternatively the develop version:

```
sudo apt-get update
sudo apt-get install ethereum-unstable
```

These commands install the core Geth software and the following developer tools: clef, devp2p, abigen, bootnode, evm, rlpdump and puppeth. The binaries for each of these tools are saved in /usr/local/bin/. The full list of command line options can be viewed [here](https://geth.ethereum.org/docs/fundamentals/Command-Line-Options) or in the terminal by running geth --help.

Updating an existing Geth installation to the latest version can be achieved by stopping the node and running the following commands:

```
sudo apt-get update
sudo apt-get install ethereum
sudo apt-get upgrade geth
```

When the node is started again, Geth will automatically use all the data from the previous version and sync the blocks that were missed while the node was offline.

#### Windows <a href="#windows" id="windows"></a>

The easiest way to install Geth is to download a pre-compiled binary from the [downloads](https://geth.ethereum.org/downloads) page. The page provides an installer as well as a zip file containing the Geth source code. The install wizard offers the user the option to install Geth, or Geth and the developer tools. The installer adds geth to the system's PATH automatically. The zip file contains the command .exe files that can be run from the command prompt. The full list of command line options can be viewed [here](https://geth.ethereum.org/docs/fundamentals/Command-Line-Options) or in the terminal by running geth --help.

Updating an existing Geth installation can be achieved by stopping the node, downloading and installing the latest version following the instructions above. When the node is started again, Geth will automatically use all the data from the previous version and sync the blocks that were missed while the node was offline.

#### FreeBSD via pkg <a href="#freebsd-via-pkg" id="freebsd-via-pkg"></a>

Geth can be installed on FreeBSD using the package manager pkg. The following command downloads and installs Geth:

```
pkg install go-ethereum
```

These commands install the core Geth software and the following developer tools: clef, devp2p, abigen, bootnode, evm, rlpdump and puppeth.

The full list of command line options can be viewed [here](https://geth.ethereum.org/docs/fundamentals/Command-Line-Options) or in the terminal by running geth --help.

Updating an existing Geth installation to the latest version can be achieved by stopping the node and running the following commands:

```
pkg upgrade
```

When the node is started again, Geth will automatically use all the data from the previous version and sync the blocks that were missed while the node was offline.

#### FreeBSD via ports <a href="#freebsd-via-ports" id="freebsd-via-ports"></a>

Installing Geth using ports, simply requires navigating to the net-p2p/go-ethereum ports directory and running make install as root:

```
cd /usr/ports/net-p2p/go-ethereum
make install
```

These commands install the core Geth software and the following developer tools: clef, devp2p, abigen, bootnode, evm, rlpdump and puppeth. The binaries for each of these tools are saved in /usr/local/bin/.

The full list of command line options can be viewed [here](https://geth.ethereum.org/docs/fundamentals/Command-Line-Options) or in the terminal by running geth --help.

Updating an existing Geth installation can be achieved by stopping the node and running the following command:

```
portsnap fetch
```

When the node is started again, Geth will automatically use all the data from the previous version and sync the blocks that were missed while the node was offline.

#### Arch Linux via pacman <a href="#arch-linux-via-pacman" id="arch-linux-via-pacman"></a>

The Geth package is available from the [community repo](https://www.archlinux.org/packages/community/x86_64/geth/). It can be installed by running:

```
pacman -S geth
```

These commands install the core Geth software and the following developer tools: clef, devp2p, abigen, bootnode, evm, rlpdump and puppeth. The binaries for each of these tools are saved in /usr/bin/.

The full list of command line options can be viewed [here](https://geth.ethereum.org/docs/fundamentals/Command-Line-Options) or in the terminal by running geth --help.

Updating an existing Geth installation can be achieved by stopping the node and running the following command:

```
sudo pacman -Sy
```

When the node is started again, Geth will automatically use all the data from the previous version and sync the blocks that were missed while the node was offline.

### Standalone bundle <a href="#standalone-bundle" id="standalone-bundle"></a>

Stable releases and development builds are provided as standalone bundles. These are useful for users who: a) wish to install a specific version of Geth (e.g., for reproducible environments); b) wish to install on machines without internet access (e.g. air-gapped computers); or c) wish to avoid automatic updates and instead prefer to manually install software.

The following standalone bundles are available:

* 32bit, 64bit, ARMv5, ARMv6, ARMv7 and ARM64 archives (.tar.gz) on Linux
* 64bit archives (.tar.gz) on macOS
* 32bit and 64bit archives (.zip) and installers (.exe) on Windows

Some archives contain only Geth, while other archives containing Geth and the various developer tools (clef, devp2p, abigen, bootnode, evm, rlpdump and puppeth). More information about these executables is available at the [README](https://github.com/ethereum/go-ethereum#executables).

The standalone bundles can be downloaded from the [Geth Downloads](https://geth.ethereum.org/downloads) page. To update an existing installation, download and manually install the latest version.

### Docker container <a href="#docker-container" id="docker-container"></a>

A Docker image with recent snapshot builds from our develop branch is maintained on DockerHub to support users who prefer to run containerized processes. There four different Docker images available for running the latest stable or development versions of Geth.

* ethereum/client-go:latest is the latest development version of Geth (default)
* ethereum/client-go:stable is the latest stable version of Geth
* ethereum/client-go:{version} is the stable version of Geth at a specific version number
* ethereum/client-go:release-{version} is the latest stable version of Geth at a specific version family

Pulling an image and starting a node is achieved by running these commands:

```
docker pull ethereum/client-go
docker run -it -p 30303:30303 ethereum/client-go
```

There are also four different Docker images for running the latest stable or development versions of miscellaneous Ethereum tools.

* ethereum/client-go:alltools-latest is the latest development version of the Ethereum tools
* ethereum/client-go:alltools-stable is the latest stable version of the Ethereum tools
* ethereum/client-go:alltools-{version} is the stable version of the Ethereum tools at a specific version number
* ethereum/client-go:alltools-release-{version} is the latest stable version of the Ethereum tools at a specific version family

The image has the following ports automatically exposed:

* 8545 TCP, used by the HTTP based JSON RPC API
* 8546 TCP, used by the WebSocket based JSON RPC API
* 8547 TCP, used by the GraphQL API
* 30303 TCP and UDP, used by the P2P protocol running the network

**Note:** if you are running an Ethereum client inside a Docker container, you should mount a data volume as the client's data directory (located at /root/.ethereum inside the container) to ensure that downloaded data is preserved between restarts and/or container life-cycles.

Updating Geth to the latest version simply requires stopping the container, pulling the latest version from Docker and running it:

```
docker stop ethereum/client-go
docker pull ethereum/client-go:latest
docker run -it -p 30303:30303 ethereum/client-go
```

### Build from source code <a href="#build-from-source" id="build-from-source"></a>

#### Most Linux systems and macOS <a href="#linux-and-macos" id="linux-and-macos"></a>

Geth is written in [Go](https://golang.org/), so building from source code requires the most recent version of Go to be installed. Instructions for installing Go are available at the [Go installation page](https://golang.org/doc/install) and necessary bundles can be downloaded from the [Go download page](https://golang.org/dl/).

With Go installed, Geth can be downloaded into a GOPATH workspace via:

```
go get -d github.com/ethereum/go-ethereum
```

You can also install specific versions via:

```
go get -d github.com/ethereum/go-ethereum@v1.9.21
```

The above commands do not build any executables. To do that you can either build one specifically:

```
go install github.com/ethereum/go-ethereum/cmd/geth
```

Alternatively, the following command, run in the project root directory (ethereum/go-ethereum) in the GO workspace, builds the entire project and installs Geth and all the developer tools:

```
go install ./...
```

For macOS users, errors related to macOS header files are usually fixed by installing XCode Command Line Tools with xcode-select --install. Another common error is: go: cannot use path\@version syntax in GOPATH mode. This and other similar errors can often be fixed by enabling gomodules using export GO111MODULE=on.

Updating an existing Geth installation can be achieved using go get:

```
go get -u github.com/ethereum/go-ethereum
```

#### Windows <a href="#windows" id="windows"></a>

The Chocolatey package manager provides an easy way to install the required build tools. Chocolatey can be installed by following these [instructions](https://chocolatey.org/). Then, to install the build tool the following commands can be run in an Administrator command prompt:

```
C:\Windows\system32> choco install git
C:\Windows\system32> choco install golang
C:\Windows\system32> choco install mingw
```

Installing these packages sets up the path environment variables. To get the new path a new command prompt must be opened. To install Geth, a Go workspace directory must first be created, then the Geth source code can be created and built.

```
C:\Users\xxx> mkdir src\github.com\ethereum
C:\Users\xxx> git clone https://github.com/ethereum/go-ethereum src\github.com\ethereum\go-ethereum
C:\Users\xxx> cd src\github.com\ethereum\go-ethereum
C:\Users\xxx\src\github.com\ethereum\go-ethereum> go get -u -v golang.org/x/net/context
C:\Users\xxx\src\github.com\ethereum\go-ethereum> go install -v ./cmd/...
```

#### FreeBSD <a href="#freebsd" id="freebsd"></a>

To build Geth from source code on FreeBSD, the Geth GitHub repository can be cloned into a local directory.

```
git clone https://github.com/ethereum/go-ethereum
```

Then, the Go compiler can be used to build Geth:

```
pkg install go
```

If the Go version currently installed is >= 1.5, Geth can be built using the following command:

```
cd go-ethereum
make geth
```

If the installed Go version is < 1.5 (quarterly packages, for example), the following command can be used instead:

```
cd go-ethereum
CC=clang make geth
```

To start the node, the followijng command can be run:

```
build/bin/geth
```

#### Building without a Go workflow <a href="#building-without-go" id="building-without-go"></a>

Geth can also be built without using Go workspaces. In this case, the repository should be cloned to a local repository. Then, the command make geth configures everything for a temporary build and cleans up afterwards. This method of building only works on UNIX-like operating systems, and a Go installation is still required.

```
git clone https://github.com/ethereum/go-ethereum.git
cd go-ethereum
make geth
```

These commands create a Geth executable file in the go-ethereum/build/bin folder that can be moved and run from another directory if required. The binary is standalone and doesn't require any additional files.

To update an existing Geth installation simply stop the node, navigate to the project root directory and pull the latest version from the Geth GitHub repository. then rebuild and restart the node.

```
cd go-ethereum
git pull
make geth
```

Additionally all the developer tools provided with Geth (clef, devp2p, abigen, bootnode, evm, rlpdump and puppeth) can be compiled by running make all. More information about these tools can be found [here](https://github.com/ethereum/go-ethereum#executables).

To build a stable release, e.g. v1.9.21, the command git checkout v1.9.21 retrieves that specific version. Executing that command before running make geth switches Geth to a stable branch.


# Add Node to Tres Leches Chain

Clone the following genesis file from our github repro.

You can clone it by running:

<pre><code>//Clone the repro
<strong>git clone https://github.com/treslecheschain/Blockchain/
</strong>
</code></pre>

{% embed url="<https://github.com/treslecheschain/Blockchain/tree/main/Configuration/Genesis>" %}

```
// Cd ~Blockchain
mkdir /usr/local/node
cp -r Configuration/Genesis/Mainet/treslechesmainnet.json /usr/local/node/treslechesmainnet.json
cd /usr/local/node
geth init --datadir data treslechesmainnet.json
cp -r ~/Blockchain/Configuration/Nodes/TrustedNodes/trusted-nodes.json /usr/local/node/data/trusted-nodes.json
cp -r ~/Blockchain/Configuration/Nodes/StaticNodes/static-nodes.json /usr/local/node/data/static-nodes.json

```

After you have configure the node, you need to run the node. We recommend the following commandline to get your node running.

```
// geth --networkid 6066 --datadir data --identity "External Miner" --bootnodes enode://333de758402827269778b4a96f675b3d207ddb4b7fdb2a60d505d7d10d5eac564a0aa2b6cded48bbbaf7328092b81eef293c182a04e302b4b0dd01285a324b60@147.182.143.50:0?discport=30301  --port 30306 --miner.threads 1 --miner.etherbase=0x000000000000000000000000000000000000dEaD --syncmode full --http --http.vhosts "*" --http.corsdomain "*" --http.port 8548 --cache 8192  --ws.port 8549 --http.api debug,net,eth,web3,txpool --ws.api "eth,net,web3,network,debug,txpool"  --authrpc.port 8550  console

```

You have now onboarded your now into our chain, to make it official create a pull request here.

{% embed url="<https://github.com/treslecheschain/Blockchain/blob/main/Configuration/Nodes/ExternalNodes/static-nodes.json>" %}
Static Nodes
{% endembed %}

Add your enode following the fomart of the json file and we will then commit and update the mainnetserver on the next maintenance cycle.


# Secure the Node

<pre><code>sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install certbot
<strong>sudo certbot certonly --standalone -d rpc-test.tresleches.finance
</strong>
</code></pre>

Install ngix <https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-ubuntu-20-04>

```
server {

listen 443 ssl;



ssl_certificate /etc/letsencrypt/live/rpc-test.tresleches.finance/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/rpc-test.tresleches.finance/privkey.pem;
ssl_session_cache shared:SSL:10m;

location / {

    proxy_pass http://rpc-test.tresleches.finance:8545; # my existing apache instance
    proxy_set_header Host $host;

    # re-write redirects to http as to https, example: /home
    proxy_redirect http:// https://;
}}
```


# Blockscout Explorer Install

## Blockscout

### Overview[​](https://wiki.polygon.technology/docs/edge/additional-features/blockscout/#overview) <a href="#overview" id="overview"></a>

This guide goes into details on how to compile and deploy Blockscout instance to work with Polygon-Edge. Blockscout has its own [documentation](https://docs.blockscout.com/for-developers/manual-deployment), but this guide focuses on simple but detailed step-by-step instructions on how to setup Blockscout instance.

### Environment[​](https://wiki.polygon.technology/docs/edge/additional-features/blockscout/#environment) <a href="#environment" id="environment"></a>

* Operating System: Ubuntu Server 20.04 LTS [download link](https://releases.ubuntu.com/20.04/) with sudo permissions
* Server Hardware: 8CPU / 16GB RAM / 50GB HDD (LVM)
* Database Server: Dedicated server with 2 CPU / 4GB RAM / 100GB SSD / PostgreSQL 13.4

#### DB Server[​](https://wiki.polygon.technology/docs/edge/additional-features/blockscout/#db-server) <a href="#db-server" id="db-server"></a>

The requirement for following this guide is to have a database server ready, database and db user configured. This guide will not go into details on how to deploy and configure PostgreSQL server. There are plenty of guides on now to do this, for example [DigitalOcean Guide](https://www.digitalocean.com/community/tutorials/how-to-install-postgresql-on-ubuntu-20-04-quickstart)

DISCLAIMER

This guide is meant only to help you to get Blockscout up and running on a single instance which is not ideal production setup.\
For production, you'll probably want to introduce reverse proxy, load balancer, scalability options, etc. into the architecture.

## Blockscout Deployment Procedure

### Part 1 - install dependencies[​](https://wiki.polygon.technology/docs/edge/additional-features/blockscout/#part-1---install-dependencies) <a href="#part-1---install-dependencies" id="part-1---install-dependencies"></a>

Before we start we need to make sure we have all the binaries installed that the blockscout is dependent on.

#### Update & upgrade system[​](https://wiki.polygon.technology/docs/edge/additional-features/blockscout/#update--upgrade-system) <a href="#update--upgrade-system" id="update--upgrade-system"></a>

```
sudo apt -y update && sudo apt -y upgrade
```

#### Add erlang repos[​](https://wiki.polygon.technology/docs/edge/additional-features/blockscout/#add-erlang-repos) <a href="#add-erlang-repos" id="add-erlang-repos"></a>

```
# go to your home dir
cd ~
# download deb
wget https://packages.erlang-solutions.com/erlang-solutions_2.0_all.deb
# download key
wget https://packages.erlang-solutions.com/ubuntu/erlang_solutions.asc
# install repo
sudo dpkg -i erlang-solutions_2.0_all.deb
# install key
sudo apt-key add erlang_solutions.asc
# remove deb
rm erlang-solutions_2.0_all.deb
# remove key
rm erlang_solutions.asc
```

#### Add NodeJS repo[​](https://wiki.polygon.technology/docs/edge/additional-features/blockscout/#add-nodejs-repo) <a href="#add-nodejs-repo" id="add-nodejs-repo"></a>

```
sudo curl -sL https://deb.nodesource.com/setup_16.x | sudo -E bash -
```

#### Install Rust[​](https://wiki.polygon.technology/docs/edge/additional-features/blockscout/#install-rust) <a href="#install-rust" id="install-rust"></a>

```
sudo curl https://sh.rustup.rs -sSf | sh -s -- -y
```

#### Install required version of Erlang[​](https://wiki.polygon.technology/docs/edge/additional-features/blockscout/#install-required-version-of-erlang) <a href="#install-required-version-of-erlang" id="install-required-version-of-erlang"></a>

```
sudo apt -y install esl-erlang=1:24.*
```

#### Install required version of Elixir[​](https://wiki.polygon.technology/docs/edge/additional-features/blockscout/#install-required-version-of-elixir) <a href="#install-required-version-of-elixir" id="install-required-version-of-elixir"></a>

The version of Elixir must be `1.13`. If we try and install this version from the official repo, the `erlang` will update to `Erlang/OTP 25` and we do not want that.\
Because of this, we need to install the specific precompiled `elixir` version from GitHub releases page.

```
cd ~
mkdir /usr/local/elixir
wget https://github.com/elixir-lang/elixir/releases/download/v1.13.4/Precompiled.zip
sudo unzip -d /usr/local/elixir/Precompiled.zip
rm Precompiled.zip
```

Now we need to properly set up `exlixir` system binaries.

```
sudo ln -s /usr/local/elixir/bin/elixir /usr/local/bin/elixir
sudo ln -s /usr/local/elixir/bin/mix /usr/local/bin/mix
sudo ln -s /usr/local/elixir/bin/iex /usr/local/bin/iex
sudo ln -s /usr/local/elixir/bin/elixirc /usr/local/bin/elixirc
```

Check if `elixir` and `erlang` are properly installed by running `elixir -v`. This should be the output:

```
Erlang/OTP 24 [erts-12.3.1] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] [jit]Elixir 1.13.4 (compiled with Erlang/OTP 22)
```

DANGER

`Erlang/OTP` must be version `24` and `Elixir` must be version `1.13.*`.\
If that is not the case, you will run into issues with compiling Blockscout and/or running it.

INFO

Check out the official [***Blockscout requirements page***](https://docs.blockscout.com/for-developers/information-and-settings/requirements)

#### Install NodeJS[​](https://wiki.polygon.technology/docs/edge/additional-features/blockscout/#install-nodejs) <a href="#install-nodejs" id="install-nodejs"></a>

```
sudo apt -y install nodejs
```

#### Install Cargo[​](https://wiki.polygon.technology/docs/edge/additional-features/blockscout/#install-cargo) <a href="#install-cargo" id="install-cargo"></a>

```
sudo apt -y install cargo
```

#### Install other dependencies[​](https://wiki.polygon.technology/docs/edge/additional-features/blockscout/#install-other-dependencies) <a href="#install-other-dependencies" id="install-other-dependencies"></a>

```
sudo apt -y install automake libtool inotify-tools gcc libgmp-dev make g++ git
```

#### Optionally install postgresql client to check your db connection[​](https://wiki.polygon.technology/docs/edge/additional-features/blockscout/#optionally-install-postgresql-client-to-check-your-db-connection) <a href="#optionally-install-postgresql-client-to-check-your-db-connection" id="optionally-install-postgresql-client-to-check-your-db-connection"></a>

```
sudo apt install -y postgresql-client
```

### Part 2 - set environment variables[​](https://wiki.polygon.technology/docs/edge/additional-features/blockscout/#part-2---set-environment-variables) <a href="#part-2---set-environment-variables" id="part-2---set-environment-variables"></a>

We need to set the environment variables, before we begin with Blockscout compilation. In this guide we'll set only the basic minimum to get it working. Full list of variables that can be set you can find [here](https://docs.blockscout.com/for-developers/information-and-settings/env-variables)

#### Set database connection as environment variable[​](https://wiki.polygon.technology/docs/edge/additional-features/blockscout/#set-database-connection-as-environment-variable) <a href="#set-database-connection-as-environment-variable" id="set-database-connection-as-environment-variable"></a>

```
# postgresql connection example:  DATABASE_URL=postgresql://blockscout:Passw0Rd@db.instance.local:5432/blockscoutexport DATABASE_URL=postgresql://<db_user>:<db_pass>@<db_host>:<db_port>/<db_name> # db_name does not have to be existing database# we set these env vars to test the db connection with psqlexport PGPASSWORD=Passw0Rdexport PGUSER=blockscoutexport PGHOST=db.instance.localexport PGDATABASE=postgres # on AWS RDS postgres database is always created
```

Now test your DB connection with provided parameters. Since you've provided PG env vars, you should be able to connect to the database only by running:

```
psql
```

If the database is configured correctly, you should see a psql prompt:

```
psql (12.9 (Ubuntu 12.9-0ubuntu0.20.04.1))SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)Type "help" for help.blockscout=>
```

Otherwise, you might see an error like this:

```
psql: error: FATAL:  password authentication failed for user "blockscout"FATAL:  password authentication failed for user "blockscout"
```

If this is the case [these docs](https://ubuntu.com/server/docs/databases-postgresql) might help you.

DB CONNECTION

Make sure you've sorted out all db connection issues before proceeding to the next part. You'll need to provide superuser privileges to blockscout user.

```
postgres@ubuntu:~$ createuser --interactiveEnter name of role to add: blockscoutShall the new role be a superuser? (y/n) y
```

### Part 3 - clone and compile Blockscout[​](https://wiki.polygon.technology/docs/edge/additional-features/blockscout/#part-3---clone-and-compile-blockscout) <a href="#part-3---clone-and-compile-blockscout" id="part-3---clone-and-compile-blockscout"></a>

Now we finally get to start the Blockscout installation.

#### Clone Blockscout repo[​](https://wiki.polygon.technology/docs/edge/additional-features/blockscout/#clone-blockscout-repo) <a href="#clone-blockscout-repo" id="clone-blockscout-repo"></a>

```
cd ~ 
git clone https://github.com/3LechesCake/blockscout
```

#### Generate secret key base to protect production build[​](https://wiki.polygon.technology/docs/edge/additional-features/blockscout/#generate-secret-key-base-to-protect-production-build) <a href="#generate-secret-key-base-to-protect-production-build" id="generate-secret-key-base-to-protect-production-build"></a>

```
cd blockscout; 
mix deps.get 
mix local.rebar --force 
mix phx.gen.secret
```

At the very last line, you should see a long string of random characters.\
This should be set as your `SECRET_KEY_BASE` environment variable, before the next step.\
For example:

```
export SECRET_KEY_BASE="912X3UlQ9p9yFEBD0JU+g27v43HLAYl38nQzJGvnQsir2pMlcGYtSeRY0sSdLkV/"
```

#### Set production mode[​](https://wiki.polygon.technology/docs/edge/additional-features/blockscout/#set-production-mode) <a href="#set-production-mode" id="set-production-mode"></a>

```
export MIX_ENV=prod
```

#### Compile[​](https://wiki.polygon.technology/docs/edge/additional-features/blockscout/#compile) <a href="#compile" id="compile"></a>

Cd into clone directory and start compiling

```
cd blockcout 
mix local.hex --force 
mix do deps.get, local.rebar --force, deps.compile, compile
```

INFO

If you have deployed previously, remove static assets from the previous build ***mix phx.digest.clean***.

#### Migrate databases[​](https://wiki.polygon.technology/docs/edge/additional-features/blockscout/#migrate-databases) <a href="#migrate-databases" id="migrate-databases"></a>

INFO

This part will fail if you didn't set up your DB connection properly, you didn't provide, or you've defined wrong parameters at DATABASE\_URL environment variable. The database user needs to have superuser privileges.

```
mix do ecto.create, ecto.migrate
```

If you need to drop the database first, run

```
mix do ecto.drop, ecto.create, ecto.migrate
```

#### Install npm dependencies and compile frontend assets[​](https://wiki.polygon.technology/docs/edge/additional-features/blockscout/#install-npm-dependencies-and-compile-frontend-assets) <a href="#install-npm-dependencies-and-compile-frontend-assets" id="install-npm-dependencies-and-compile-frontend-assets"></a>

You need to change directory to the folder which contains frontend assets.

```
cd apps/block_scout_web/assets 
sudo npm install 
sudo node_modules/webpack/bin/webpack.js --mode production
```

BE PATIENT

Compilation of these assets can take a few minutes, and it will display no output. It can look like the process is stuck, but just be patient. When compile process is finished, it should output something like: `webpack 5.69.1 compiled with 3 warnings in 104942 ms`

#### Build static assets[​](https://wiki.polygon.technology/docs/edge/additional-features/blockscout/#build-static-assets) <a href="#build-static-assets" id="build-static-assets"></a>

For this step you need to return to the root of your Blockscout clone folder.

```
cd ~/blockscout/apps/block_scout_web/
sudo mix phx.digest
```

#### Generate self-signed certificates[​](https://wiki.polygon.technology/docs/edge/additional-features/blockscout/#generate-self-signed-certificates) <a href="#generate-self-signed-certificates" id="generate-self-signed-certificates"></a>

INFO

You can skip this step if you won't use `https`.

```
cd apps/block_scout_web 
mix phx.gen.cert blockscout blockscout.local
```

The above command will generate and enable self-signed ssl certs, you need to replace them with real ones. You may use [certbot (opens new window)](https://certbot.eff.org/instructions)(letsencrypt) to do it, don't forget to set user permissions and configure the file: `/path/to/blockscout/config/dev.exs`, see example below:

```
\$  nano /path/to/blockscout/config/dev.exs
...
config :block_scout_web, BlockScoutWeb.Endpoint,
  http: [port: 4000],
  https: [
    port: 4001,
    cipher_suite: :strong,
    certfile: "priv/cert/cert.pem",
    keyfile: "priv/cert/privkey.pem"
  ]
...
```

If using certbot, add cert renewal to crontab

* Add blockscout and blockscout.local to your `/etc/hosts`

```
   127.0.0.1       localhost blockscout blockscout.local

   255.255.255.255 broadcasthost

   ::1             localhost blockscout blockscout.local
```

{% hint style="info" %}
If using Chrome, Enable `chrome://flags/#allow-insecure-localhost`
{% endhint %}

### Part 4 - create and run Blockscout service[​](https://wiki.polygon.technology/docs/edge/additional-features/blockscout/#part-4---create-and-run-blockscout-service) <a href="#part-4---create-and-run-blockscout-service" id="part-4---create-and-run-blockscout-service"></a>

In this part we need to set up a system service as we want Blockscout to run in the background and persist after system reboot.

#### Create service file[​](https://wiki.polygon.technology/docs/edge/additional-features/blockscout/#create-service-file) <a href="#create-service-file" id="create-service-file"></a>

```
sudo touch /etc/systemd/system/explorer.service
```

#### Edit service file[​](https://wiki.polygon.technology/docs/edge/additional-features/blockscout/#edit-service-file) <a href="#edit-service-file" id="edit-service-file"></a>

Use your favorite linux text editor to edit this file and configure the service.

```
sudo vi /etc/systemd/system/explorer.service
```

The contents of the explorer.service file should look like this:

```
[Unit]
Description=Blockscout Server
After=network.target
StartLimitIntervalSec=0
[Service]
Type=simple
Restart=always
RestartSec=1
User=root
StandardOutput=syslog
StandardError=syslog
WorkingDirectory=/usr/local/blockscout
ExecStart=/usr/local/bin/mix phx.server
EnvironmentFile=/usr/local/blockscout/env_vars.env
[Install]
WantedBy=multi-user.target
```

#### Enable starting service on system boot[​](https://wiki.polygon.technology/docs/edge/additional-features/blockscout/#enable-starting-service-on-system-boot) <a href="#enable-starting-service-on-system-boot" id="enable-starting-service-on-system-boot"></a>

```
sudo systemctl daemon-reload
sudo systemctl enable explorer.service
```

#### Move your Blockscout clone folder to system-wide location[​](https://wiki.polygon.technology/docs/edge/additional-features/blockscout/#move-your-blockscout-clone-folder-to-system-wide-location) <a href="#move-your-blockscout-clone-folder-to-system-wide-location" id="move-your-blockscout-clone-folder-to-system-wide-location"></a>

Blockscout service needs to have access to the folder you've cloned from Blockscout repo and compiled all the assets.

```
sudo mv ~/blockscout /usr/local
```

#### Create env vars file which will be used by Blockscout service[​](https://wiki.polygon.technology/docs/edge/additional-features/blockscout/#create-env-vars-file-which-will-be-used-by-blockscout-service) <a href="#create-env-vars-file-which-will-be-used-by-blockscout-service" id="create-env-vars-file-which-will-be-used-by-blockscout-service"></a>

```
sudo touch /usr/local/blockscout/env_vars.env
# use your favorite text editor
sudo vi /usr/local/blockscout/env_vars.env
```

{% code overflow="wrap" %}

```
# env_vars.env file should hold these values ( adjusted for your environment )
ETHEREUM_JSONRPC_HTTP_URL="localhost:8545"  
# json-rpc API of the chain
ETHEREUM_JSONRPC_TRACE_URL="localhost:8545" 
# same as json-rpc API 
DATABASE_URL='postgresql://blockscout:Passw0Rd@db.instance.local:5432/blockscout' 
# database connection from Step 2
SECRET_KEY_BASE="912X3UlQ9p9yFEBD0JU+g27v43HLAYl38nQzJGvnQsir2pMlcGYtSeRY0sSdLkV/" 
# secret key base ETHEREUM_JSONRPC_WS_URL="ws://localhost:8545/ws" 
# websocket API of the chainCHAIN_ID=93201 
# chain idHEART_COMMAND="systemctl restart explorer" 
# command used by blockscout to restart it self in case of failure
SUBNETWORK="Supertestnet POA"
# this will be in html title
LOGO="/images/polygon_edge_logo.svg" 
# logo location
LOGO_FOOTER="/images/polygon_edge_logo.svg" 
# footer logo location
COIN="EDGE" # coin
COIN_NAME="EDGE Coin" # name of the coin
INDEXER_DISABLE_BLOCK_REWARD_FETCHER="true" 
# disable block reward indexer as Polygon Edge doesn't support tracing
INDEXER_DISABLE_PENDING_TRANSACTIONS_FETCHER="true"
# disable pending transactions indexer as Polygon Edge doesn't support tracing
INDEXER_DISABLE_INTERNAL_TRANSACTIONS_FETCHER="true" 
# disable internal transactions indexer as Polygon Edge doesn't support tracing
MIX_ENV="prod" # run in production mode
BLOCKSCOUT_PROTOCOL="http" # protocol to run blockscout web service on
PORT=4000 # port to run blockscout service on
DISABLE_EXCHANGE_RATES="true" # disable fetching of exchange rates
POOL_SIZE=200 
# the number of database connections
POOL_SIZE_API=300 
# the number of read-only database connections
ECTO_USE_SSL="false" 
# if protocol is set to http this should be false 
HEART_BEAT_TIMEOUT=60 
# run HEARTH_COMMAND if heartbeat missing for this amount of seconds
INDEXER_MEMORY_LIMIT="10Gb" 
# soft memory limit for indexer - depending on the size of the chain and the amount of RAM the server has
FETCH_REWARDS_WAY="manual" 
# disable trace_block query 
INDEXER_EMPTY_BLOCKS_SANITIZER_BATCH_SIZE=1000 
# sanitize empty block in this batch size
```

{% endcode %}

INFO

Use `SECRET_KEY_BASE` you've generated in Part 3.

Save the file and exit.

#### Finally, start Blockscout service[​](https://wiki.polygon.technology/docs/edge/additional-features/blockscout/#finally-start-blockscout-service) <a href="#finally-start-blockscout-service" id="finally-start-blockscout-service"></a>

```
sudo systemctl start explorer.service
```

### Part 5 - test out the functionality of your Blockscout instance[​](https://wiki.polygon.technology/docs/edge/additional-features/blockscout/#part-5---test-out-the-functionality-of-your-blockscout-instance) <a href="#part-5---test-out-the-functionality-of-your-blockscout-instance" id="part-5---test-out-the-functionality-of-your-blockscout-instance"></a>

Now all that's left to do is to check if Blockscout service is running. Check service status with:

```
sudo systemctl status explorer.service
```

To check service output:

```
sudo journalctl -u explorer.service -f
```

You can check if there are some new listening ports:

```
# if netstat is not installed
sudo apt install net-tools
sudo netstat -tulpn
```

You should get a list of listening ports and on the list there should be something like this:

```
tcp        0      0 0.0.0.0:5432            0.0.0.0:*               LISTEN      28142/postgrestcp        0      0 0.0.0.0:4000            0.0.0.0:*               LISTEN      42148/beam.smp
```

Blockscout web service runs the port and protocol defined in env file. In this example it runs on `4000`(http).\
If everything is ok, you should be able to access the Blockscout web portal with `http://<host_ip>:4000`.

### Considerations[​](https://wiki.polygon.technology/docs/edge/additional-features/blockscout/#considerations) <a href="#considerations" id="considerations"></a>

For best performance, it is advisable to have a dedicated/local `polygon-edge` full archive non-validator node that will be used exclusively for Blockscout queries.\
The `json-rpc` API of this node, doesn't need to be exposed publicly, as Blockscout runs all queries from the backend.

### Final thoughts[​](https://wiki.polygon.technology/docs/edge/additional-features/blockscout/#final-thoughts) <a href="#final-thoughts" id="final-thoughts"></a>

We've just deployed a single Blockscout instance, which works fine, but for production you should consider placing this instance behind a reverse proxy like Nginx. You should also think about database and instance scalability, depending on your use case.

You should definitely check out the official [Blockscout documentation](https://docs.blockscout.com/) as there a lot of customisation options.


# Smart Contract Verification

Smart Contract VerificationDetails about the verification microserviceA microservice written in Rust provides fast and efficient contract verification. The application runs as an HTTP server and verification requests are made using REST API.

* ​[Basic Info](https://docs.blockscout.com/for-developers/information-and-settings/smart-contract-verification#basic-info)​
* ​[Library Initialization](https://docs.blockscout.com/for-developers/information-and-settings/smart-contract-verification#library-initialization)​
* ​[Solidity and Vyper Verfication](https://docs.blockscout.com/for-developers/information-and-settings/smart-contract-verification#solidity-and-vyper-verification)​
* ​[Sourcify Verification](https://docs.blockscout.com/for-developers/information-and-settings/smart-contract-verification#sourcify-verification)​
* ​[Verification Algorithm](https://docs.blockscout.com/for-developers/information-and-settings/smart-contract-verification#verification-algorithm)​
* ​[Http API](https://docs.blockscout.com/for-developers/information-and-settings/smart-contract-verification#verification-http-api)​

## Basic Info <a href="#basic-info" id="basic-info"></a>

### **Location** <a href="#location" id="location"></a>

* Application: <https://github.com/blockscout/blockscout-rs/tree/main/smart-contract-verifier>​
* Http API: <https://github.com/blockscout/blockscout-rs/tree/main/smart-contract-verifier-http>​

In order to succesffully intall and configure the servie docker and docker compose are needed.

{% embed url="<https://linuxhostsupport.com/blog/how-to-install-and-configure-docker-compose-on-ubuntu-20-04/>" %}

Service Configuration

```

[Unit]
Description=smart-contract-verifier-http
Requires=docker.service
After=docker.service

[Service]
Restart=10
User=root
Group=docker
WorkingDirectory=/usr/local/blockscout-rs/smart-contract-verifier-http
# Shutdown container (if running) when unit is started
ExecStartPre=/usr/bin/docker-compose -f docker-compose.yaml down
# Start container when unit is started
ExecStart=/usr/bin/docker-compose -f /usr/local/blockscout-rs/smart-contract-verifier-http/docker-compose.yaml up
# Stop container when unit is stopped
ExecStop=/usr/bin/docker-compose -f docker-compose.yaml down

[Install]
WantedBy=multi-user.target


```

### **Activation** <a href="#activation" id="activation"></a>

* Update Blockscout to the 4.1.8 release
* Add the following ENV variables:
  * `ENABLE_RUST_VERIFICATION_SERVICE=true`
  * `RUST_VERIFICATION_SERVICE_URL=...` (verifier endpoint, see [http configuration](https://github.com/blockscout/blockscout-rs/tree/main/smart-contract-verifier-http) for more details)
* If running locally, the smart-contract-verifier is integrated with [`docker-compose`](https://github.com/blockscout/blockscout/tree/master/docker-compose)`​`

### Architecture <a href="#architecture" id="architecture"></a>

The service consists of 2 parts, a verification library and a transport layer that serves requests.

* **Verification Library**: Provides verification and a communication interface for verification functions. Includes modules for Solidity, Sourcify, and Vyper.
* **Transport Layer**: Verification requests are sent via HTTP.

### Benefits <a href="#benefits" id="benefits"></a>

We've seen a 10X improvement in verification speed over the previous implementation. Benefits of the new microservice include:

* **Scalability**: Remove CPU intensive tasks from the primary Blockscout instance. Modularity provides the ability to scale quickly.
* **Speed**: Using native compilers greatly increases compilation speed relative to the JS wrapped versions running on Node.js used previously.
* **Improved efficiency**. New algorithm supports contracts that contain several metadata hashes, improving efficiency.

## Library Initialization <a href="#library-initialization" id="library-initialization"></a>

On startup, the library must retrieve all available compilers. Compiler information consists of a link to download the compiler and its hashsum \[[example](https://github.com/blockscout/solc-bin/blob/main/list.json)]. A separate thread also starts during initialization to update this list periodically.Library processes differ based on verification for Solidity/Vyper contracts or verification via Sourcify. Both are detailed below.

## Solidity and Vyper Verification <a href="#solidity-and-vyper-verification" id="solidity-and-vyper-verification"></a>

Verification processes are similar for contracts written in Solidity and Vyper.For Solidity contracts, verification is available for multiple files or standard json input. Single file verification is also possible - users still verify via the multiple file method and only upload a single file.For Vyper contracts, only multiple file verification is available.

### Request Values <a href="#request-values" id="request-values"></a>

Each request contains the following values:

* **Deployed bytecode**: bytecode of the contract stored on chain
* **Creation transaction (tx) input**: input data provided in transaction to create the contract
* **Compiler version**: Version of compiler used to compile the contract
* **Content**: Verification method related fields. E.g. for Solidity multiple files those fields are:
  * **Sources**: mapping from source files to their contents
  * **Evm version**: version of the EVM used to compile sources
  * **Optimization runs**: optional parameter that enables optimizations and specifies number of optimization runs
  * **Contract libraries**: optional parameter that specifies addresses of the contract libraries used in compiled contracts

### Verification Steps <a href="#verification-steps" id="verification-steps"></a>

1. 1.**Download the compiler** using the specified compiler version from the url retrieved on [initialization](https://docs.blockscout.com/for-developers/information-and-settings/smart-contract-verification#initialization) (or update).
2. 2.**Compilation**: compile using the provided and slightly modified (see [Verification Algorithm](https://docs.blockscout.com/for-developers/information-and-settings/smart-contract-verification#verification-algorithm) section) sources.
3. 3.**Verification**: compare compiler output from step 2 with bytecodes (deployed bytecode and creation tx input) provided by the caller. During verification all contracts obtained through local compilation are checked one by one, and if any corresponds to provided bytecodes, the verification is considered successful. Contract paths and names are already indexed from available contracts, and constructor arguments are extracted.
4. 4.**Return Values**: See below.

### Returned Values <a href="#returned-values" id="returned-values"></a>

As a result of successful verification the following struct is returned:

* **Compiler input**: Data used as an input for the compiler
* **Compiler version**: version of the compiler used in verification (corresponds the the version provided in request)
* **File path**: path of the file containing verified contract
* **Contract name**: name of the verified contract
* **Abi**: application binary interface of the verified contract (<https://docs.soliditylang.org/en/v0.8.13/abi-spec.html?highlight=abi>)
* **Constructor arguments**: optionally returned constructor arguments used during on chain creation of the contract.

In case of an error, enum is returned with the corresponding error and its description (e.g. if compilation failed, a Compilation error is returned with the error data obtained from the compiler).

## Sourcify Verification <a href="#sourcify-verification" id="sourcify-verification"></a>

The request is sent via proxy to the [Sourcify](https://sourcify.dev/) service. It accepts the following arguments:

1. 1.Address of the contract to be verified.
2. 2.Chain id where the contract is deployed.
3. 3.Files required for Sourcify verification.
4. 4.(optionally)Contract index, if the provided files contain multiple metadata files (i.e. multiple contracts).

These arguments are sent to the Sourcify Api, which returns the verification status.

### **Successful Verification** <a href="#successful-verification" id="successful-verification"></a>

Either the data provided was valid and the contract was verified by Sourcify, or the contract was previously verified. To obtain the actual data used for verification we send another request to retrieve source files used in verification. We expect data used for verification to be in the `metadata.json` file, so it is parsed and the information retrieved. This includes file and contract names, compiler and evm versions, info about optimizations, contract libraries, abi, and sources.**Note**: Constructor arguments cannot currently be obtained from the metadata via Sourcify. This requires the input used for contract creation transaction and the bytecode resulting from local compilation, which are not provided.

### Failed Verification <a href="#failed-verification" id="failed-verification"></a>

If verification fails we return an error with description obtained from Sourcify response

## Verification Algorithm <a href="#verification-algorithm" id="verification-algorithm"></a>

Verification is divided into 2 parts to effectively deal with metadata hash differences in contracts. Often, very similar contracts will have very different metadata hashes based on small changes within the contract (ie an extra space in the source code). To address this, the algorithm:

1. 1.Extracts all metadata hash fields from c*reationTxInput*.
2. 2.Compares non-metadata sections of the onchain bytecode with the results of local compilation.

Metadata hashes are extracted by compiling the same contract twice (with a slight modification to the 2nd contract that does not change any other aspect of the resultant bytecode). The resulting c*reationTxInput*s are compared and metadata hashes extracted by finding which parts of the inputs differ.

### Example <a href="#example" id="example"></a>

An additional space in the source code can be used for the modification process. In **Example 1** and **Example 2** the only difference between both contracts is a space in the beginning of **Example 2**. However, this still completely changes the metadata hash (metadata hash differences shown in **bold red**).**Note**: To update the metadata hash in production we use an additional library passed into the compiler. It does not effect the resultant bytecode, but the compilation input is altered, leading to updated metadata and an updated metadata hash.

#### Example 1 <a href="#example-1" id="example-1"></a>

// pragma solidity ^0.8.7; contract Main {}*creationTxInput:* 6080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea264697066735822**12203cc19b771ee83d8cc6995191bd9092a82f3e66b95aacaf1cfc893d3dc27abcd2**64736f6c63430008070033

#### Example 2 <a href="#example-2" id="example-2"></a>

// pragma solidity ^0.8.7; contract Main {}*creationTxInput:* 6080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea264697066735822**1220b3902f5797f05bb62858c8d41f09402093c85957c4ae1d773e4eb1cb2000f093**64736f6c63430008070033

### Verification Process <a href="#verification-process" id="verification-process"></a>

1. 1.Compile the original contracts using data provided by the caller then compile those contracts again while passing in the additional library. The result is two slightly different `CreationTxInputs` if there is any encoded metadata.
2. 2.Separate the `MainPart` and the `MetadataPart`.
   1. 1.`MainPart` consists of consecutive bytes which are not related to the metadata hash (all bytes are the same for both local c*reationTxInputs*). `MetadataPart` consists of consecutive bytes related to metadata hash (some bytes differ between local c*reationTxInputs*).
3. 3.Iterate through the two local contracts byte by byte to find the first byte that differs.
   1. 1.If there are no such bytes, then there is no metadata hash and the whole *creationTxInput* consists of just one `MainPart`.
   2. 2.If any differences are found, identify it as a hash section of the metadata hash.
   3. 3.Iterate back byte by byte to find the beginning of that metadata hash. When we find the beginning we know where that metadata hash starts and ends. All non-categorized bytes before the start are identified as the `MainPart` and bytes between the start and end identified as the `MetadataPart`. Continue until there are no uncategorized bytes.
   4. 4.Once the entire local *creationTxInput* is categorized, we compare those parts with the corresponding remote *creationTxInput* bytes. For the `MainPart` remote *creationTxInput* must have exact equivalence. For the `MetadataPart` we compare some parts of the metadata (e.g. that encoded solc versions are the same), but in general we do not require them to be equal.

**Example*****LocalCreationTxInput1:*** 608060405234801561001057600080fd5b506040518060200161002190610050565b6020820181038252601f19601f820116604052506000908051906020019061004a92919061005c565b5061015f565b605c806101ac83390190565b8280546100689061012e565b90600052602060002090601f01602090048101928261008a57600085556100d1565b82601f106100a357805160ff19168380011785556100d1565b828001600101855582156100d1579182015b828111156100d05782518255916020019190600101906100b5565b5b5090506100de91906100e2565b5090565b5b808211156100fb5760008160009055506001016100e3565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061014657607f821691505b602082108103610159576101586100ff565b5b50919050565b603f8061016d6000396000f3fe6080604052600080fdfea2646970667358221220187a584947e37ebca43172929f7e159fe28696b0edd97bbfad5b0a265f6f886964736f6c634300080e00336080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea2646970667358221220805aa9fe4ec055702024afa5ac21c2104f0b14be0ffab086f0d6e9b5701073f864736f6c634300080e0033**Parts 1:** \[ MainPart(608060405234801561001057600080fd5b506040518060200161002190610050565b6020820181038252601f19601f820116604052506000908051906020019061004a92919061005c565b5061015f565b605c806101ac83390190565b8280546100689061012e565b90600052602060002090601f01602090048101928261008a57600085556100d1565b82601f106100a357805160ff19168380011785556100d1565b828001600101855582156100d1579182015b828111156100d05782518255916020019190600101906100b5565b5b5090506100de91906100e2565b5090565b5b808211156100fb5760008160009055506001016100e3565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061014657607f821691505b602082108103610159576101586100ff565b5b50919050565b603f8061016d6000396000f3fe6080604052600080fdfe), MetadataPart(a264697066735822**1220187a584947e37ebca43172929f7e159fe28696b0edd97bbfad5b0a265f6f8869**64736f6c634300080e0033), MainPart(6080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfe), MetadataPart(a264697066735822**1220805aa9fe4ec055702024afa5ac21c2104f0b14be0ffab086f0d6e9b5701073f8**64736f6c634300080e0033) ]&#x200B;***LocalCreationTxInput2:*** 608060405234801561001057600080fd5b506040518060200161002190610050565b6020820181038252601f19601f820116604052506000908051906020019061004a92919061005c565b5061015f565b605c806101ac83390190565b8280546100689061012e565b90600052602060002090601f01602090048101928261008a57600085556100d1565b82601f106100a357805160ff19168380011785556100d1565b828001600101855582156100d1579182015b828111156100d05782518255916020019190600101906100b5565b5b5090506100de91906100e2565b5090565b5b808211156100fb5760008160009055506001016100e3565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061014657607f821691505b602082108103610159576101586100ff565b5b50919050565b603f8061016d6000396000f3fe6080604052600080fdfea26469706673582212202e82fb6222f966f0e56dc49cd1fb8a6b5eac9bdf74f62b8a5e9d8812901095d664736f6c634300080e00336080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea2646970667358221220bd9f7fd5fb164e10dd86ccc9880d27a177e74ba873e6a9b97b6c4d7062b26ff064736f6c634300080e0033​**Parts 2:**\[ MainPart(608060405234801561001057600080fd5b506040518060200161002190610050565b6020820181038252601f19601f820116604052506000908051906020019061004a92919061005c565b5061015f565b605c806101ac83390190565b8280546100689061012e565b90600052602060002090601f01602090048101928261008a57600085556100d1565b82601f106100a357805160ff19168380011785556100d1565b828001600101855582156100d1579182015b828111156100d05782518255916020019190600101906100b5565b5b5090506100de91906100e2565b5090565b5b808211156100fb5760008160009055506001016100e3565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061014657607f821691505b602082108103610159576101586100ff565b5b50919050565b603f8061016d6000396000f3fe6080604052600080fdfe),MetadataPart(a264697066735822**12202e82fb6222f966f0e56dc49cd1fb8a6b5eac9bdf74f62b8a5e9d8812901095d6**64736f6c634300080e0033),MainPart(6080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfe),MetadataPart(a264697066735822**1220bd9f7fd5fb164e10dd86ccc9880d27a177e74ba873e6a9b97b6c4d7062b26ff0**64736f6c634300080e0033)]

#### Constructor arguments <a href="#constructor-arguments" id="constructor-arguments"></a>

Constructor arguments are extracted at the end of the verification process. Constructor arguments are appended at the end of the *creationTxInput* returned by the compiler. So, to extract these arguments we remove parts presented in local *creationTxInput*, and consider everything else as likely constructor arguments.After that we attempt to map potential constructor args to the constructor abi of the contract. If successful, extracted args are returned as actual constructor arguments.

## Verification Http Api <a href="#verification-http-api" id="verification-http-api"></a>

Currently, verification requests are sent via HTTP requests. This module runs an HTTP server and provides endpoints through which external services (main Blockscout instance, in our case) send verification requests and receive responses. Endpoints provided by the service and configuration details are described in the [corresponding Readme file](https://github.com/blockscout/blockscout-rs/tree/main/smart-contract-verifier-http).Currently only synchronous endpoints are available. In the future a new service that handles asynchronous requests on top of the current smart-contract-verifier may be implemented.


# Testnet Configuration

RPC: <https://rpc-test.tresleches.finance>

Explorer: <https://treschain.co>

Faucet: <http://faucet.treschain.co>

Faucet configuration using:

{% embed url="<https://github.com/3LechesCake/eth-faucet>" %}

**Testnet Contracts:**


# Validator Rewards

The check the current potential earnings, take a look at the following.

{% embed url="<https://treschain.io/address/0x4C5892Bc6df5550c5Ad42c2a82Fe9f64575B1ADE/validations#address-tabs>" %}


# NFT

Our NFT minter can be found on <https://mftminterbsc.tresleches.finance> and <https://nftminterpoly.tresleches.finance>.


# Owner's(archived)

Our owners NFT is limited to the first 500 people that ever bough our token.

{% embed url="<https://bscscan.com/token/0xca76f5e6c9469dba1cc15414b6402d1b66867da0>" %}


# Desert Rolodex Collection(archived)

Our Desert Rolodex NFT Limited Collection can be found [at https://bscscan.com/token/0x0cFdB195a36bb0ce7D5fEFcCBa4BaE11D4B0D1d3](https://bscscan.com/token/0x0cFdB195a36bb0ce7D5fEFcCBa4BaE11D4B0D1d3)

You still have time to mint our NFT.


# Team

Our team is composed of mainly the community, however, there are a few members of the community that has proven to be the leads of the projects over this past year.

Blade our blockchain developer has over 25 years of experience in the field and has developed many successful projects. This project is just a way for him to give back using his skillset.

Contact: <admin@treschain.com>

NHIO our web developer is always working hard on building his skillset and has proven to be one of the best web developers out there.

Contact: <webdev@treschain.com>

You can find them on our Telegram Group, always active, and always moving forward with their goals.

They are our Master Chef.


# Token Audit

<https://github.com/AegisX-io/TresChain/blob/main/20230119_AegisX_TresChain_Token_Palladium_Audit.pdf>


# Wrapped Token

We have conducted an Audit of our Wrapped Token with Certik.

{% embed url="<https://www.certik.com/projects/tres-chain>" %}


