From 5de7e7bc01e3d2e9c9e98b1a49c673d7cd0976a3 Mon Sep 17 00:00:00 2001 From: Salomon Morales Date: Wed, 16 Nov 2022 15:16:38 +0000 Subject: [PATCH 001/115] GitBook: [#135] No subject --- run-a-node/masternode/full-node.md | 32 +++++++++++++++--------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/run-a-node/masternode/full-node.md b/run-a-node/masternode/full-node.md index f7b6124e..8a254779 100644 --- a/run-a-node/masternode/full-node.md +++ b/run-a-node/masternode/full-node.md @@ -17,7 +17,7 @@ Follow the written steps starting from step 1, or you can watch the video tutori Clone repository ``` -// git clone https://github.com/XinFinOrg/XinFin-Node.git +git clone https://github.com/XinFinOrg/XinFin-Node.git ``` ## Step 2 @@ -25,7 +25,7 @@ Clone repository Then we change the directory to XinFin-Node ``` -// cd XinFin-Node +cd XinFin-Node ``` @@ -35,7 +35,7 @@ Then we change the directory to XinFin-Node We need to install Docker and Docker-Compose by running the following command: ``` -// sudo ./setup/install_docker.sh +sudo ./setup/install_docker.sh ``` ## Step 4 @@ -43,7 +43,7 @@ We need to install Docker and Docker-Compose by running the following command: Create a new .env file and copy the env.example file that exist in the mainnet directory. We will ensure we are in the "mainnet" directory by typing these commands. Once in edit mode for the .env file, name your masternode and use an email address in the respective fields ``` -// cd mainnet +cd mainnet cp env.example .env nano .env ``` @@ -51,7 +51,7 @@ nano .env ### For Testnet ``` -// // cd testnet +cd testnet cp env.example .env nano .env ``` @@ -63,7 +63,7 @@ nano .env #### For Mainnet run the following commands: ``` -// cd mainnet +cd mainnet sudo docker-compose -f docker-compose.yml up -d ``` @@ -74,7 +74,7 @@ At this point you should be able to see your masternode on the list of nodes [he For Testnet run the following commands: ``` -// cd testnet +cd testnet sudo docker-compose -f apothem-network.yml up -d ``` @@ -85,7 +85,7 @@ Your coinbase address can be found in xdcchain/coinbase.txt file. For troubleshooting purposes, you can stop the node by using the following command on either Mainnet or Testnet: ``` -// sudo docker-compose -f apothem-network.yml down +sudo docker-compose -f apothem-network.yml down ``` ## Downloading a Network Snapshot @@ -97,25 +97,25 @@ The following steps are to expedite the syncing process of your node with the XD ### First safely bring down your node: ``` -// sudo docker-compose -f docker-compose.yml down +sudo docker-compose -f docker-compose.yml down ``` ### Then remove the old xdchain file from the server ``` -// rm -rf xdcchain.tar +rm -rf xdcchain.tar ``` ### Download the snapshot ``` -// wget https://download.xinfin.network/xdcchain.tar +wget https://download.xinfin.network/xdcchain.tar ``` ### Unpack the xdcchain.tar file ``` -// tar -xvzf xdcchain.tar +tar -xvzf xdcchain.tar ``` ### The unpacking will take some time, and it will look like this: @@ -125,23 +125,23 @@ The following steps are to expedite the syncing process of your node with the XD ### The following command will move the xdcchain/XDC to xdcchain/XDC\_backup ``` -// mv xdcchain/XDC xdcchain/XDC_backup +mv xdcchain/XDC xdcchain/XDC_backup ``` ``` -// mv XDC xdcchain +mv XDC xdcchain ``` ### Then we are going to remove the old "nodekey" file ``` -// rm -rf xdcchain/XDC/nodekey +rm -rf xdcchain/XDC/nodekey ``` ### The last step is to run the bash upgrade.sh command ``` -// bash upgrade.sh +bash upgrade.sh ``` This command will bring your node up and it will start syncing to the network. Once up and running, your node will be synced to the network in just a few minutes. From a6fbd49d7a8901ad723952c21877be34ca5906fe Mon Sep 17 00:00:00 2001 From: mogithehurt <114102465+mogithehurt@users.noreply.github.com> Date: Mon, 21 Nov 2022 23:46:02 +0530 Subject: [PATCH 002/115] Create Readme.md --- how-to/XRC20/Foundry/Readme.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 how-to/XRC20/Foundry/Readme.md diff --git a/how-to/XRC20/Foundry/Readme.md b/how-to/XRC20/Foundry/Readme.md new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/how-to/XRC20/Foundry/Readme.md @@ -0,0 +1 @@ + From 0ebb19db6c7e57131c747df9088020ec6aaef12c Mon Sep 17 00:00:00 2001 From: mogithehurt <114102465+mogithehurt@users.noreply.github.com> Date: Mon, 21 Nov 2022 23:46:54 +0530 Subject: [PATCH 003/115] Add files via upload --- how-to/XRC20/Foundry/readme.md | 595 ++++++++++++++++++++++++++++ how-to/XRC20/Foundry/remappings.txt | 2 + 2 files changed, 597 insertions(+) create mode 100644 how-to/XRC20/Foundry/readme.md create mode 100644 how-to/XRC20/Foundry/remappings.txt diff --git a/how-to/XRC20/Foundry/readme.md b/how-to/XRC20/Foundry/readme.md new file mode 100644 index 00000000..831a5415 --- /dev/null +++ b/how-to/XRC20/Foundry/readme.md @@ -0,0 +1,595 @@ +# How to make a XRC-20 Royalty Token with Foundry. +This tutorial’s purpose is to create an XRC-20 token with foundry that will return a royalty amount (of that XRC-20 token) to the original creator of the contract. + +# 🧭 Table of contents + +- [🧭 Table of contents](#-table-of-contents) +- [📰 Overview](#-overview) + - [What you will learn](#what-you-will-learn) + - [What you will do](#what-you-will-do) +- [The Tools We're Using](#the-tools-were-using) +- [Set up Foundry](#set-up-foundry) +- [environment SetUp](#environment-setup) +- [Smart Contract Development](#smart-contract-development) +- [Testing Our Smart Contract](#testing-our-smart-contract) +- [Deploying Our Smart Contract To The Blockchain](#deploying-our-smart-contract-to-the-blockchain) +- [Veryfing Contracts on the Block Explorer](#veryfing-contracts-on-the-block-explorer) + + +# 📰 Overview + +![image](https://user-images.githubusercontent.com/114102465/203121145-7cc2a09d-4b2d-4606-90a7-8531c036afd4.png) + + +[Foundry](https://book.getfoundry.sh/) is a smart contract development toolchain. + +Foundry manages your dependencies, compiles your project, runs tests, deploys, and lets you interact with the chain from the command-line and via Solidity scripts. + +### What you will learn +In this tutorial, you will learn how to set up Foundry and use it to build, test and deploy a XRC20 Royalty Token on both the XDC Network mainnet and XDC Apothem testnet. + +### What you will do +- Install and setup Foundry +- Create an XRC20 Royalty token +- Compile the Contract +- Deploy the Contract +- Interact with the XRC20 Royalty token +- Check the deployment status on [XDC Mainnet](https://explorer.xinfin.network/) and [XDC Testnet](https://apothem.blocksscan.io/) + +# The Tools We're Using +- [Foundry](https://book.getfoundry.sh/) : a fast Solidity development toolkit that enables developers to write their tests in Solidity. +- [Solmate](https://github.com/Rari-Capital/solmate) : a library that contains gas-optimized contracts such as ERC20, ERC721, and more. +- [Visual Studio Code](https://code.visualstudio.com/) : a source-code editor made by Microsoft with the Electron Framework, for Windows, Linux and macOS. +- [XDC Testnet explorer](https://explorer.xinfin.network/) +- [Testnet XDC Faucet](https://faucet.apothem.network/) : a faucet that gives 1000 XDC for test. +- [XDCPay](https://chrome.google.com/webstore/detail/xdcpay/bocpokimicclpaiekenaeelehdjllofo) : is an extension for accessing XDC's XDPoS enabled distributed applications, or "Dapps" in your browser. + +# Set up Foundry +Before we can start writing some code, we need to set up our environment. We're going to be writing our contracts and testing them in Foundry. + +### Installing Foundry For MacOS / Linux: + +Open-up terminal and type in the command: + +```bash +curl -L https://foundry.paradigm.xyz | bash +``` + +Afterward type: +```bash +foundryup +``` +Foundry should now be installed and ready to go! + +### Installing Foundry For Windows: + +If using Windows, you need to install Foundry from the source. First, install [Rust](https://rustup.rs/) with the [official documentation](https://book.getfoundry.sh/getting-started/installation). + +Then, open the command prompt and type in the command: +```bash +cargo install --git https://github.com/foundry-rs/foundry foundry-cli anvil --bins --locked +``` +To update from source, run the same command again. + +# environment SetUp + +Now that we've installed Foundry, it's time to set up our folder where we will write our smart contract. From the same terminal window that you installed Foundry, type the following commands: + +1. Make our folder where will we initialize our project. Then navigate into that folder with the following commands: +```bash +mkdir XRC20_Royalty && cd XRC20_Royalty +``` +2. Initialize our Foundry project within our XRC20_Royalty folder: +```bash +forge init +``` +3. Install Solmate into our Foundry project: +```bash +forge install rari-capital/solmate +``` +4. Create a remappings.txt file for the Solmate library we just added: +```bash +touch remappings.txt +``` +5. Open up your project in your IDE. For this tutorial, we’ll be using VSCode with this Solidity plugin: +```bash +code . +``` +Here’s what our IDE looks like. + +![image](https://user-images.githubusercontent.com/114102465/203061766-76fbddb4-35c4-40d7-82fb-c985eed36e70.png) + + +6. Add these lines to remappings.txt so we can easily call the Solmate library in our contract: +```bash +solmate/=lib/solmate/src/ +forge-std=lib/forge-std/src/ +``` +Now that our environment and libraries are set up, we'll move into developing our smart contract! + +# Smart Contract Development + +We will make a contract that passes tokens to the original contract creator whenever a token is transferred between wallets! + +1. In your IDE, navigate to `src/Counter.sol` and rename the file to `RoyaltyToken.sol`. + +2. Import the Solmate ERC20 library in `RoyaltyToken.sol` and change the name of the contract. Under `pragma solidity ^0.8.14;`, add the following lines of code: +```bash +import { ERC20 } from "solmate/tokens/ERC20.sol"; + +contract RoyaltyToken is ERC20 {} +``` +3. Add in our state variables for the royalties. In the contract, add an address `royaltyAddress` variable and uint256 `royaltyFeePercentage` variable: +```bash +contract RoyaltyToken is ERC20 { + address public royaltyAddress; + uint256 public royaltyFeePercentage; +} +``` +4. Make a constructor for the token. A constructor is what creates our token from the imported Solmate template. + +Add the following variables to the constructor: + +1. `string memory _name` +2. `string memory _token` +3. `uint8 _decimals` +4. `uint256 _royaltyFeePercentage` +5. `uint256 _initialSupply` +Directly after we’ve added these variables and closed the `()`, add `ERC20(_name, _symbol, _decimals)`. + +After that add brackets `{}` and inside the brackets set the following variables: + +Set `royaltyAddress` variable as the wallet address of the creator of the contract: `royaltyAddress = msg.sender;` +The `RoyaltyFeePercentage` as the constructor variable: `royaltyFeePercentage = _royaltyFeePercentage;` +Mint the tokens to the creator of the contract and pass in the `_initialSupply` variable: `_mint(msg.sender, _initialSupply);` +Our constructor should now look like the following: +```bash +contract RoyaltyToken is ERC20 { + address public royaltyAddress; + uint256 public royaltyFeePercentage; + + constructor( + string memory _name, + string memory _symbol, + uint8 _decimals, + uint256 _royaltyFeePercentage, + uint256 _initialSupply + ) ERC20(_name, _symbol, _decimals) { + royaltyAddress = msg.sender; + royaltyFeePercentage = _royaltyFeePercentage; + _mint(msg.sender, _initialSupply); + } +} +``` +5. Next, override the transfer function. +```bash +function transfer(address to, uint256 amount) public virtual returns (bool) { + balanceOf[msg.sender] -= amount; + + // Cannot overflow because the sum of all user + // balances can't exceed the max uint256 value. + unchecked { + balanceOf[to] += amount; + } + + emit Transfer(msg.sender, to, amount); + + return true; + } +``` + +Our contract now looks like this: + +```bash +pragma solidity ^0.8.14; + +import { ERC20 } from "solmate/tokens/ERC20.sol"; + +contract RoyaltyToken is ERC20 { + address public royaltyAddress; + uint256 public royaltyFeePercentage; + + constructor( + string memory _name, + string memory _symbol, + uint8 _decimals, + uint256 _royaltyFeePercentage, + uint256 _initialSupply + ) ERC20(_name, _symbol, _decimals) { + royaltyAddress = msg.sender; + royaltyFeePercentage = _royaltyFeePercentage; + _mint(msg.sender, _initialSupply); + } + + function transfer(address to, uint256 amount) public virtual returns (bool) { + balanceOf[msg.sender] -= amount; + + // Cannot overflow because the sum of all user + // balances can't exceed the max uint256 value. + unchecked { + balanceOf[to] += amount; + } + + emit Transfer(msg.sender, to, amount); + + return true; + } +} +``` +Add override after virtual in the function declaration: + + +`function transfer(address to, uint256 amount) public virtual override returns (bool) { +... +} ` +Inside of the `transfer` function, create a uint256 called `royaltyAmount` and set it equal to the amount in the function parameters multiplied by the `royaltyFeePercentage` divided by `100`. This calculates the royalty amount that we will be sending to our `royaltyAddress`. +```bash +uint256 royaltyAmount = amount * royaltyFeePercentage / 100; +``` +```bash +function transfer(address to, uint256 amount) public virtual returns (bool) { + uint256 royaltyAmount = amount * royaltyFeePercentage / 100; + balanceOf[msg.sender] -= amount; + + // Cannot overflow because the sum of all user + // balances can't exceed the max uint256 value. + unchecked { + balanceOf[to] += amount; + } + + emit Transfer(msg.sender, to, amount); + + return true; + } +``` +In the `unchecked {}` for the `balanceOf[to]`, subtract the amount by the `royaltyAmount` and add an additional `balanceOf[royaltyAddress]` where we add the `royaltyAmount`: + +```bash +function transfer(address to, uint256 amount) public virtual returns (bool) { + uint256 royaltyAmount = amount * royaltyFeePercentage / 100; + balanceOf[msg.sender] -= amount; + + // Cannot overflow because the sum of all user + // balances can't exceed the max uint256 value. + unchecked { + //subtract the amount by the royalty amount + balanceOf[to] += amount - royaltyAmount; + //add to the royaltyAddress wallet the royaltyAmount + balanceOf[royaltyAddress] += royaltyAmount; + } + + emit Transfer(msg.sender, to, amount); + + return true; + } +``` +Add an additional emit Transfer where we send the royaltyAddress the royaltyAmount. Additionally, subtract the original emit Transfer amount by the royaltyAmount: + +```bash +function transfer(address to, uint256 amount) public virtual override returns (bool) { + uint256 royaltyAmount = amount * royaltyFeePercentage / 100; + + balanceOf[msg.sender] -= amount; + + // Cannot overflow because the sum of all user + // balances can't exceed the max uint256 value. + + unchecked { + //subtract the amount by the royalty amount + balanceOf[to] += amount - royaltyAmount; + //add to the royaltyAddress wallet the royaltyAmount + balanceOf[royaltyAddress] += royaltyAmount; + } + //transfer to the royalty address + emit Transfer(msg.sender, royaltyAddress, royaltyAmount); + //transfer to the original address + emit Transfer(msg.sender, to, amount - royaltyAmount); + + return true; + } +``` +6. Our contract is now finished! In total it should look like this: + +```bash +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.14; + +import { ERC20 } from "solmate/tokens/ERC20.sol"; + +contract RoyaltyToken is ERC20 { + + address public royaltyAddress; + uint256 public royaltyFeePercentage; + + constructor( + string memory _name, + string memory _symbol, + uint8 _decimals, + uint256 _royaltyFeePercentage, + uint256 _initialSupply + ) ERC20(_name, _symbol, _decimals) { + royaltyAddress = msg.sender; + royaltyFeePercentage = _royaltyFeePercentage; + _mint(msg.sender, _initialSupply); + } + + function transferWithRoyalty (address to, uint256 amount) public returns (bool) { + uint256 royaltyAmount = amount * royaltyFeePercentage / 100; + + transfer(royaltyAddress, royaltyAmount); + + transfer(to, amount - royaltyAmount); + + return true; + } + + function transfer(address to, uint256 amount) public virtual override returns (bool) { + uint256 royaltyAmount = amount * royaltyFeePercentage / 100; + + balanceOf[msg.sender] -= amount; + + // Cannot overflow because the sum of all user + // balances can't exceed the max uint256 value. + unchecked { + balanceOf[to] += amount - royaltyAmount; + balanceOf[royaltyAddress] += royaltyAmount; + } + //transfer to the royalty address + emit Transfer(msg.sender, royaltyAddress, royaltyAmount); + //transfer to the original address + emit Transfer(msg.sender, to, amount - royaltyAmount); + + return true; + } +} +``` + +# Testing Our Smart Contract +Thanks to Foundry, we can test our new `RoyaltyToken.sol` contract in Solidity! + +Set up your test contract + +1. In your IDE, head to `test/Counter.t.sol` and rename the file to `RoyaltyToken.t.sol`. + +2. Delete everything in the original body of `RoyaltyToken.t.sol`. + +3. Add our solidity version to the top: `pragma solidity ^0.8.14;`. + +4. Import the RoyaltyToken from `royaltyToken.sol`. Add `import {RoyaltyToken} from "src//RoyaltyToken.sol";` to the top of your contract. + +5. Import forge testing tools: `import "forge-std/Test.sol";`. + +6. Make a new contract called `RoyaltyTokenTest` and set it to a `Test`. Our contract should look like this. + +```bash +pragma solidity ^0.8.14; + +import {RoyaltyToken} from "src//RoyaltyToken.sol"; + +import "forge-std/Test.sol"; + +contract RoyaltyTokenTest is Test {} +``` +### Create your test contract +1. Create your `RoyaltyToken`, `RoyaltyFeePercentage`, and `InitialSupply` arguments. For this test, we will be using `2%` for the fee and `10,000` initial tokens: + +```bash +pragma solidity ^0.8.14; + +import {RoyaltyToken} from "src//RoyaltyToken.sol"; + +import "forge-std/Test.sol"; + +contract RoyaltyTokenTest is Test { + RoyaltyToken public token; + uint256 public royaltyFeePercentage = 2; + uint256 public initialSupply = 10 ** 4; +} +``` +2. Create a `setUp()` function that constructs our `RoyaltyToken`. +```bash +pragma solidity ^0.8.14; + +import {RoyaltyToken} from "src//RoyaltyToken.sol"; + +import "forge-std/Test.sol"; + +contract RoyaltyTokenTest is Test { + RoyaltyToken public token; + uint256 public royaltyFeePercentage = 2; + uint256 public initialSupply = 10 ** 4; + + function setUp() public { + token = new RoyaltyToken("RoyaltyToken", "ROYT", 18, royaltyFeePercentage, initialSupply); + } + +} +``` +3. Create a `testTransfer()` function that makes two dummy addresses and transfers funds between them. We will transfer 1,000 of the 10,000 tokens we created to an address. We're then going to check whether the address received 980 of those 1,000 tokens and whether our original contract address received the other 20. Afterward, we will initiate a transfer of 100 tokens between the newly created address and another wallet. We'll then check whether all 3 of the wallets have the correct amounts. +```bash +function testTransfer() public { + address alice = address(1); + address bob = address(2); + + token.transfer(alice, 1000); + + assertEq(token.balanceOf(alice), 980); + assertEq(token.balanceOf(address(this)), 9020); + + hoax(alice); + token.transfer(bob, 100); + + assertEq(token.balanceOf(alice), 880); + assertEq(token.balanceOf(bob), 98); + assertEq(token.balanceOf(address(this)), 9022); + } +``` +4. Our entire contract should look like this: +```bash +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.14; + +import {RoyaltyToken} from "src//RoyaltyToken.sol"; + +import "forge-std/Test.sol"; + +contract RoyaltyTokenTest is Test { + RoyaltyToken public token; + uint256 public royaltyFeePercentage = 2; + uint256 public initialSupply = 10 ** 4; + + + function setUp() public { + token = new RoyaltyToken("RoyaltyToken", "ROYT", 18, royaltyFeePercentage, initialSupply); + } + + function testTransfer() public { + address alice = address(1); + address bob = address(2); + + token.transfer(alice, 1000); + + assertEq(token.balanceOf(alice), 980); + assertEq(token.balanceOf(address(this)), 9020); + + hoax(alice); + token.transfer(bob, 100); + + assertEq(token.balanceOf(alice), 880); + assertEq(token.balanceOf(bob), 98); + assertEq(token.balanceOf(address(this)), 9022); + } +} +``` +5. Now, let’s compile our contract. Open up that terminal window we used earlier and type the command `forge build` . +```bash +forge build +``` + +`Compiling... +[⠰] Compiling 19 files with 0.8.14 +[⠒] Solc 0.8.14 finished in 2.00s +Compiler run successful` + +Our smart contract is finished and is correctly compiling! Now let's test our smart contract to make sure it's actually doing what we want it to do. + +6. Open up terminal and run `forge test`. This runs our tests and helps us understand whether or not they passed. +```bash +forge test +``` + +`Compiling... +No files changed, compilation skipped + +Running 1 test for test/RoyaltyToken.t.sol:RoyaltyTokenTest +[PASS] testTransfer() (gas: 78242) +Test result: ok. 1 passed; 0 failed; finished in 1.45ms` + +If all goes well, you've just successfully made a smart contract in foundry, overrode the original transfer function, and ran some successful tests! Now, it's time to deploy the contract. + +# Deploying Our Smart Contract To The Blockchain +It's time for us to deploy our smart contract to the blockchain. + +1. Open up terminal and run `cast wallet new` - Create a new random keypair. +```bash +cast wallet new +``` + +`Successfully created new keypair. +Address: 0x80B75825D86a005453A08cD1a6Bd44C24d73A41d +Private Key: 0x4159ae5d34bb48367f9773c48de0e0effb2082681a69cd95f4e613246720af24` + +2. Now Copy the address and go to XDC faucet for [test XDC](https://faucet.apothem.network/), And replace `0x` by xdc.Click on request 1000 XDC. + +![image](https://user-images.githubusercontent.com/114102465/203102902-22b85584-271c-4755-8fc1-975955cecd80.png) + +We've got everything we need to deploy our contract to the blockchain now. + +### Deploying Our Contract +Head back to your terminal window to complete deployment. + +1. Open up the terminal and type the following command, replacing [PASTE YOUR PRIVATE KEY HERE] +```bash +forge create --rpc-url https://erpc.apothem.network --private-key [PASTE YOUR PRIVATE KEY HERE] src/RoyaltyToken.sol:RoyaltyToken --constructor-args "RoyaltyToken" "ROYT" 18 2 10000000000000000000000 --legacy +``` + +`Compiling... +No files changed, compilation skipped +Deployer: 0x80B75825D86a005453A08cD1a6Bd44C24d73A41d +Deployed to: 0x27f4D21150640df0856fF6CB5d57eB4447CC59AD +Transaction hash: 0x89f0edbf4755e93b8d25857e5a0fa0f7cae414cefac42e6ec9cb02930a932d41` + + +We can now see that our contract is deployed to the blockchain. If I copy the address in Deployed to, we can view the contract on [explorer](https://apothem.blocksscan.io/address/xdc27f4D21150640df0856fF6CB5d57eB4447CC59AD#transactions). + +![image](https://user-images.githubusercontent.com/114102465/203111916-f92d40c2-20d6-4e20-ae21-1e547f5d5d94.png) + +# Veryfing Contracts on the Block Explorer +Once you have successfully deployed your smart contract to the blockchain, it might be interesting to verify you contract on [Apothem Block Explorer](https://apothem.blocksscan.io/address/xdc27f4D21150640df0856fF6CB5d57eB4447CC59AD#transactions). +1. Flatten our smart contract, Open up the terminal and type the following command +```bash +forge flatten --output src/Contract.flattened.sol src/RoyaltyToken.sol +``` +`Flattened file written at src/Contract.flattened.sol` +Now open the `Contract.flattened.sol` file and copy all source code, go to the [block explorer](https://apothem.blocksscan.io/address/xdc27f4D21150640df0856fF6CB5d57eB4447CC59AD#transactions) and click on Verify and Publish. +![image](https://user-images.githubusercontent.com/114102465/203114917-29ec08e6-3810-45ef-995a-771c52ea967c.png) + +![image](https://user-images.githubusercontent.com/114102465/203115094-9e3dbfc4-5f85-41d7-8bd4-c6ef3705bf65.png) + +![image](https://user-images.githubusercontent.com/114102465/203115311-5c360ae2-381b-49f6-bc89-da87ded7818a.png) + +![image](https://user-images.githubusercontent.com/114102465/203115584-93e90371-8560-460d-8758-a5024d51e4d6.png) + +If everything is correctly filled out, your contract page on the block explorer should display a new tab called Contract. + +--- +For more information about XDC Network, Please Visit [XDC Network Documention](https://docs.xdc.org/).
+For more information about Foundry, Please Visit [Foundry Book](https://book.getfoundry.sh/).
+XDC Network [Disocrd](https://discord.gg/RBRx2HvbMr).
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/how-to/XRC20/Foundry/remappings.txt b/how-to/XRC20/Foundry/remappings.txt new file mode 100644 index 00000000..5c732d87 --- /dev/null +++ b/how-to/XRC20/Foundry/remappings.txt @@ -0,0 +1,2 @@ +solmate/=lib/solmate/src/ +forge-std=lib/forge-std/src/ \ No newline at end of file From 539ffcb40ad05af15d0d893bccfa35b8404b5c9c Mon Sep 17 00:00:00 2001 From: mogithehurt <114102465+mogithehurt@users.noreply.github.com> Date: Mon, 21 Nov 2022 23:47:19 +0530 Subject: [PATCH 004/115] Delete Readme.md --- how-to/XRC20/Foundry/Readme.md | 1 - 1 file changed, 1 deletion(-) delete mode 100644 how-to/XRC20/Foundry/Readme.md diff --git a/how-to/XRC20/Foundry/Readme.md b/how-to/XRC20/Foundry/Readme.md deleted file mode 100644 index 8b137891..00000000 --- a/how-to/XRC20/Foundry/Readme.md +++ /dev/null @@ -1 +0,0 @@ - From 4a874120531b94ed5b2ea6303454253eccc2f25c Mon Sep 17 00:00:00 2001 From: mogithehurt <114102465+mogithehurt@users.noreply.github.com> Date: Mon, 21 Nov 2022 23:47:52 +0530 Subject: [PATCH 005/115] Add files via upload --- how-to/XRC20/Foundry/Contract.flattened.sol | 253 ++++++++++++++++++++ how-to/XRC20/Foundry/RoyaltyToken.sol | 51 ++++ how-to/XRC20/Foundry/RoyaltyToken.t.sol | 34 +++ 3 files changed, 338 insertions(+) create mode 100644 how-to/XRC20/Foundry/Contract.flattened.sol create mode 100644 how-to/XRC20/Foundry/RoyaltyToken.sol create mode 100644 how-to/XRC20/Foundry/RoyaltyToken.t.sol diff --git a/how-to/XRC20/Foundry/Contract.flattened.sol b/how-to/XRC20/Foundry/Contract.flattened.sol new file mode 100644 index 00000000..d7caf689 --- /dev/null +++ b/how-to/XRC20/Foundry/Contract.flattened.sol @@ -0,0 +1,253 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.14; + +/// @notice Modern and gas efficient ERC20 + EIP-2612 implementation. +/// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC20.sol) +/// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2ERC20.sol) +/// @dev Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it. +abstract contract ERC20 { + /*////////////////////////////////////////////////////////////// + EVENTS + //////////////////////////////////////////////////////////////*/ + + event Transfer(address indexed from, address indexed to, uint256 amount); + + event Approval(address indexed owner, address indexed spender, uint256 amount); + + /*////////////////////////////////////////////////////////////// + METADATA STORAGE + //////////////////////////////////////////////////////////////*/ + + string public name; + + string public symbol; + + uint8 public immutable decimals; + + /*////////////////////////////////////////////////////////////// + ERC20 STORAGE + //////////////////////////////////////////////////////////////*/ + + uint256 public totalSupply; + + mapping(address => uint256) public balanceOf; + + mapping(address => mapping(address => uint256)) public allowance; + + /*////////////////////////////////////////////////////////////// + EIP-2612 STORAGE + //////////////////////////////////////////////////////////////*/ + + uint256 internal immutable INITIAL_CHAIN_ID; + + bytes32 internal immutable INITIAL_DOMAIN_SEPARATOR; + + mapping(address => uint256) public nonces; + + /*////////////////////////////////////////////////////////////// + CONSTRUCTOR + //////////////////////////////////////////////////////////////*/ + + constructor( + string memory _name, + string memory _symbol, + uint8 _decimals + ) { + name = _name; + symbol = _symbol; + decimals = _decimals; + + INITIAL_CHAIN_ID = block.chainid; + INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator(); + } + + /*////////////////////////////////////////////////////////////// + ERC20 LOGIC + //////////////////////////////////////////////////////////////*/ + + function approve(address spender, uint256 amount) public virtual returns (bool) { + allowance[msg.sender][spender] = amount; + + emit Approval(msg.sender, spender, amount); + + return true; + } + + function transfer(address to, uint256 amount) public virtual returns (bool) { + balanceOf[msg.sender] -= amount; + + // Cannot overflow because the sum of all user + // balances can't exceed the max uint256 value. + unchecked { + balanceOf[to] += amount; + } + + emit Transfer(msg.sender, to, amount); + + return true; + } + + function transferFrom( + address from, + address to, + uint256 amount + ) public virtual returns (bool) { + uint256 allowed = allowance[from][msg.sender]; // Saves gas for limited approvals. + + if (allowed != type(uint256).max) allowance[from][msg.sender] = allowed - amount; + + balanceOf[from] -= amount; + + // Cannot overflow because the sum of all user + // balances can't exceed the max uint256 value. + unchecked { + balanceOf[to] += amount; + } + + emit Transfer(from, to, amount); + + return true; + } + + /*////////////////////////////////////////////////////////////// + EIP-2612 LOGIC + //////////////////////////////////////////////////////////////*/ + + function permit( + address owner, + address spender, + uint256 value, + uint256 deadline, + uint8 v, + bytes32 r, + bytes32 s + ) public virtual { + require(deadline >= block.timestamp, "PERMIT_DEADLINE_EXPIRED"); + + // Unchecked because the only math done is incrementing + // the owner's nonce which cannot realistically overflow. + unchecked { + address recoveredAddress = ecrecover( + keccak256( + abi.encodePacked( + "\x19\x01", + DOMAIN_SEPARATOR(), + keccak256( + abi.encode( + keccak256( + "Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)" + ), + owner, + spender, + value, + nonces[owner]++, + deadline + ) + ) + ) + ), + v, + r, + s + ); + + require(recoveredAddress != address(0) && recoveredAddress == owner, "INVALID_SIGNER"); + + allowance[recoveredAddress][spender] = value; + } + + emit Approval(owner, spender, value); + } + + function DOMAIN_SEPARATOR() public view virtual returns (bytes32) { + return block.chainid == INITIAL_CHAIN_ID ? INITIAL_DOMAIN_SEPARATOR : computeDomainSeparator(); + } + + function computeDomainSeparator() internal view virtual returns (bytes32) { + return + keccak256( + abi.encode( + keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"), + keccak256(bytes(name)), + keccak256("1"), + block.chainid, + address(this) + ) + ); + } + + /*////////////////////////////////////////////////////////////// + INTERNAL MINT/BURN LOGIC + //////////////////////////////////////////////////////////////*/ + + function _mint(address to, uint256 amount) internal virtual { + totalSupply += amount; + + // Cannot overflow because the sum of all user + // balances can't exceed the max uint256 value. + unchecked { + balanceOf[to] += amount; + } + + emit Transfer(address(0), to, amount); + } + + function _burn(address from, uint256 amount) internal virtual { + balanceOf[from] -= amount; + + // Cannot underflow because a user's balance + // will never be larger than the total supply. + unchecked { + totalSupply -= amount; + } + + emit Transfer(from, address(0), amount); + } +} + +contract RoyaltyToken is ERC20 { + + address public royaltyAddress; + uint256 public royaltyFeePercentage; + + constructor( + string memory _name, + string memory _symbol, + uint8 _decimals, + uint256 _royaltyFeePercentage, + uint256 _initialSupply + ) ERC20(_name, _symbol, _decimals) { + royaltyAddress = msg.sender; + royaltyFeePercentage = _royaltyFeePercentage; + _mint(msg.sender, _initialSupply); + } + + function transferWithRoyalty (address to, uint256 amount) public returns (bool) { + uint256 royaltyAmount = amount * royaltyFeePercentage / 100; + + transfer(royaltyAddress, royaltyAmount); + + transfer(to, amount - royaltyAmount); + + return true; + } + + function transfer(address to, uint256 amount) public virtual override returns (bool) { + uint256 royaltyAmount = amount * royaltyFeePercentage / 100; + + balanceOf[msg.sender] -= amount; + + // Cannot overflow because the sum of all user + // balances can't exceed the max uint256 value. + unchecked { + balanceOf[to] += amount - royaltyAmount; + balanceOf[royaltyAddress] += royaltyAmount; + } + //transfer to the royalty address + emit Transfer(msg.sender, royaltyAddress, royaltyAmount); + //transfer to the original address + emit Transfer(msg.sender, to, amount - royaltyAmount); + + return true; + } +} diff --git a/how-to/XRC20/Foundry/RoyaltyToken.sol b/how-to/XRC20/Foundry/RoyaltyToken.sol new file mode 100644 index 00000000..2528c8a6 --- /dev/null +++ b/how-to/XRC20/Foundry/RoyaltyToken.sol @@ -0,0 +1,51 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.14; + +import { ERC20 } from "solmate/tokens/ERC20.sol"; + +contract RoyaltyToken is ERC20 { + + address public royaltyAddress; + uint256 public royaltyFeePercentage; + + constructor( + string memory _name, + string memory _symbol, + uint8 _decimals, + uint256 _royaltyFeePercentage, + uint256 _initialSupply + ) ERC20(_name, _symbol, _decimals) { + royaltyAddress = msg.sender; + royaltyFeePercentage = _royaltyFeePercentage; + _mint(msg.sender, _initialSupply); + } + + function transferWithRoyalty (address to, uint256 amount) public returns (bool) { + uint256 royaltyAmount = amount * royaltyFeePercentage / 100; + + transfer(royaltyAddress, royaltyAmount); + + transfer(to, amount - royaltyAmount); + + return true; + } + + function transfer(address to, uint256 amount) public virtual override returns (bool) { + uint256 royaltyAmount = amount * royaltyFeePercentage / 100; + + balanceOf[msg.sender] -= amount; + + // Cannot overflow because the sum of all user + // balances can't exceed the max uint256 value. + unchecked { + balanceOf[to] += amount - royaltyAmount; + balanceOf[royaltyAddress] += royaltyAmount; + } + //transfer to the royalty address + emit Transfer(msg.sender, royaltyAddress, royaltyAmount); + //transfer to the original address + emit Transfer(msg.sender, to, amount - royaltyAmount); + + return true; + } +} \ No newline at end of file diff --git a/how-to/XRC20/Foundry/RoyaltyToken.t.sol b/how-to/XRC20/Foundry/RoyaltyToken.t.sol new file mode 100644 index 00000000..8e602481 --- /dev/null +++ b/how-to/XRC20/Foundry/RoyaltyToken.t.sol @@ -0,0 +1,34 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.14; + +import {RoyaltyToken} from "src//RoyaltyToken.sol"; + +import "forge-std/Test.sol"; + +contract RoyaltyTokenTest is Test { + RoyaltyToken public token; + uint256 public royaltyFeePercentage = 2; + uint256 public initialSupply = 10 ** 4; + + + function setUp() public { + token = new RoyaltyToken("RoyaltyToken", "ROYT", 18, royaltyFeePercentage, initialSupply); + } + + function testTransfer() public { + address alice = address(1); + address bob = address(2); + + token.transfer(alice, 1000); + + assertEq(token.balanceOf(alice), 980); + assertEq(token.balanceOf(address(this)), 9020); + + hoax(alice); + token.transfer(bob, 100); + + assertEq(token.balanceOf(alice), 880); + assertEq(token.balanceOf(bob), 98); + assertEq(token.balanceOf(address(this)), 9022); + } +} \ No newline at end of file From 0a11493100021995b8e2dba56e597df58c805e4d Mon Sep 17 00:00:00 2001 From: Jon McBee Date: Tue, 22 Nov 2022 13:54:37 +0000 Subject: [PATCH 006/115] GitBook: [#136] Stubbing out how-to xrc20 with Foundry --- SUMMARY.md | 1 + .../how-to-create-an-xrc20-token-using-foundry.md | 3 +++ 2 files changed, 4 insertions(+) create mode 100644 learn/how-to-articles/how-to-create-an-xrc20-token-using-foundry.md diff --git a/SUMMARY.md b/SUMMARY.md index d8d22ef8..9e9f7c76 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -102,6 +102,7 @@ * [How To Use Truffle and Ganache to Create DeFi App](learn/how-to-articles/how-to-use-truffle-and-ganache-to-create-defi-app.md) * [How to Migrate a dApp from Ethereum to the XDC Network Using Truffle](learn/how-to-articles/how-to-migrate-a-dapp-from-ethereum-to-the-xdc-network-using-truffle.md) * [How to Migrate from Solana to the XDC Network using Solang](learn/how-to-articles/how-to-migrate-from-solana-to-the-xdc-network-using-solang.md) + * [How to Create an XRC20 Token Using Foundry](learn/how-to-articles/how-to-create-an-xrc20-token-using-foundry.md) * [Community Support](learn/community-support.md) * [How to Report an Issue](learn/community-support/how-to-report-an-issue.md) * [Contributing and Feedback Guide](gitbook.md) diff --git a/learn/how-to-articles/how-to-create-an-xrc20-token-using-foundry.md b/learn/how-to-articles/how-to-create-an-xrc20-token-using-foundry.md new file mode 100644 index 00000000..c4f7e4ab --- /dev/null +++ b/learn/how-to-articles/how-to-create-an-xrc20-token-using-foundry.md @@ -0,0 +1,3 @@ +# How to Create an XRC20 Token Using Foundry + +Hello World From 5599f6a94594c6dff4ce536284e14a3342be88c4 Mon Sep 17 00:00:00 2001 From: Jon McBee Date: Tue, 22 Nov 2022 08:58:49 -0500 Subject: [PATCH 007/115] Promoting XRC20 with Foundry Renamed the doc Promoted the content --- ...-to-create-an-xrc20-token-using-foundry.md | 3 - ...and-deploy-an-xrc20-token-using-foundry.md | 600 ++++++++++++++++++ 2 files changed, 600 insertions(+), 3 deletions(-) delete mode 100644 learn/how-to-articles/how-to-create-an-xrc20-token-using-foundry.md create mode 100644 learn/how-to-articles/how-to-create-and-deploy-an-xrc20-token-using-foundry.md diff --git a/learn/how-to-articles/how-to-create-an-xrc20-token-using-foundry.md b/learn/how-to-articles/how-to-create-an-xrc20-token-using-foundry.md deleted file mode 100644 index c4f7e4ab..00000000 --- a/learn/how-to-articles/how-to-create-an-xrc20-token-using-foundry.md +++ /dev/null @@ -1,3 +0,0 @@ -# How to Create an XRC20 Token Using Foundry - -Hello World diff --git a/learn/how-to-articles/how-to-create-and-deploy-an-xrc20-token-using-foundry.md b/learn/how-to-articles/how-to-create-and-deploy-an-xrc20-token-using-foundry.md new file mode 100644 index 00000000..ef24a029 --- /dev/null +++ b/learn/how-to-articles/how-to-create-and-deploy-an-xrc20-token-using-foundry.md @@ -0,0 +1,600 @@ +# How to make a XRC-20 Royalty Token with Foundry. +This tutorial’s purpose is to create an XRC-20 token with foundry that will return a royalty amount (of that XRC-20 token) to the original creator of the contract. + +# 🧭 Table of contents + +- [How to make a XRC-20 Royalty Token with Foundry.](#how-to-make-a-xrc-20-royalty-token-with-foundry) +- [🧭 Table of contents](#-table-of-contents) +- [📰 Overview](#-overview) + - [What you will learn](#what-you-will-learn) + - [What you will do](#what-you-will-do) +- [The Tools We're Using](#the-tools-were-using) +- [Set up Foundry](#set-up-foundry) + - [Installing Foundry For MacOS / Linux:](#installing-foundry-for-macos--linux) + - [Installing Foundry For Windows:](#installing-foundry-for-windows) +- [environment SetUp](#environment-setup) +- [Smart Contract Development](#smart-contract-development) +- [Testing Our Smart Contract](#testing-our-smart-contract) + - [Create your test contract](#create-your-test-contract) +- [Deploying Our Smart Contract To The Blockchain](#deploying-our-smart-contract-to-the-blockchain) + - [Deploying Our Contract](#deploying-our-contract) +- [Veryfing Contracts on the Block Explorer](#veryfing-contracts-on-the-block-explorer) + + +# 📰 Overview + +![image](https://user-images.githubusercontent.com/114102465/203121145-7cc2a09d-4b2d-4606-90a7-8531c036afd4.png) + + +[Foundry](https://book.getfoundry.sh/) is a smart contract development toolchain. + +Foundry manages your dependencies, compiles your project, runs tests, deploys, and lets you interact with the chain from the command-line and via Solidity scripts. + +### What you will learn +In this tutorial, you will learn how to set up Foundry and use it to build, test and deploy a XRC20 Royalty Token on both the XDC Network mainnet and XDC Apothem testnet. + +### What you will do +- Install and setup Foundry +- Create an XRC20 Royalty token +- Compile the Contract +- Deploy the Contract +- Interact with the XRC20 Royalty token +- Check the deployment status on [XDC Mainnet](https://explorer.xinfin.network/) and [XDC Testnet](https://apothem.blocksscan.io/) + +# The Tools We're Using +- [Foundry](https://book.getfoundry.sh/) : a fast Solidity development toolkit that enables developers to write their tests in Solidity. +- [Solmate](https://github.com/Rari-Capital/solmate) : a library that contains gas-optimized contracts such as ERC20, ERC721, and more. +- [Visual Studio Code](https://code.visualstudio.com/) : a source-code editor made by Microsoft with the Electron Framework, for Windows, Linux and macOS. +- [XDC Testnet explorer](https://explorer.xinfin.network/) +- [Testnet XDC Faucet](https://faucet.apothem.network/) : a faucet that gives 1000 XDC for test. +- [XDCPay](https://chrome.google.com/webstore/detail/xdcpay/bocpokimicclpaiekenaeelehdjllofo) : is an extension for accessing XDC's XDPoS enabled distributed applications, or "Dapps" in your browser. + +# Set up Foundry +Before we can start writing some code, we need to set up our environment. We're going to be writing our contracts and testing them in Foundry. + +### Installing Foundry For MacOS / Linux: + +Open-up terminal and type in the command: + +```bash +curl -L https://foundry.paradigm.xyz | bash +``` + +Afterward type: +```bash +foundryup +``` +Foundry should now be installed and ready to go! + +### Installing Foundry For Windows: + +If using Windows, you need to install Foundry from the source. First, install [Rust](https://rustup.rs/) with the [official documentation](https://book.getfoundry.sh/getting-started/installation). + +Then, open the command prompt and type in the command: +```bash +cargo install --git https://github.com/foundry-rs/foundry foundry-cli anvil --bins --locked +``` +To update from source, run the same command again. + +# environment SetUp + +Now that we've installed Foundry, it's time to set up our folder where we will write our smart contract. From the same terminal window that you installed Foundry, type the following commands: + +1. Make our folder where will we initialize our project. Then navigate into that folder with the following commands: +```bash +mkdir XRC20_Royalty && cd XRC20_Royalty +``` +2. Initialize our Foundry project within our XRC20_Royalty folder: +```bash +forge init +``` +3. Install Solmate into our Foundry project: +```bash +forge install rari-capital/solmate +``` +4. Create a remappings.txt file for the Solmate library we just added: +```bash +touch remappings.txt +``` +5. Open up your project in your IDE. For this tutorial, we’ll be using VSCode with this Solidity plugin: +```bash +code . +``` +Here’s what our IDE looks like. + +![image](https://user-images.githubusercontent.com/114102465/203061766-76fbddb4-35c4-40d7-82fb-c985eed36e70.png) + + +6. Add these lines to remappings.txt so we can easily call the Solmate library in our contract: +```bash +solmate/=lib/solmate/src/ +forge-std=lib/forge-std/src/ +``` +Now that our environment and libraries are set up, we'll move into developing our smart contract! + +# Smart Contract Development + +We will make a contract that passes tokens to the original contract creator whenever a token is transferred between wallets! + +1. In your IDE, navigate to `src/Counter.sol` and rename the file to `RoyaltyToken.sol`. + +2. Import the Solmate ERC20 library in `RoyaltyToken.sol` and change the name of the contract. Under `pragma solidity ^0.8.14;`, add the following lines of code: +```bash +import { ERC20 } from "solmate/tokens/ERC20.sol"; + +contract RoyaltyToken is ERC20 {} +``` +3. Add in our state variables for the royalties. In the contract, add an address `royaltyAddress` variable and uint256 `royaltyFeePercentage` variable: +```bash +contract RoyaltyToken is ERC20 { + address public royaltyAddress; + uint256 public royaltyFeePercentage; +} +``` +4. Make a constructor for the token. A constructor is what creates our token from the imported Solmate template. + +Add the following variables to the constructor: + +1. `string memory _name` +2. `string memory _token` +3. `uint8 _decimals` +4. `uint256 _royaltyFeePercentage` +5. `uint256 _initialSupply` +Directly after we’ve added these variables and closed the `()`, add `ERC20(_name, _symbol, _decimals)`. + +After that add brackets `{}` and inside the brackets set the following variables: + +Set `royaltyAddress` variable as the wallet address of the creator of the contract: `royaltyAddress = msg.sender;` +The `RoyaltyFeePercentage` as the constructor variable: `royaltyFeePercentage = _royaltyFeePercentage;` +Mint the tokens to the creator of the contract and pass in the `_initialSupply` variable: `_mint(msg.sender, _initialSupply);` +Our constructor should now look like the following: +```bash +contract RoyaltyToken is ERC20 { + address public royaltyAddress; + uint256 public royaltyFeePercentage; + + constructor( + string memory _name, + string memory _symbol, + uint8 _decimals, + uint256 _royaltyFeePercentage, + uint256 _initialSupply + ) ERC20(_name, _symbol, _decimals) { + royaltyAddress = msg.sender; + royaltyFeePercentage = _royaltyFeePercentage; + _mint(msg.sender, _initialSupply); + } +} +``` +5. Next, override the transfer function. +```bash +function transfer(address to, uint256 amount) public virtual returns (bool) { + balanceOf[msg.sender] -= amount; + + // Cannot overflow because the sum of all user + // balances can't exceed the max uint256 value. + unchecked { + balanceOf[to] += amount; + } + + emit Transfer(msg.sender, to, amount); + + return true; + } +``` + +Our contract now looks like this: + +```bash +pragma solidity ^0.8.14; + +import { ERC20 } from "solmate/tokens/ERC20.sol"; + +contract RoyaltyToken is ERC20 { + address public royaltyAddress; + uint256 public royaltyFeePercentage; + + constructor( + string memory _name, + string memory _symbol, + uint8 _decimals, + uint256 _royaltyFeePercentage, + uint256 _initialSupply + ) ERC20(_name, _symbol, _decimals) { + royaltyAddress = msg.sender; + royaltyFeePercentage = _royaltyFeePercentage; + _mint(msg.sender, _initialSupply); + } + + function transfer(address to, uint256 amount) public virtual returns (bool) { + balanceOf[msg.sender] -= amount; + + // Cannot overflow because the sum of all user + // balances can't exceed the max uint256 value. + unchecked { + balanceOf[to] += amount; + } + + emit Transfer(msg.sender, to, amount); + + return true; + } +} +``` +Add override after virtual in the function declaration: + + +`function transfer(address to, uint256 amount) public virtual override returns (bool) { +... +} ` +Inside of the `transfer` function, create a uint256 called `royaltyAmount` and set it equal to the amount in the function parameters multiplied by the `royaltyFeePercentage` divided by `100`. This calculates the royalty amount that we will be sending to our `royaltyAddress`. +```bash +uint256 royaltyAmount = amount * royaltyFeePercentage / 100; +``` +```bash +function transfer(address to, uint256 amount) public virtual returns (bool) { + uint256 royaltyAmount = amount * royaltyFeePercentage / 100; + balanceOf[msg.sender] -= amount; + + // Cannot overflow because the sum of all user + // balances can't exceed the max uint256 value. + unchecked { + balanceOf[to] += amount; + } + + emit Transfer(msg.sender, to, amount); + + return true; + } +``` +In the `unchecked {}` for the `balanceOf[to]`, subtract the amount by the `royaltyAmount` and add an additional `balanceOf[royaltyAddress]` where we add the `royaltyAmount`: + +```bash +function transfer(address to, uint256 amount) public virtual returns (bool) { + uint256 royaltyAmount = amount * royaltyFeePercentage / 100; + balanceOf[msg.sender] -= amount; + + // Cannot overflow because the sum of all user + // balances can't exceed the max uint256 value. + unchecked { + //subtract the amount by the royalty amount + balanceOf[to] += amount - royaltyAmount; + //add to the royaltyAddress wallet the royaltyAmount + balanceOf[royaltyAddress] += royaltyAmount; + } + + emit Transfer(msg.sender, to, amount); + + return true; + } +``` +Add an additional emit Transfer where we send the royaltyAddress the royaltyAmount. Additionally, subtract the original emit Transfer amount by the royaltyAmount: + +```bash +function transfer(address to, uint256 amount) public virtual override returns (bool) { + uint256 royaltyAmount = amount * royaltyFeePercentage / 100; + + balanceOf[msg.sender] -= amount; + + // Cannot overflow because the sum of all user + // balances can't exceed the max uint256 value. + + unchecked { + //subtract the amount by the royalty amount + balanceOf[to] += amount - royaltyAmount; + //add to the royaltyAddress wallet the royaltyAmount + balanceOf[royaltyAddress] += royaltyAmount; + } + //transfer to the royalty address + emit Transfer(msg.sender, royaltyAddress, royaltyAmount); + //transfer to the original address + emit Transfer(msg.sender, to, amount - royaltyAmount); + + return true; + } +``` +6. Our contract is now finished! In total it should look like this: + +```bash +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.14; + +import { ERC20 } from "solmate/tokens/ERC20.sol"; + +contract RoyaltyToken is ERC20 { + + address public royaltyAddress; + uint256 public royaltyFeePercentage; + + constructor( + string memory _name, + string memory _symbol, + uint8 _decimals, + uint256 _royaltyFeePercentage, + uint256 _initialSupply + ) ERC20(_name, _symbol, _decimals) { + royaltyAddress = msg.sender; + royaltyFeePercentage = _royaltyFeePercentage; + _mint(msg.sender, _initialSupply); + } + + function transferWithRoyalty (address to, uint256 amount) public returns (bool) { + uint256 royaltyAmount = amount * royaltyFeePercentage / 100; + + transfer(royaltyAddress, royaltyAmount); + + transfer(to, amount - royaltyAmount); + + return true; + } + + function transfer(address to, uint256 amount) public virtual override returns (bool) { + uint256 royaltyAmount = amount * royaltyFeePercentage / 100; + + balanceOf[msg.sender] -= amount; + + // Cannot overflow because the sum of all user + // balances can't exceed the max uint256 value. + unchecked { + balanceOf[to] += amount - royaltyAmount; + balanceOf[royaltyAddress] += royaltyAmount; + } + //transfer to the royalty address + emit Transfer(msg.sender, royaltyAddress, royaltyAmount); + //transfer to the original address + emit Transfer(msg.sender, to, amount - royaltyAmount); + + return true; + } +} +``` + +# Testing Our Smart Contract +Thanks to Foundry, we can test our new `RoyaltyToken.sol` contract in Solidity! + +Set up your test contract + +1. In your IDE, head to `test/Counter.t.sol` and rename the file to `RoyaltyToken.t.sol`. + +2. Delete everything in the original body of `RoyaltyToken.t.sol`. + +3. Add our solidity version to the top: `pragma solidity ^0.8.14;`. + +4. Import the RoyaltyToken from `royaltyToken.sol`. Add `import {RoyaltyToken} from "src//RoyaltyToken.sol";` to the top of your contract. + +5. Import forge testing tools: `import "forge-std/Test.sol";`. + +6. Make a new contract called `RoyaltyTokenTest` and set it to a `Test`. Our contract should look like this. + +```bash +pragma solidity ^0.8.14; + +import {RoyaltyToken} from "src//RoyaltyToken.sol"; + +import "forge-std/Test.sol"; + +contract RoyaltyTokenTest is Test {} +``` +### Create your test contract +1. Create your `RoyaltyToken`, `RoyaltyFeePercentage`, and `InitialSupply` arguments. For this test, we will be using `2%` for the fee and `10,000` initial tokens: + +```bash +pragma solidity ^0.8.14; + +import {RoyaltyToken} from "src//RoyaltyToken.sol"; + +import "forge-std/Test.sol"; + +contract RoyaltyTokenTest is Test { + RoyaltyToken public token; + uint256 public royaltyFeePercentage = 2; + uint256 public initialSupply = 10 ** 4; +} +``` +2. Create a `setUp()` function that constructs our `RoyaltyToken`. +```bash +pragma solidity ^0.8.14; + +import {RoyaltyToken} from "src//RoyaltyToken.sol"; + +import "forge-std/Test.sol"; + +contract RoyaltyTokenTest is Test { + RoyaltyToken public token; + uint256 public royaltyFeePercentage = 2; + uint256 public initialSupply = 10 ** 4; + + function setUp() public { + token = new RoyaltyToken("RoyaltyToken", "ROYT", 18, royaltyFeePercentage, initialSupply); + } + +} +``` +3. Create a `testTransfer()` function that makes two dummy addresses and transfers funds between them. We will transfer 1,000 of the 10,000 tokens we created to an address. We're then going to check whether the address received 980 of those 1,000 tokens and whether our original contract address received the other 20. Afterward, we will initiate a transfer of 100 tokens between the newly created address and another wallet. We'll then check whether all 3 of the wallets have the correct amounts. +```bash +function testTransfer() public { + address alice = address(1); + address bob = address(2); + + token.transfer(alice, 1000); + + assertEq(token.balanceOf(alice), 980); + assertEq(token.balanceOf(address(this)), 9020); + + hoax(alice); + token.transfer(bob, 100); + + assertEq(token.balanceOf(alice), 880); + assertEq(token.balanceOf(bob), 98); + assertEq(token.balanceOf(address(this)), 9022); + } +``` +4. Our entire contract should look like this: +```bash +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.14; + +import {RoyaltyToken} from "src//RoyaltyToken.sol"; + +import "forge-std/Test.sol"; + +contract RoyaltyTokenTest is Test { + RoyaltyToken public token; + uint256 public royaltyFeePercentage = 2; + uint256 public initialSupply = 10 ** 4; + + + function setUp() public { + token = new RoyaltyToken("RoyaltyToken", "ROYT", 18, royaltyFeePercentage, initialSupply); + } + + function testTransfer() public { + address alice = address(1); + address bob = address(2); + + token.transfer(alice, 1000); + + assertEq(token.balanceOf(alice), 980); + assertEq(token.balanceOf(address(this)), 9020); + + hoax(alice); + token.transfer(bob, 100); + + assertEq(token.balanceOf(alice), 880); + assertEq(token.balanceOf(bob), 98); + assertEq(token.balanceOf(address(this)), 9022); + } +} +``` +5. Now, let’s compile our contract. Open up that terminal window we used earlier and type the command `forge build` . +```bash +forge build +``` + +`Compiling... +[⠰] Compiling 19 files with 0.8.14 +[⠒] Solc 0.8.14 finished in 2.00s +Compiler run successful` + +Our smart contract is finished and is correctly compiling! Now let's test our smart contract to make sure it's actually doing what we want it to do. + +6. Open up terminal and run `forge test`. This runs our tests and helps us understand whether or not they passed. +```bash +forge test +``` + +`Compiling... +No files changed, compilation skipped + +Running 1 test for test/RoyaltyToken.t.sol:RoyaltyTokenTest +[PASS] testTransfer() (gas: 78242) +Test result: ok. 1 passed; 0 failed; finished in 1.45ms` + +If all goes well, you've just successfully made a smart contract in foundry, overrode the original transfer function, and ran some successful tests! Now, it's time to deploy the contract. + +# Deploying Our Smart Contract To The Blockchain +It's time for us to deploy our smart contract to the blockchain. + +1. Open up terminal and run `cast wallet new` - Create a new random keypair. +```bash +cast wallet new +``` + +`Successfully created new keypair. +Address: 0x80B75825D86a005453A08cD1a6Bd44C24d73A41d +Private Key: 0x4159ae5d34bb48367f9773c48de0e0effb2082681a69cd95f4e613246720af24` + +2. Now Copy the address and go to XDC faucet for [test XDC](https://faucet.apothem.network/), And replace `0x` by xdc.Click on request 1000 XDC. + +![image](https://user-images.githubusercontent.com/114102465/203102902-22b85584-271c-4755-8fc1-975955cecd80.png) + +We've got everything we need to deploy our contract to the blockchain now. + +### Deploying Our Contract +Head back to your terminal window to complete deployment. + +1. Open up the terminal and type the following command, replacing [PASTE YOUR PRIVATE KEY HERE] +```bash +forge create --rpc-url https://erpc.apothem.network --private-key [PASTE YOUR PRIVATE KEY HERE] src/RoyaltyToken.sol:RoyaltyToken --constructor-args "RoyaltyToken" "ROYT" 18 2 10000000000000000000000 --legacy +``` + +`Compiling... +No files changed, compilation skipped +Deployer: 0x80B75825D86a005453A08cD1a6Bd44C24d73A41d +Deployed to: 0x27f4D21150640df0856fF6CB5d57eB4447CC59AD +Transaction hash: 0x89f0edbf4755e93b8d25857e5a0fa0f7cae414cefac42e6ec9cb02930a932d41` + + +We can now see that our contract is deployed to the blockchain. If I copy the address in Deployed to, we can view the contract on [explorer](https://apothem.blocksscan.io/address/xdc27f4D21150640df0856fF6CB5d57eB4447CC59AD#transactions). + +![image](https://user-images.githubusercontent.com/114102465/203111916-f92d40c2-20d6-4e20-ae21-1e547f5d5d94.png) + +# Veryfing Contracts on the Block Explorer +Once you have successfully deployed your smart contract to the blockchain, it might be interesting to verify you contract on [Apothem Block Explorer](https://apothem.blocksscan.io/address/xdc27f4D21150640df0856fF6CB5d57eB4447CC59AD#transactions). +1. Flatten our smart contract, Open up the terminal and type the following command +```bash +forge flatten --output src/Contract.flattened.sol src/RoyaltyToken.sol +``` +`Flattened file written at src/Contract.flattened.sol` +Now open the `Contract.flattened.sol` file and copy all source code, go to the [block explorer](https://apothem.blocksscan.io/address/xdc27f4D21150640df0856fF6CB5d57eB4447CC59AD#transactions) and click on Verify and Publish. +![image](https://user-images.githubusercontent.com/114102465/203114917-29ec08e6-3810-45ef-995a-771c52ea967c.png) + +![image](https://user-images.githubusercontent.com/114102465/203115094-9e3dbfc4-5f85-41d7-8bd4-c6ef3705bf65.png) + +![image](https://user-images.githubusercontent.com/114102465/203115311-5c360ae2-381b-49f6-bc89-da87ded7818a.png) + +![image](https://user-images.githubusercontent.com/114102465/203115584-93e90371-8560-460d-8758-a5024d51e4d6.png) + +If everything is correctly filled out, your contract page on the block explorer should display a new tab called Contract. + +--- +For more information about XDC Network, Please Visit [XDC Network Documention](https://docs.xdc.community/).
+For more information about Foundry, Please Visit [Foundry Book](https://book.getfoundry.sh/).
+XDC Network [Disocrd](https://discord.gg/RBRx2HvbMr).
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 61067201a391c4267614b78cfe784b1185a79e67 Mon Sep 17 00:00:00 2001 From: Jon McBee Date: Tue, 22 Nov 2022 14:02:19 +0000 Subject: [PATCH 008/115] GitBook: [#137] Updating name --- SUMMARY.md | 2 +- goplugin/about.md | 13 +- ...and-deploy-an-xrc20-token-using-foundry.md | 601 +----------------- 3 files changed, 9 insertions(+), 607 deletions(-) diff --git a/SUMMARY.md b/SUMMARY.md index 9e9f7c76..cd63579a 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -102,7 +102,7 @@ * [How To Use Truffle and Ganache to Create DeFi App](learn/how-to-articles/how-to-use-truffle-and-ganache-to-create-defi-app.md) * [How to Migrate a dApp from Ethereum to the XDC Network Using Truffle](learn/how-to-articles/how-to-migrate-a-dapp-from-ethereum-to-the-xdc-network-using-truffle.md) * [How to Migrate from Solana to the XDC Network using Solang](learn/how-to-articles/how-to-migrate-from-solana-to-the-xdc-network-using-solang.md) - * [How to Create an XRC20 Token Using Foundry](learn/how-to-articles/how-to-create-an-xrc20-token-using-foundry.md) + * [How to Create and Deploy an XRC20 Token Using Foundry](learn/how-to-articles/how-to-create-and-deploy-an-xrc20-token-using-foundry.md) * [Community Support](learn/community-support.md) * [How to Report an Issue](learn/community-support/how-to-report-an-issue.md) * [Contributing and Feedback Guide](gitbook.md) diff --git a/goplugin/about.md b/goplugin/about.md index deaab2e1..25afb735 100644 --- a/goplugin/about.md +++ b/goplugin/about.md @@ -1,12 +1,11 @@ # About -
-

- -Plugin logo - -

-
+\ + + +[![Plugin logo](https://github.com/GoPlugin/Plugin/blob/main/docs/plugin.png)](https://goplugin.co) + +\ Decentralized Oracle Platform, provides cost effective solutions to any smart contract which runs on the XDC Network Eco System. diff --git a/learn/how-to-articles/how-to-create-and-deploy-an-xrc20-token-using-foundry.md b/learn/how-to-articles/how-to-create-and-deploy-an-xrc20-token-using-foundry.md index ef24a029..3d384ff9 100644 --- a/learn/how-to-articles/how-to-create-and-deploy-an-xrc20-token-using-foundry.md +++ b/learn/how-to-articles/how-to-create-and-deploy-an-xrc20-token-using-foundry.md @@ -1,600 +1,3 @@ -# How to make a XRC-20 Royalty Token with Foundry. -This tutorial’s purpose is to create an XRC-20 token with foundry that will return a royalty amount (of that XRC-20 token) to the original creator of the contract. - -# 🧭 Table of contents - -- [How to make a XRC-20 Royalty Token with Foundry.](#how-to-make-a-xrc-20-royalty-token-with-foundry) -- [🧭 Table of contents](#-table-of-contents) -- [📰 Overview](#-overview) - - [What you will learn](#what-you-will-learn) - - [What you will do](#what-you-will-do) -- [The Tools We're Using](#the-tools-were-using) -- [Set up Foundry](#set-up-foundry) - - [Installing Foundry For MacOS / Linux:](#installing-foundry-for-macos--linux) - - [Installing Foundry For Windows:](#installing-foundry-for-windows) -- [environment SetUp](#environment-setup) -- [Smart Contract Development](#smart-contract-development) -- [Testing Our Smart Contract](#testing-our-smart-contract) - - [Create your test contract](#create-your-test-contract) -- [Deploying Our Smart Contract To The Blockchain](#deploying-our-smart-contract-to-the-blockchain) - - [Deploying Our Contract](#deploying-our-contract) -- [Veryfing Contracts on the Block Explorer](#veryfing-contracts-on-the-block-explorer) - - -# 📰 Overview - -![image](https://user-images.githubusercontent.com/114102465/203121145-7cc2a09d-4b2d-4606-90a7-8531c036afd4.png) - - -[Foundry](https://book.getfoundry.sh/) is a smart contract development toolchain. - -Foundry manages your dependencies, compiles your project, runs tests, deploys, and lets you interact with the chain from the command-line and via Solidity scripts. - -### What you will learn -In this tutorial, you will learn how to set up Foundry and use it to build, test and deploy a XRC20 Royalty Token on both the XDC Network mainnet and XDC Apothem testnet. - -### What you will do -- Install and setup Foundry -- Create an XRC20 Royalty token -- Compile the Contract -- Deploy the Contract -- Interact with the XRC20 Royalty token -- Check the deployment status on [XDC Mainnet](https://explorer.xinfin.network/) and [XDC Testnet](https://apothem.blocksscan.io/) - -# The Tools We're Using -- [Foundry](https://book.getfoundry.sh/) : a fast Solidity development toolkit that enables developers to write their tests in Solidity. -- [Solmate](https://github.com/Rari-Capital/solmate) : a library that contains gas-optimized contracts such as ERC20, ERC721, and more. -- [Visual Studio Code](https://code.visualstudio.com/) : a source-code editor made by Microsoft with the Electron Framework, for Windows, Linux and macOS. -- [XDC Testnet explorer](https://explorer.xinfin.network/) -- [Testnet XDC Faucet](https://faucet.apothem.network/) : a faucet that gives 1000 XDC for test. -- [XDCPay](https://chrome.google.com/webstore/detail/xdcpay/bocpokimicclpaiekenaeelehdjllofo) : is an extension for accessing XDC's XDPoS enabled distributed applications, or "Dapps" in your browser. - -# Set up Foundry -Before we can start writing some code, we need to set up our environment. We're going to be writing our contracts and testing them in Foundry. - -### Installing Foundry For MacOS / Linux: - -Open-up terminal and type in the command: - -```bash -curl -L https://foundry.paradigm.xyz | bash -``` - -Afterward type: -```bash -foundryup -``` -Foundry should now be installed and ready to go! - -### Installing Foundry For Windows: - -If using Windows, you need to install Foundry from the source. First, install [Rust](https://rustup.rs/) with the [official documentation](https://book.getfoundry.sh/getting-started/installation). - -Then, open the command prompt and type in the command: -```bash -cargo install --git https://github.com/foundry-rs/foundry foundry-cli anvil --bins --locked -``` -To update from source, run the same command again. - -# environment SetUp - -Now that we've installed Foundry, it's time to set up our folder where we will write our smart contract. From the same terminal window that you installed Foundry, type the following commands: - -1. Make our folder where will we initialize our project. Then navigate into that folder with the following commands: -```bash -mkdir XRC20_Royalty && cd XRC20_Royalty -``` -2. Initialize our Foundry project within our XRC20_Royalty folder: -```bash -forge init -``` -3. Install Solmate into our Foundry project: -```bash -forge install rari-capital/solmate -``` -4. Create a remappings.txt file for the Solmate library we just added: -```bash -touch remappings.txt -``` -5. Open up your project in your IDE. For this tutorial, we’ll be using VSCode with this Solidity plugin: -```bash -code . -``` -Here’s what our IDE looks like. - -![image](https://user-images.githubusercontent.com/114102465/203061766-76fbddb4-35c4-40d7-82fb-c985eed36e70.png) - - -6. Add these lines to remappings.txt so we can easily call the Solmate library in our contract: -```bash -solmate/=lib/solmate/src/ -forge-std=lib/forge-std/src/ -``` -Now that our environment and libraries are set up, we'll move into developing our smart contract! - -# Smart Contract Development - -We will make a contract that passes tokens to the original contract creator whenever a token is transferred between wallets! - -1. In your IDE, navigate to `src/Counter.sol` and rename the file to `RoyaltyToken.sol`. - -2. Import the Solmate ERC20 library in `RoyaltyToken.sol` and change the name of the contract. Under `pragma solidity ^0.8.14;`, add the following lines of code: -```bash -import { ERC20 } from "solmate/tokens/ERC20.sol"; - -contract RoyaltyToken is ERC20 {} -``` -3. Add in our state variables for the royalties. In the contract, add an address `royaltyAddress` variable and uint256 `royaltyFeePercentage` variable: -```bash -contract RoyaltyToken is ERC20 { - address public royaltyAddress; - uint256 public royaltyFeePercentage; -} -``` -4. Make a constructor for the token. A constructor is what creates our token from the imported Solmate template. - -Add the following variables to the constructor: - -1. `string memory _name` -2. `string memory _token` -3. `uint8 _decimals` -4. `uint256 _royaltyFeePercentage` -5. `uint256 _initialSupply` -Directly after we’ve added these variables and closed the `()`, add `ERC20(_name, _symbol, _decimals)`. - -After that add brackets `{}` and inside the brackets set the following variables: - -Set `royaltyAddress` variable as the wallet address of the creator of the contract: `royaltyAddress = msg.sender;` -The `RoyaltyFeePercentage` as the constructor variable: `royaltyFeePercentage = _royaltyFeePercentage;` -Mint the tokens to the creator of the contract and pass in the `_initialSupply` variable: `_mint(msg.sender, _initialSupply);` -Our constructor should now look like the following: -```bash -contract RoyaltyToken is ERC20 { - address public royaltyAddress; - uint256 public royaltyFeePercentage; - - constructor( - string memory _name, - string memory _symbol, - uint8 _decimals, - uint256 _royaltyFeePercentage, - uint256 _initialSupply - ) ERC20(_name, _symbol, _decimals) { - royaltyAddress = msg.sender; - royaltyFeePercentage = _royaltyFeePercentage; - _mint(msg.sender, _initialSupply); - } -} -``` -5. Next, override the transfer function. -```bash -function transfer(address to, uint256 amount) public virtual returns (bool) { - balanceOf[msg.sender] -= amount; - - // Cannot overflow because the sum of all user - // balances can't exceed the max uint256 value. - unchecked { - balanceOf[to] += amount; - } - - emit Transfer(msg.sender, to, amount); - - return true; - } -``` - -Our contract now looks like this: - -```bash -pragma solidity ^0.8.14; - -import { ERC20 } from "solmate/tokens/ERC20.sol"; - -contract RoyaltyToken is ERC20 { - address public royaltyAddress; - uint256 public royaltyFeePercentage; - - constructor( - string memory _name, - string memory _symbol, - uint8 _decimals, - uint256 _royaltyFeePercentage, - uint256 _initialSupply - ) ERC20(_name, _symbol, _decimals) { - royaltyAddress = msg.sender; - royaltyFeePercentage = _royaltyFeePercentage; - _mint(msg.sender, _initialSupply); - } - - function transfer(address to, uint256 amount) public virtual returns (bool) { - balanceOf[msg.sender] -= amount; - - // Cannot overflow because the sum of all user - // balances can't exceed the max uint256 value. - unchecked { - balanceOf[to] += amount; - } - - emit Transfer(msg.sender, to, amount); - - return true; - } -} -``` -Add override after virtual in the function declaration: - - -`function transfer(address to, uint256 amount) public virtual override returns (bool) { -... -} ` -Inside of the `transfer` function, create a uint256 called `royaltyAmount` and set it equal to the amount in the function parameters multiplied by the `royaltyFeePercentage` divided by `100`. This calculates the royalty amount that we will be sending to our `royaltyAddress`. -```bash -uint256 royaltyAmount = amount * royaltyFeePercentage / 100; -``` -```bash -function transfer(address to, uint256 amount) public virtual returns (bool) { - uint256 royaltyAmount = amount * royaltyFeePercentage / 100; - balanceOf[msg.sender] -= amount; - - // Cannot overflow because the sum of all user - // balances can't exceed the max uint256 value. - unchecked { - balanceOf[to] += amount; - } - - emit Transfer(msg.sender, to, amount); - - return true; - } -``` -In the `unchecked {}` for the `balanceOf[to]`, subtract the amount by the `royaltyAmount` and add an additional `balanceOf[royaltyAddress]` where we add the `royaltyAmount`: - -```bash -function transfer(address to, uint256 amount) public virtual returns (bool) { - uint256 royaltyAmount = amount * royaltyFeePercentage / 100; - balanceOf[msg.sender] -= amount; - - // Cannot overflow because the sum of all user - // balances can't exceed the max uint256 value. - unchecked { - //subtract the amount by the royalty amount - balanceOf[to] += amount - royaltyAmount; - //add to the royaltyAddress wallet the royaltyAmount - balanceOf[royaltyAddress] += royaltyAmount; - } - - emit Transfer(msg.sender, to, amount); - - return true; - } -``` -Add an additional emit Transfer where we send the royaltyAddress the royaltyAmount. Additionally, subtract the original emit Transfer amount by the royaltyAmount: - -```bash -function transfer(address to, uint256 amount) public virtual override returns (bool) { - uint256 royaltyAmount = amount * royaltyFeePercentage / 100; - - balanceOf[msg.sender] -= amount; - - // Cannot overflow because the sum of all user - // balances can't exceed the max uint256 value. - - unchecked { - //subtract the amount by the royalty amount - balanceOf[to] += amount - royaltyAmount; - //add to the royaltyAddress wallet the royaltyAmount - balanceOf[royaltyAddress] += royaltyAmount; - } - //transfer to the royalty address - emit Transfer(msg.sender, royaltyAddress, royaltyAmount); - //transfer to the original address - emit Transfer(msg.sender, to, amount - royaltyAmount); - - return true; - } -``` -6. Our contract is now finished! In total it should look like this: - -```bash -// SPDX-License-Identifier: UNLICENSED -pragma solidity ^0.8.14; - -import { ERC20 } from "solmate/tokens/ERC20.sol"; - -contract RoyaltyToken is ERC20 { - - address public royaltyAddress; - uint256 public royaltyFeePercentage; - - constructor( - string memory _name, - string memory _symbol, - uint8 _decimals, - uint256 _royaltyFeePercentage, - uint256 _initialSupply - ) ERC20(_name, _symbol, _decimals) { - royaltyAddress = msg.sender; - royaltyFeePercentage = _royaltyFeePercentage; - _mint(msg.sender, _initialSupply); - } - - function transferWithRoyalty (address to, uint256 amount) public returns (bool) { - uint256 royaltyAmount = amount * royaltyFeePercentage / 100; - - transfer(royaltyAddress, royaltyAmount); - - transfer(to, amount - royaltyAmount); - - return true; - } - - function transfer(address to, uint256 amount) public virtual override returns (bool) { - uint256 royaltyAmount = amount * royaltyFeePercentage / 100; - - balanceOf[msg.sender] -= amount; - - // Cannot overflow because the sum of all user - // balances can't exceed the max uint256 value. - unchecked { - balanceOf[to] += amount - royaltyAmount; - balanceOf[royaltyAddress] += royaltyAmount; - } - //transfer to the royalty address - emit Transfer(msg.sender, royaltyAddress, royaltyAmount); - //transfer to the original address - emit Transfer(msg.sender, to, amount - royaltyAmount); - - return true; - } -} -``` - -# Testing Our Smart Contract -Thanks to Foundry, we can test our new `RoyaltyToken.sol` contract in Solidity! - -Set up your test contract - -1. In your IDE, head to `test/Counter.t.sol` and rename the file to `RoyaltyToken.t.sol`. - -2. Delete everything in the original body of `RoyaltyToken.t.sol`. - -3. Add our solidity version to the top: `pragma solidity ^0.8.14;`. - -4. Import the RoyaltyToken from `royaltyToken.sol`. Add `import {RoyaltyToken} from "src//RoyaltyToken.sol";` to the top of your contract. - -5. Import forge testing tools: `import "forge-std/Test.sol";`. - -6. Make a new contract called `RoyaltyTokenTest` and set it to a `Test`. Our contract should look like this. - -```bash -pragma solidity ^0.8.14; - -import {RoyaltyToken} from "src//RoyaltyToken.sol"; - -import "forge-std/Test.sol"; - -contract RoyaltyTokenTest is Test {} -``` -### Create your test contract -1. Create your `RoyaltyToken`, `RoyaltyFeePercentage`, and `InitialSupply` arguments. For this test, we will be using `2%` for the fee and `10,000` initial tokens: - -```bash -pragma solidity ^0.8.14; - -import {RoyaltyToken} from "src//RoyaltyToken.sol"; - -import "forge-std/Test.sol"; - -contract RoyaltyTokenTest is Test { - RoyaltyToken public token; - uint256 public royaltyFeePercentage = 2; - uint256 public initialSupply = 10 ** 4; -} -``` -2. Create a `setUp()` function that constructs our `RoyaltyToken`. -```bash -pragma solidity ^0.8.14; - -import {RoyaltyToken} from "src//RoyaltyToken.sol"; - -import "forge-std/Test.sol"; - -contract RoyaltyTokenTest is Test { - RoyaltyToken public token; - uint256 public royaltyFeePercentage = 2; - uint256 public initialSupply = 10 ** 4; - - function setUp() public { - token = new RoyaltyToken("RoyaltyToken", "ROYT", 18, royaltyFeePercentage, initialSupply); - } - -} -``` -3. Create a `testTransfer()` function that makes two dummy addresses and transfers funds between them. We will transfer 1,000 of the 10,000 tokens we created to an address. We're then going to check whether the address received 980 of those 1,000 tokens and whether our original contract address received the other 20. Afterward, we will initiate a transfer of 100 tokens between the newly created address and another wallet. We'll then check whether all 3 of the wallets have the correct amounts. -```bash -function testTransfer() public { - address alice = address(1); - address bob = address(2); - - token.transfer(alice, 1000); - - assertEq(token.balanceOf(alice), 980); - assertEq(token.balanceOf(address(this)), 9020); - - hoax(alice); - token.transfer(bob, 100); - - assertEq(token.balanceOf(alice), 880); - assertEq(token.balanceOf(bob), 98); - assertEq(token.balanceOf(address(this)), 9022); - } -``` -4. Our entire contract should look like this: -```bash -// SPDX-License-Identifier: UNLICENSED -pragma solidity ^0.8.14; - -import {RoyaltyToken} from "src//RoyaltyToken.sol"; - -import "forge-std/Test.sol"; - -contract RoyaltyTokenTest is Test { - RoyaltyToken public token; - uint256 public royaltyFeePercentage = 2; - uint256 public initialSupply = 10 ** 4; - - - function setUp() public { - token = new RoyaltyToken("RoyaltyToken", "ROYT", 18, royaltyFeePercentage, initialSupply); - } - - function testTransfer() public { - address alice = address(1); - address bob = address(2); - - token.transfer(alice, 1000); - - assertEq(token.balanceOf(alice), 980); - assertEq(token.balanceOf(address(this)), 9020); - - hoax(alice); - token.transfer(bob, 100); - - assertEq(token.balanceOf(alice), 880); - assertEq(token.balanceOf(bob), 98); - assertEq(token.balanceOf(address(this)), 9022); - } -} -``` -5. Now, let’s compile our contract. Open up that terminal window we used earlier and type the command `forge build` . -```bash -forge build -``` - -`Compiling... -[⠰] Compiling 19 files with 0.8.14 -[⠒] Solc 0.8.14 finished in 2.00s -Compiler run successful` - -Our smart contract is finished and is correctly compiling! Now let's test our smart contract to make sure it's actually doing what we want it to do. - -6. Open up terminal and run `forge test`. This runs our tests and helps us understand whether or not they passed. -```bash -forge test -``` - -`Compiling... -No files changed, compilation skipped - -Running 1 test for test/RoyaltyToken.t.sol:RoyaltyTokenTest -[PASS] testTransfer() (gas: 78242) -Test result: ok. 1 passed; 0 failed; finished in 1.45ms` - -If all goes well, you've just successfully made a smart contract in foundry, overrode the original transfer function, and ran some successful tests! Now, it's time to deploy the contract. - -# Deploying Our Smart Contract To The Blockchain -It's time for us to deploy our smart contract to the blockchain. - -1. Open up terminal and run `cast wallet new` - Create a new random keypair. -```bash -cast wallet new -``` - -`Successfully created new keypair. -Address: 0x80B75825D86a005453A08cD1a6Bd44C24d73A41d -Private Key: 0x4159ae5d34bb48367f9773c48de0e0effb2082681a69cd95f4e613246720af24` - -2. Now Copy the address and go to XDC faucet for [test XDC](https://faucet.apothem.network/), And replace `0x` by xdc.Click on request 1000 XDC. - -![image](https://user-images.githubusercontent.com/114102465/203102902-22b85584-271c-4755-8fc1-975955cecd80.png) - -We've got everything we need to deploy our contract to the blockchain now. - -### Deploying Our Contract -Head back to your terminal window to complete deployment. - -1. Open up the terminal and type the following command, replacing [PASTE YOUR PRIVATE KEY HERE] -```bash -forge create --rpc-url https://erpc.apothem.network --private-key [PASTE YOUR PRIVATE KEY HERE] src/RoyaltyToken.sol:RoyaltyToken --constructor-args "RoyaltyToken" "ROYT" 18 2 10000000000000000000000 --legacy -``` - -`Compiling... -No files changed, compilation skipped -Deployer: 0x80B75825D86a005453A08cD1a6Bd44C24d73A41d -Deployed to: 0x27f4D21150640df0856fF6CB5d57eB4447CC59AD -Transaction hash: 0x89f0edbf4755e93b8d25857e5a0fa0f7cae414cefac42e6ec9cb02930a932d41` - - -We can now see that our contract is deployed to the blockchain. If I copy the address in Deployed to, we can view the contract on [explorer](https://apothem.blocksscan.io/address/xdc27f4D21150640df0856fF6CB5d57eB4447CC59AD#transactions). - -![image](https://user-images.githubusercontent.com/114102465/203111916-f92d40c2-20d6-4e20-ae21-1e547f5d5d94.png) - -# Veryfing Contracts on the Block Explorer -Once you have successfully deployed your smart contract to the blockchain, it might be interesting to verify you contract on [Apothem Block Explorer](https://apothem.blocksscan.io/address/xdc27f4D21150640df0856fF6CB5d57eB4447CC59AD#transactions). -1. Flatten our smart contract, Open up the terminal and type the following command -```bash -forge flatten --output src/Contract.flattened.sol src/RoyaltyToken.sol -``` -`Flattened file written at src/Contract.flattened.sol` -Now open the `Contract.flattened.sol` file and copy all source code, go to the [block explorer](https://apothem.blocksscan.io/address/xdc27f4D21150640df0856fF6CB5d57eB4447CC59AD#transactions) and click on Verify and Publish. -![image](https://user-images.githubusercontent.com/114102465/203114917-29ec08e6-3810-45ef-995a-771c52ea967c.png) - -![image](https://user-images.githubusercontent.com/114102465/203115094-9e3dbfc4-5f85-41d7-8bd4-c6ef3705bf65.png) - -![image](https://user-images.githubusercontent.com/114102465/203115311-5c360ae2-381b-49f6-bc89-da87ded7818a.png) - -![image](https://user-images.githubusercontent.com/114102465/203115584-93e90371-8560-460d-8758-a5024d51e4d6.png) - -If everything is correctly filled out, your contract page on the block explorer should display a new tab called Contract. - ---- -For more information about XDC Network, Please Visit [XDC Network Documention](https://docs.xdc.community/).
-For more information about Foundry, Please Visit [Foundry Book](https://book.getfoundry.sh/).
-XDC Network [Disocrd](https://discord.gg/RBRx2HvbMr).
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# How to Create and Deploy an XRC20 Token Using Foundry +Hello World From 4fb2ce670cf4a65f69735a85da3b248b4de67770 Mon Sep 17 00:00:00 2001 From: Jon McBee Date: Tue, 22 Nov 2022 09:03:19 -0500 Subject: [PATCH 009/115] Update how-to-create-and-deploy-an-xrc20-token-using-foundry.md Promoting content after rename of doc --- ...and-deploy-an-xrc20-token-using-foundry.md | 601 +++++++++++++++++- 1 file changed, 599 insertions(+), 2 deletions(-) diff --git a/learn/how-to-articles/how-to-create-and-deploy-an-xrc20-token-using-foundry.md b/learn/how-to-articles/how-to-create-and-deploy-an-xrc20-token-using-foundry.md index 3d384ff9..680f0a85 100644 --- a/learn/how-to-articles/how-to-create-and-deploy-an-xrc20-token-using-foundry.md +++ b/learn/how-to-articles/how-to-create-and-deploy-an-xrc20-token-using-foundry.md @@ -1,3 +1,600 @@ -# How to Create and Deploy an XRC20 Token Using Foundry +# How to make a XRC-20 Royalty Token with Foundry. +This tutorial’s purpose is to create an XRC-20 token with foundry that will return a royalty amount (of that XRC-20 token) to the original creator of the contract. + +# 🧭 Table of contents + +- [How to make a XRC-20 Royalty Token with Foundry.](#how-to-make-a-xrc-20-royalty-token-with-foundry) +- [🧭 Table of contents](#-table-of-contents) +- [📰 Overview](#-overview) + - [What you will learn](#what-you-will-learn) + - [What you will do](#what-you-will-do) +- [The Tools We're Using](#the-tools-were-using) +- [Set up Foundry](#set-up-foundry) + - [Installing Foundry For MacOS / Linux:](#installing-foundry-for-macos--linux) + - [Installing Foundry For Windows:](#installing-foundry-for-windows) +- [environment SetUp](#environment-setup) +- [Smart Contract Development](#smart-contract-development) +- [Testing Our Smart Contract](#testing-our-smart-contract) + - [Create your test contract](#create-your-test-contract) +- [Deploying Our Smart Contract To The Blockchain](#deploying-our-smart-contract-to-the-blockchain) + - [Deploying Our Contract](#deploying-our-contract) +- [Veryfing Contracts on the Block Explorer](#veryfing-contracts-on-the-block-explorer) + + +# 📰 Overview + +![image](https://user-images.githubusercontent.com/114102465/203121145-7cc2a09d-4b2d-4606-90a7-8531c036afd4.png) + + +[Foundry](https://book.getfoundry.sh/) is a smart contract development toolchain. + +Foundry manages your dependencies, compiles your project, runs tests, deploys, and lets you interact with the chain from the command-line and via Solidity scripts. + +### What you will learn +In this tutorial, you will learn how to set up Foundry and use it to build, test and deploy a XRC20 Royalty Token on both the XDC Network mainnet and XDC Apothem testnet. + +### What you will do +- Install and setup Foundry +- Create an XRC20 Royalty token +- Compile the Contract +- Deploy the Contract +- Interact with the XRC20 Royalty token +- Check the deployment status on [XDC Mainnet](https://explorer.xinfin.network/) and [XDC Testnet](https://apothem.blocksscan.io/) + +# The Tools We're Using +- [Foundry](https://book.getfoundry.sh/) : a fast Solidity development toolkit that enables developers to write their tests in Solidity. +- [Solmate](https://github.com/Rari-Capital/solmate) : a library that contains gas-optimized contracts such as ERC20, ERC721, and more. +- [Visual Studio Code](https://code.visualstudio.com/) : a source-code editor made by Microsoft with the Electron Framework, for Windows, Linux and macOS. +- [XDC Testnet explorer](https://explorer.xinfin.network/) +- [Testnet XDC Faucet](https://faucet.apothem.network/) : a faucet that gives 1000 XDC for test. +- [XDCPay](https://chrome.google.com/webstore/detail/xdcpay/bocpokimicclpaiekenaeelehdjllofo) : is an extension for accessing XDC's XDPoS enabled distributed applications, or "Dapps" in your browser. + +# Set up Foundry +Before we can start writing some code, we need to set up our environment. We're going to be writing our contracts and testing them in Foundry. + +### Installing Foundry For MacOS / Linux: + +Open-up terminal and type in the command: + +```bash +curl -L https://foundry.paradigm.xyz | bash +``` + +Afterward type: +```bash +foundryup +``` +Foundry should now be installed and ready to go! + +### Installing Foundry For Windows: + +If using Windows, you need to install Foundry from the source. First, install [Rust](https://rustup.rs/) with the [official documentation](https://book.getfoundry.sh/getting-started/installation). + +Then, open the command prompt and type in the command: +```bash +cargo install --git https://github.com/foundry-rs/foundry foundry-cli anvil --bins --locked +``` +To update from source, run the same command again. + +# environment SetUp + +Now that we've installed Foundry, it's time to set up our folder where we will write our smart contract. From the same terminal window that you installed Foundry, type the following commands: + +1. Make our folder where will we initialize our project. Then navigate into that folder with the following commands: +```bash +mkdir XRC20_Royalty && cd XRC20_Royalty +``` +2. Initialize our Foundry project within our XRC20_Royalty folder: +```bash +forge init +``` +3. Install Solmate into our Foundry project: +```bash +forge install rari-capital/solmate +``` +4. Create a remappings.txt file for the Solmate library we just added: +```bash +touch remappings.txt +``` +5. Open up your project in your IDE. For this tutorial, we’ll be using VSCode with this Solidity plugin: +```bash +code . +``` +Here’s what our IDE looks like. + +![image](https://user-images.githubusercontent.com/114102465/203061766-76fbddb4-35c4-40d7-82fb-c985eed36e70.png) + + +6. Add these lines to remappings.txt so we can easily call the Solmate library in our contract: +```bash +solmate/=lib/solmate/src/ +forge-std=lib/forge-std/src/ +``` +Now that our environment and libraries are set up, we'll move into developing our smart contract! + +# Smart Contract Development + +We will make a contract that passes tokens to the original contract creator whenever a token is transferred between wallets! + +1. In your IDE, navigate to `src/Counter.sol` and rename the file to `RoyaltyToken.sol`. + +2. Import the Solmate ERC20 library in `RoyaltyToken.sol` and change the name of the contract. Under `pragma solidity ^0.8.14;`, add the following lines of code: +```bash +import { ERC20 } from "solmate/tokens/ERC20.sol"; + +contract RoyaltyToken is ERC20 {} +``` +3. Add in our state variables for the royalties. In the contract, add an address `royaltyAddress` variable and uint256 `royaltyFeePercentage` variable: +```bash +contract RoyaltyToken is ERC20 { + address public royaltyAddress; + uint256 public royaltyFeePercentage; +} +``` +4. Make a constructor for the token. A constructor is what creates our token from the imported Solmate template. + +Add the following variables to the constructor: + +1. `string memory _name` +2. `string memory _token` +3. `uint8 _decimals` +4. `uint256 _royaltyFeePercentage` +5. `uint256 _initialSupply` +Directly after we’ve added these variables and closed the `()`, add `ERC20(_name, _symbol, _decimals)`. + +After that add brackets `{}` and inside the brackets set the following variables: + +Set `royaltyAddress` variable as the wallet address of the creator of the contract: `royaltyAddress = msg.sender;` +The `RoyaltyFeePercentage` as the constructor variable: `royaltyFeePercentage = _royaltyFeePercentage;` +Mint the tokens to the creator of the contract and pass in the `_initialSupply` variable: `_mint(msg.sender, _initialSupply);` +Our constructor should now look like the following: +```bash +contract RoyaltyToken is ERC20 { + address public royaltyAddress; + uint256 public royaltyFeePercentage; + + constructor( + string memory _name, + string memory _symbol, + uint8 _decimals, + uint256 _royaltyFeePercentage, + uint256 _initialSupply + ) ERC20(_name, _symbol, _decimals) { + royaltyAddress = msg.sender; + royaltyFeePercentage = _royaltyFeePercentage; + _mint(msg.sender, _initialSupply); + } +} +``` +5. Next, override the transfer function. +```bash +function transfer(address to, uint256 amount) public virtual returns (bool) { + balanceOf[msg.sender] -= amount; + + // Cannot overflow because the sum of all user + // balances can't exceed the max uint256 value. + unchecked { + balanceOf[to] += amount; + } + + emit Transfer(msg.sender, to, amount); + + return true; + } +``` + +Our contract now looks like this: + +```bash +pragma solidity ^0.8.14; + +import { ERC20 } from "solmate/tokens/ERC20.sol"; + +contract RoyaltyToken is ERC20 { + address public royaltyAddress; + uint256 public royaltyFeePercentage; + + constructor( + string memory _name, + string memory _symbol, + uint8 _decimals, + uint256 _royaltyFeePercentage, + uint256 _initialSupply + ) ERC20(_name, _symbol, _decimals) { + royaltyAddress = msg.sender; + royaltyFeePercentage = _royaltyFeePercentage; + _mint(msg.sender, _initialSupply); + } + + function transfer(address to, uint256 amount) public virtual returns (bool) { + balanceOf[msg.sender] -= amount; + + // Cannot overflow because the sum of all user + // balances can't exceed the max uint256 value. + unchecked { + balanceOf[to] += amount; + } + + emit Transfer(msg.sender, to, amount); + + return true; + } +} +``` +Add override after virtual in the function declaration: + + +`function transfer(address to, uint256 amount) public virtual override returns (bool) { +... +} ` +Inside of the `transfer` function, create a uint256 called `royaltyAmount` and set it equal to the amount in the function parameters multiplied by the `royaltyFeePercentage` divided by `100`. This calculates the royalty amount that we will be sending to our `royaltyAddress`. +```bash +uint256 royaltyAmount = amount * royaltyFeePercentage / 100; +``` +```bash +function transfer(address to, uint256 amount) public virtual returns (bool) { + uint256 royaltyAmount = amount * royaltyFeePercentage / 100; + balanceOf[msg.sender] -= amount; + + // Cannot overflow because the sum of all user + // balances can't exceed the max uint256 value. + unchecked { + balanceOf[to] += amount; + } + + emit Transfer(msg.sender, to, amount); + + return true; + } +``` +In the `unchecked {}` for the `balanceOf[to]`, subtract the amount by the `royaltyAmount` and add an additional `balanceOf[royaltyAddress]` where we add the `royaltyAmount`: + +```bash +function transfer(address to, uint256 amount) public virtual returns (bool) { + uint256 royaltyAmount = amount * royaltyFeePercentage / 100; + balanceOf[msg.sender] -= amount; + + // Cannot overflow because the sum of all user + // balances can't exceed the max uint256 value. + unchecked { + //subtract the amount by the royalty amount + balanceOf[to] += amount - royaltyAmount; + //add to the royaltyAddress wallet the royaltyAmount + balanceOf[royaltyAddress] += royaltyAmount; + } + + emit Transfer(msg.sender, to, amount); + + return true; + } +``` +Add an additional emit Transfer where we send the royaltyAddress the royaltyAmount. Additionally, subtract the original emit Transfer amount by the royaltyAmount: + +```bash +function transfer(address to, uint256 amount) public virtual override returns (bool) { + uint256 royaltyAmount = amount * royaltyFeePercentage / 100; + + balanceOf[msg.sender] -= amount; + + // Cannot overflow because the sum of all user + // balances can't exceed the max uint256 value. + + unchecked { + //subtract the amount by the royalty amount + balanceOf[to] += amount - royaltyAmount; + //add to the royaltyAddress wallet the royaltyAmount + balanceOf[royaltyAddress] += royaltyAmount; + } + //transfer to the royalty address + emit Transfer(msg.sender, royaltyAddress, royaltyAmount); + //transfer to the original address + emit Transfer(msg.sender, to, amount - royaltyAmount); + + return true; + } +``` +6. Our contract is now finished! In total it should look like this: + +```bash +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.14; + +import { ERC20 } from "solmate/tokens/ERC20.sol"; + +contract RoyaltyToken is ERC20 { + + address public royaltyAddress; + uint256 public royaltyFeePercentage; + + constructor( + string memory _name, + string memory _symbol, + uint8 _decimals, + uint256 _royaltyFeePercentage, + uint256 _initialSupply + ) ERC20(_name, _symbol, _decimals) { + royaltyAddress = msg.sender; + royaltyFeePercentage = _royaltyFeePercentage; + _mint(msg.sender, _initialSupply); + } + + function transferWithRoyalty (address to, uint256 amount) public returns (bool) { + uint256 royaltyAmount = amount * royaltyFeePercentage / 100; + + transfer(royaltyAddress, royaltyAmount); + + transfer(to, amount - royaltyAmount); + + return true; + } + + function transfer(address to, uint256 amount) public virtual override returns (bool) { + uint256 royaltyAmount = amount * royaltyFeePercentage / 100; + + balanceOf[msg.sender] -= amount; + + // Cannot overflow because the sum of all user + // balances can't exceed the max uint256 value. + unchecked { + balanceOf[to] += amount - royaltyAmount; + balanceOf[royaltyAddress] += royaltyAmount; + } + //transfer to the royalty address + emit Transfer(msg.sender, royaltyAddress, royaltyAmount); + //transfer to the original address + emit Transfer(msg.sender, to, amount - royaltyAmount); + + return true; + } +} +``` + +# Testing Our Smart Contract +Thanks to Foundry, we can test our new `RoyaltyToken.sol` contract in Solidity! + +Set up your test contract + +1. In your IDE, head to `test/Counter.t.sol` and rename the file to `RoyaltyToken.t.sol`. + +2. Delete everything in the original body of `RoyaltyToken.t.sol`. + +3. Add our solidity version to the top: `pragma solidity ^0.8.14;`. + +4. Import the RoyaltyToken from `royaltyToken.sol`. Add `import {RoyaltyToken} from "src//RoyaltyToken.sol";` to the top of your contract. + +5. Import forge testing tools: `import "forge-std/Test.sol";`. + +6. Make a new contract called `RoyaltyTokenTest` and set it to a `Test`. Our contract should look like this. + +```bash +pragma solidity ^0.8.14; + +import {RoyaltyToken} from "src//RoyaltyToken.sol"; + +import "forge-std/Test.sol"; + +contract RoyaltyTokenTest is Test {} +``` +### Create your test contract +1. Create your `RoyaltyToken`, `RoyaltyFeePercentage`, and `InitialSupply` arguments. For this test, we will be using `2%` for the fee and `10,000` initial tokens: + +```bash +pragma solidity ^0.8.14; + +import {RoyaltyToken} from "src//RoyaltyToken.sol"; + +import "forge-std/Test.sol"; + +contract RoyaltyTokenTest is Test { + RoyaltyToken public token; + uint256 public royaltyFeePercentage = 2; + uint256 public initialSupply = 10 ** 4; +} +``` +2. Create a `setUp()` function that constructs our `RoyaltyToken`. +```bash +pragma solidity ^0.8.14; + +import {RoyaltyToken} from "src//RoyaltyToken.sol"; + +import "forge-std/Test.sol"; + +contract RoyaltyTokenTest is Test { + RoyaltyToken public token; + uint256 public royaltyFeePercentage = 2; + uint256 public initialSupply = 10 ** 4; + + function setUp() public { + token = new RoyaltyToken("RoyaltyToken", "ROYT", 18, royaltyFeePercentage, initialSupply); + } + +} +``` +3. Create a `testTransfer()` function that makes two dummy addresses and transfers funds between them. We will transfer 1,000 of the 10,000 tokens we created to an address. We're then going to check whether the address received 980 of those 1,000 tokens and whether our original contract address received the other 20. Afterward, we will initiate a transfer of 100 tokens between the newly created address and another wallet. We'll then check whether all 3 of the wallets have the correct amounts. +```bash +function testTransfer() public { + address alice = address(1); + address bob = address(2); + + token.transfer(alice, 1000); + + assertEq(token.balanceOf(alice), 980); + assertEq(token.balanceOf(address(this)), 9020); + + hoax(alice); + token.transfer(bob, 100); + + assertEq(token.balanceOf(alice), 880); + assertEq(token.balanceOf(bob), 98); + assertEq(token.balanceOf(address(this)), 9022); + } +``` +4. Our entire contract should look like this: +```bash +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.14; + +import {RoyaltyToken} from "src//RoyaltyToken.sol"; + +import "forge-std/Test.sol"; + +contract RoyaltyTokenTest is Test { + RoyaltyToken public token; + uint256 public royaltyFeePercentage = 2; + uint256 public initialSupply = 10 ** 4; + + + function setUp() public { + token = new RoyaltyToken("RoyaltyToken", "ROYT", 18, royaltyFeePercentage, initialSupply); + } + + function testTransfer() public { + address alice = address(1); + address bob = address(2); + + token.transfer(alice, 1000); + + assertEq(token.balanceOf(alice), 980); + assertEq(token.balanceOf(address(this)), 9020); + + hoax(alice); + token.transfer(bob, 100); + + assertEq(token.balanceOf(alice), 880); + assertEq(token.balanceOf(bob), 98); + assertEq(token.balanceOf(address(this)), 9022); + } +} +``` +5. Now, let’s compile our contract. Open up that terminal window we used earlier and type the command `forge build` . +```bash +forge build +``` + +`Compiling... +[⠰] Compiling 19 files with 0.8.14 +[⠒] Solc 0.8.14 finished in 2.00s +Compiler run successful` + +Our smart contract is finished and is correctly compiling! Now let's test our smart contract to make sure it's actually doing what we want it to do. + +6. Open up terminal and run `forge test`. This runs our tests and helps us understand whether or not they passed. +```bash +forge test +``` + +`Compiling... +No files changed, compilation skipped + +Running 1 test for test/RoyaltyToken.t.sol:RoyaltyTokenTest +[PASS] testTransfer() (gas: 78242) +Test result: ok. 1 passed; 0 failed; finished in 1.45ms` + +If all goes well, you've just successfully made a smart contract in foundry, overrode the original transfer function, and ran some successful tests! Now, it's time to deploy the contract. + +# Deploying Our Smart Contract To The Blockchain +It's time for us to deploy our smart contract to the blockchain. + +1. Open up terminal and run `cast wallet new` - Create a new random keypair. +```bash +cast wallet new +``` + +`Successfully created new keypair. +Address: 0x80B75825D86a005453A08cD1a6Bd44C24d73A41d +Private Key: 0x4159ae5d34bb48367f9773c48de0e0effb2082681a69cd95f4e613246720af24` + +2. Now Copy the address and go to XDC faucet for [test XDC](https://faucet.apothem.network/), And replace `0x` by xdc.Click on request 1000 XDC. + +![image](https://user-images.githubusercontent.com/114102465/203102902-22b85584-271c-4755-8fc1-975955cecd80.png) + +We've got everything we need to deploy our contract to the blockchain now. + +### Deploying Our Contract +Head back to your terminal window to complete deployment. + +1. Open up the terminal and type the following command, replacing [PASTE YOUR PRIVATE KEY HERE] +```bash +forge create --rpc-url https://erpc.apothem.network --private-key [PASTE YOUR PRIVATE KEY HERE] src/RoyaltyToken.sol:RoyaltyToken --constructor-args "RoyaltyToken" "ROYT" 18 2 10000000000000000000000 --legacy +``` + +`Compiling... +No files changed, compilation skipped +Deployer: 0x80B75825D86a005453A08cD1a6Bd44C24d73A41d +Deployed to: 0x27f4D21150640df0856fF6CB5d57eB4447CC59AD +Transaction hash: 0x89f0edbf4755e93b8d25857e5a0fa0f7cae414cefac42e6ec9cb02930a932d41` + + +We can now see that our contract is deployed to the blockchain. If I copy the address in Deployed to, we can view the contract on [explorer](https://apothem.blocksscan.io/address/xdc27f4D21150640df0856fF6CB5d57eB4447CC59AD#transactions). + +![image](https://user-images.githubusercontent.com/114102465/203111916-f92d40c2-20d6-4e20-ae21-1e547f5d5d94.png) + +# Veryfing Contracts on the Block Explorer +Once you have successfully deployed your smart contract to the blockchain, it might be interesting to verify you contract on [Apothem Block Explorer](https://apothem.blocksscan.io/address/xdc27f4D21150640df0856fF6CB5d57eB4447CC59AD#transactions). +1. Flatten our smart contract, Open up the terminal and type the following command +```bash +forge flatten --output src/Contract.flattened.sol src/RoyaltyToken.sol +``` +`Flattened file written at src/Contract.flattened.sol` +Now open the `Contract.flattened.sol` file and copy all source code, go to the [block explorer](https://apothem.blocksscan.io/address/xdc27f4D21150640df0856fF6CB5d57eB4447CC59AD#transactions) and click on Verify and Publish. +![image](https://user-images.githubusercontent.com/114102465/203114917-29ec08e6-3810-45ef-995a-771c52ea967c.png) + +![image](https://user-images.githubusercontent.com/114102465/203115094-9e3dbfc4-5f85-41d7-8bd4-c6ef3705bf65.png) + +![image](https://user-images.githubusercontent.com/114102465/203115311-5c360ae2-381b-49f6-bc89-da87ded7818a.png) + +![image](https://user-images.githubusercontent.com/114102465/203115584-93e90371-8560-460d-8758-a5024d51e4d6.png) + +If everything is correctly filled out, your contract page on the block explorer should display a new tab called Contract. + +--- +For more information about XDC Network, Please Visit [XDC Network Documention](https://docs.xdc.org/).
+For more information about Foundry, Please Visit [Foundry Book](https://book.getfoundry.sh/).
+XDC Network [Disocrd](https://discord.gg/RBRx2HvbMr).
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -Hello World From 8a51f8bf50793e7f21a2480bef48faa26af9b3cc Mon Sep 17 00:00:00 2001 From: Lance Lilly Date: Wed, 23 Nov 2022 17:57:32 +0000 Subject: [PATCH 010/115] GitBook: [#139] No subject --- get-started/xips.md | 1 + 1 file changed, 1 insertion(+) diff --git a/get-started/xips.md b/get-started/xips.md index 9315e4b3..132d76a5 100644 --- a/get-started/xips.md +++ b/get-started/xips.md @@ -189,6 +189,7 @@ The current XIP editors are * Jon McBee (@walterblueu) * Fisher Yu (@fishermanymc) +* Phillipe Menezes Emeritus XIP editors are From 00d67836dfaccc1159b2cbb47aa2a8e8afdbd9cd Mon Sep 17 00:00:00 2001 From: Jon McBee Date: Wed, 8 Feb 2023 01:54:07 +0000 Subject: [PATCH 011/115] GITBOOK-140: subnets --- .gitbook/assets/.env | 1 + .gitbook/assets/.env.sample | 0 .gitbook/assets/.gitignore | 2 + .gitbook/assets/.pwd | 0 .gitbook/assets/add.sh | 21 + .gitbook/assets/bootnode.key | 1 + .gitbook/assets/enodes_list.txt | 0 .gitbook/assets/genesis.json | 113 ++ .gitbook/assets/labels | 1489 +++++++++++++++++ .gitbook/assets/local run.sh | 45 + .gitbook/assets/milestones | 1271 ++++++++++++++ .gitbook/assets/node1 (1).sh | 45 + .gitbook/assets/node1.sh | 30 + .gitbook/assets/node2 (1).sh | 30 + .gitbook/assets/node2.sh | 45 + .gitbook/assets/node3 (1).sh | 45 + .gitbook/assets/node3.sh | 30 + .gitbook/assets/node4.sh | 21 + .gitbook/assets/node5.sh | 21 + .gitbook/assets/node6.sh | 21 + .gitbook/assets/pwd.txt | 0 SUMMARY.md | 3 + ...flattening-smart-contracts-with-hardhat.md | 151 +- ...flattening-smart-contracts-with-truffle.md | 163 +- get-started/dev-environment/brownie.md | 239 ++- get-started/xdc-design/xdpos-2.0.md | 2 +- .../how-to-report-an-issue.md | 2 +- ...-network-using-openzeppelin-and-hardhat.md | 167 +- ...o-interact-with-xrc20-and-xrc721-tokens.md | 346 ++-- ...and-deploy-an-xrc20-token-using-foundry.md | 288 ++-- ...rc20-token-using-hardhat-and-typescript.md | 201 +-- ...and-deploy-an-xrc20-token-using-hardhat.md | 206 +-- ...and-deploy-an-xrc20-token-using-truffle.md | 209 ++- ...-and-deploy-an-xrc721-nft-using-hardhat.md | 197 +-- ...ntract-on-the-xdc-network-using-truffle.md | 163 +- ...hereum-to-the-xdc-network-using-truffle.md | 149 +- ...tion-on-the-xdc-network-using-ethers.js.md | 155 +- ...-truffle-and-ganache-to-create-defi-app.md | 195 ++- .../one-click-installer-masternode-macos.md | 2 +- subnets/README.md | 174 ++ subnets/deploy-a-subnet.md | 3 + subnets/requirements.md | 2 + 42 files changed, 4737 insertions(+), 1511 deletions(-) create mode 100644 .gitbook/assets/.env create mode 100644 .gitbook/assets/.env.sample create mode 100644 .gitbook/assets/.gitignore create mode 100644 .gitbook/assets/.pwd create mode 100644 .gitbook/assets/add.sh create mode 100644 .gitbook/assets/bootnode.key create mode 100644 .gitbook/assets/enodes_list.txt create mode 100644 .gitbook/assets/genesis.json create mode 100644 .gitbook/assets/labels create mode 100644 .gitbook/assets/local run.sh create mode 100644 .gitbook/assets/milestones create mode 100644 .gitbook/assets/node1 (1).sh create mode 100644 .gitbook/assets/node1.sh create mode 100644 .gitbook/assets/node2 (1).sh create mode 100644 .gitbook/assets/node2.sh create mode 100644 .gitbook/assets/node3 (1).sh create mode 100644 .gitbook/assets/node3.sh create mode 100644 .gitbook/assets/node4.sh create mode 100644 .gitbook/assets/node5.sh create mode 100644 .gitbook/assets/node6.sh create mode 100644 .gitbook/assets/pwd.txt create mode 100644 subnets/README.md create mode 100644 subnets/deploy-a-subnet.md create mode 100644 subnets/requirements.md diff --git a/.gitbook/assets/.env b/.gitbook/assets/.env new file mode 100644 index 00000000..eec3aa44 --- /dev/null +++ b/.gitbook/assets/.env @@ -0,0 +1 @@ +PRIVATE_KEY_1= diff --git a/.gitbook/assets/.env.sample b/.gitbook/assets/.env.sample new file mode 100644 index 00000000..e69de29b diff --git a/.gitbook/assets/.gitignore b/.gitbook/assets/.gitignore new file mode 100644 index 00000000..97dba2e5 --- /dev/null +++ b/.gitbook/assets/.gitignore @@ -0,0 +1,2 @@ +*_network +nodes* \ No newline at end of file diff --git a/.gitbook/assets/.pwd b/.gitbook/assets/.pwd new file mode 100644 index 00000000..e69de29b diff --git a/.gitbook/assets/add.sh b/.gitbook/assets/add.sh new file mode 100644 index 00000000..3ece0b45 --- /dev/null +++ b/.gitbook/assets/add.sh @@ -0,0 +1,21 @@ +#!/bin/bash +export $(cat .env | xargs) +Bin_NAME=XDC +WORK_DIR=$PWD +PROJECT_DIR="/home/xinfin/github/xinFinOrg/XDPoS-TestNet-Apothem" +cd $PROJECT_DIR && make $Bin_NAME +cd $WORK_DIR + +if [ ! -d ./nodes/4/$Bin_NAME/chaindata ] +then + wallet4=$(${PROJECT_DIR}/build/bin/$Bin_NAME account import --password .pwd --datadir ./nodes/4 <(echo ${PRIVATE_KEY_4}) | awk -v FS="({|})" '{print $2}') + ${PROJECT_DIR}/build/bin/$Bin_NAME --datadir ./nodes/4 init ./genesis/genesis.json +else + wallet4=$(${PROJECT_DIR}/build/bin/$Bin_NAME account list --datadir ./nodes/4 | head -n 1 | awk -v FS="({|})" '{print $2}') +fi + +VERBOSITY=3 +GASPRICE="1" + +echo Starting the nodes ... +${PROJECT_DIR}/build/bin/$Bin_NAME --bootnodes "enode://7d8ffe6d28f738d8b7c32f11fb6daa6204abae990a842025b0a969aabdda702aca95a821746332c2e618a92736538761b1660aa9defb099bc46b16db28992bc9@127.0.0.1:30301" --syncmode 'full' --datadir ./nodes/4 --networkid 853 --port 30306 --rpc --rpccorsdomain "*" --rpcaddr 0.0.0.0 --rpcport 8548 --rpcvhosts "*" --unlock "${wallet4}" --password ./.pwd --mine --gasprice "${GASPRICE}" --targetgaslimit "420000000" --verbosity ${VERBOSITY} --ethstats "XinFin-MasterNode-04:xinfin_network_stats@localhost:3005" diff --git a/.gitbook/assets/bootnode.key b/.gitbook/assets/bootnode.key new file mode 100644 index 00000000..fee293bd --- /dev/null +++ b/.gitbook/assets/bootnode.key @@ -0,0 +1 @@ +7b7742af825d6dd12b5da3ad24a01692ff0c17269db139b29712e35ac0840eb5 \ No newline at end of file diff --git a/.gitbook/assets/enodes_list.txt b/.gitbook/assets/enodes_list.txt new file mode 100644 index 00000000..e69de29b diff --git a/.gitbook/assets/genesis.json b/.gitbook/assets/genesis.json new file mode 100644 index 00000000..5458f864 --- /dev/null +++ b/.gitbook/assets/genesis.json @@ -0,0 +1,113 @@ +{ + "config": { + "chainId": 50, + "homesteadBlock": 1, + "eip150Block": 2, + "eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "eip155Block": 3, + "eip158Block": 3, + "byzantiumBlock": 4, + "XDPoS": { + "period": 2, + "epoch": 900, + "reward": 5000, + "rewardCheckpoint": 900, + "gap": 450, + "foudationWalletAddr": "xdc92a289fe95a85c53b8d0d113cbaef0c1ec98ac65" + } + }, + "nonce": "0x0", + "timestamp": "0x5cefae27", + "extraData": "0x000000000000000000000000000000000000000000000000000000000000000025c65b4b379ac37cf78357c4915f73677022eaffc7d49d0a2cf198deebd6ce581af465944ec8b2bbcfccdea1006a5cfa7d9484b5b293b46964c265c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "gasLimit": "0x47b760", + "difficulty": "0x1", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "coinbase": "xdc0000000000000000000000000000000000000000", + "alloc": { + "0000000000000000000000000000000000000000": { + "balance": "0x0" + }, + "0000000000000000000000000000000000000001": { + "balance": "0x0" + }, + "0000000000000000000000000000000000000088": { + "code": "0x606060405260043610610196576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063012679511461019b578063025e7c27146101c957806302aa9be21461022c57806306a49fce1461026e5780630db02622146102d85780630e3e4fb81461030157806315febd68146103715780632a3640b1146103a85780632d15cc041461042a5780632f9c4bba146104b8578063302b687214610522578063326586521461058e5780633477ee2e14610640578063441a3e70146106a357806358e7525f146106cf5780635b860d271461071c5780635b9cd8cc146107695780636dd7d8ea1461082457806372e44a3814610852578063a9a981a31461089f578063a9ff959e146108c8578063ae6e43f5146108f1578063b642facd1461092a578063c45607df146109a3578063d09f1ab4146109f0578063d161c76714610a19578063d51b9e9314610a42578063d55b7dff14610a93578063ef18374a14610abc578063f2ee3c7d14610ae5578063f5c9512514610b1e578063f8ac9dd514610b4c575b600080fd5b6101c7600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610b75565b005b34156101d457600080fd5b6101ea60048080359060200190919050506111fc565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561023757600080fd5b61026c600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061123b565b005b341561027957600080fd5b610281611796565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156102c45780820151818401526020810190506102a9565b505050509050019250505060405180910390f35b34156102e357600080fd5b6102eb61182a565b6040518082815260200191505060405180910390f35b341561030c57600080fd5b610357600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611830565b604051808215151515815260200191505060405180910390f35b341561037c57600080fd5b610392600480803590602001909190505061185f565b6040518082815260200191505060405180910390f35b34156103b357600080fd5b6103e8600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190919050506118bb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561043557600080fd5b610461600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611909565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156104a4578082015181840152602081019050610489565b505050509050019250505060405180910390f35b34156104c357600080fd5b6104cb6119dc565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561050e5780820151818401526020810190506104f3565b505050509050019250505060405180910390f35b341561052d57600080fd5b610578600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611a79565b6040518082815260200191505060405180910390f35b341561059957600080fd5b6105c5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611b03565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156106055780820151818401526020810190506105ea565b50505050905090810190601f1680156106325780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561064b57600080fd5b6106616004808035906020019091905050611da2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156106ae57600080fd5b6106cd6004808035906020019091908035906020019091905050611de1565b005b34156106da57600080fd5b610706600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061208d565b6040518082815260200191505060405180910390f35b341561072757600080fd5b610753600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506120d9565b6040518082815260200191505060405180910390f35b341561077457600080fd5b6107a9600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190919050506121a1565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156107e95780820151818401526020810190506107ce565b50505050905090810190601f1680156108165780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610850600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061226a565b005b341561085d57600080fd5b610889600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612653565b6040518082815260200191505060405180910390f35b34156108aa57600080fd5b6108b261266b565b6040518082815260200191505060405180910390f35b34156108d357600080fd5b6108db612671565b6040518082815260200191505060405180910390f35b34156108fc57600080fd5b610928600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612677565b005b341561093557600080fd5b610961600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612c36565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156109ae57600080fd5b6109da600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612ca2565b6040518082815260200191505060405180910390f35b34156109fb57600080fd5b610a03612cee565b6040518082815260200191505060405180910390f35b3415610a2457600080fd5b610a2c612cf4565b6040518082815260200191505060405180910390f35b3415610a4d57600080fd5b610a79600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612cfa565b604051808215151515815260200191505060405180910390f35b3415610a9e57600080fd5b610aa6612d53565b6040518082815260200191505060405180910390f35b3415610ac757600080fd5b610acf612d59565b6040518082815260200191505060405180910390f35b3415610af057600080fd5b610b1c600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612d63565b005b3415610b2957600080fd5b610b4a600480803590602001908201803590602001919091929050506134f1565b005b3415610b5757600080fd5b610b5f6135f0565b6040518082815260200191505060405180910390f35b6000600b543410151515610b8857600080fd5b6000600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050141580610c1c57506000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050115b1515610c2757600080fd5b81600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160149054906101000a900460ff16151515610c8457600080fd5b610cd934600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546135f690919063ffffffff16565b915060088054806001018281610cef919061362d565b9160005260206000209001600085909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506060604051908101604052803373ffffffffffffffffffffffffffffffffffffffff16815260200160011515815260200183815250600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548160ff02191690831515021790555060408201518160010155905050610eb834600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135f690919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f5160016009546135f690919063ffffffff16565b6009819055506000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905014156110185760078054806001018281610fb6919061362d565b9160005260206000209001600033909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050600a600081548092919060010191905055505b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054806001018281611069919061362d565b9160005260206000209001600085909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054806001018281611109919061362d565b9160005260206000209001600033909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550507f7635f1d87b47fba9f2b09e56eb4be75cca030e0cb179c1602ac9261d39a8f5c1338434604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a1505050565b60078181548110151561120b57fe5b90600052602060002090016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000828280600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156112cd57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff16600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561140657600b546113f882600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461361490919063ffffffff16565b1015151561140557600080fd5b5b61145b84600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015461361490919063ffffffff16565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555061153384600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461361490919063ffffffff16565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506115cb43600f546135f690919063ffffffff16565b9250611632846000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000868152602001908152602001600020546135f690919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000858152602001908152602001600020819055506000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010180548060010182816116db9190613659565b9160005260206000209001600085909190915055507faa0e554f781c3c3b2be110a0557f260f11af9a8aa2c64bc1e7a31dbb21e32fa2338686604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a15050505050565b61179e613685565b600880548060200260200160405190810160405280929190818152602001828054801561182057602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116117d6575b5050505050905090565b600a5481565b60056020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000838152602001908152602001600020549050919050565b6006602052816000526040600020818154811015156118d657fe5b90600052602060002090016000915091509054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611911613685565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156119d057602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611986575b50505050509050919050565b6119e4613699565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101805480602002602001604051908101604052809291908181526020018280548015611a6f57602002820191906000526020600020905b815481526020019060010190808311611a5b575b5050505050905090565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611b0b6136ad565b611b1482612cfa565b15611c655760036000611b2684612c36565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600160036000611b6f86612c36565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905003815481101515611bba57fe5b90600052602060002090018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611c595780601f10611c2e57610100808354040283529160200191611c59565b820191906000526020600020905b815481529060010190602001808311611c3c57829003601f168201915b50505050509050611d9d565b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905003815481101515611cf657fe5b90600052602060002090018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611d955780601f10611d6a57610100808354040283529160200191611d95565b820191906000526020600020905b815481529060010190602001808311611d7857829003601f168201915b505050505090505b919050565b600881815481101515611db157fe5b90600052602060002090016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008282600082111515611df457600080fd5b814310151515611e0357600080fd5b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600084815260200190815260200160002054111515611e6457600080fd5b816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010182815481101515611eb357fe5b906000526020600020900154141515611ecb57600080fd5b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008681526020019081526020016000205492506000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000868152602001908152602001600020600090556000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010184815481101515611fc457fe5b9060005260206000209001600090553373ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050151561201357600080fd5b7ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b568338685604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a15050505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101549050919050565b60008082600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160149054906101000a900460ff16151561213857600080fd5b61214184612c36565b915061214b612d59565b6064600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020540281151561219757fe5b0492505050919050565b6003602052816000526040600020818154811015156121bc57fe5b9060005260206000209001600091509150508054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156122625780601f1061223757610100808354040283529160200191612262565b820191906000526020600020905b81548152906001019060200180831161224557829003601f168201915b505050505081565b600c54341015151561227b57600080fd5b80600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160149054906101000a900460ff1615156122d757600080fd5b61232c34600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546135f690919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055506000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054141561249b57600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480600101828161244b919061362d565b9160005260206000209001600033909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505b61252d34600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135f690919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f66a9138482c99e9baf08860110ef332cc0c23b4a199a53593d8db0fc8f96fbfc338334604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a15050565b60046020528060005260406000206000915090505481565b60095481565b600f5481565b6000806000833373ffffffffffffffffffffffffffffffffffffffff16600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561271957600080fd5b84600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160149054906101000a900460ff16151561277557600080fd5b6000600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160146101000a81548160ff0219169083151502179055506127e6600160095461361490919063ffffffff16565b600981905550600094505b6008805490508510156128bb578573ffffffffffffffffffffffffffffffffffffffff1660088681548110151561282457fe5b906000526020600020900160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156128ae5760088581548110151561287b57fe5b906000526020600020900160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556128bb565b84806001019550506127f1565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054935061299284600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015461361490919063ffffffff16565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055506000600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612a7243600e546135f690919063ffffffff16565b9250612ad9846000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000868152602001908152602001600020546135f690919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000858152602001908152602001600020819055506000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018054806001018281612b829190613659565b9160005260206000209001600085909190915055507f4edf3e325d0063213a39f9085522994a1c44bea5f39e7d63ef61260a1e58c6d33387604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a1505050505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050919050565b600d5481565b600e5481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160149054906101000a900460ff169050919050565b600b5481565b6000600a54905090565b600080612d6e613685565b600080600033600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160149054906101000a900460ff161515612dcf57600080fd5b87600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160149054906101000a900460ff161515612e2b57600080fd5b612e3433612c36565b9750612e3f89612c36565b9650600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151515612ed757600080fd5b6001600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550604b612fc4612d59565b6064600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020540281151561301057fe5b041015156134e65760016008805490500360405180591061302e5750595b9080825280602002602001820160405250955060009450600093505b600880549050841015613357578673ffffffffffffffffffffffffffffffffffffffff166130b160088681548110151561308057fe5b906000526020600020900160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612c36565b73ffffffffffffffffffffffffffffffffffffffff16141561334a576130e3600160095461361490919063ffffffff16565b6009819055506008848154811015156130f857fe5b906000526020600020900160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16868680600101975081518110151561313857fe5b9060200190602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060088481548110151561318357fe5b906000526020600020900160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600160006008868154811015156131c457fe5b906000526020600020900160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556000820160146101000a81549060ff021916905560018201600090555050600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006132bb91906136c1565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061330691906136e2565b600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600090555b838060010194505061304a565b600092505b600780549050831015613439578673ffffffffffffffffffffffffffffffffffffffff1660078481548110151561338f57fe5b906000526020600020900160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561342c576007838154811015156133e657fe5b906000526020600020900160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600a6000815480929190600190039190505550613439565b828060010193505061335c565b7fe18d61a5bf4aa2ab40afc88aa9039d27ae17ff4ec1c65f5f414df6f02ce8b35e8787604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019060200280838360005b838110156134d15780820151818401526020810190506134b6565b50505050905001935050505060405180910390a15b505050505050505050565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060010182816135429190613703565b91600052602060002090016000848490919290919250919061356592919061372f565b50507f949360d814b28a3b393a68909efe1fee120ee09cac30f360a0f80ab5415a611a338383604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a15050565b600c5481565b600080828401905083811015151561360a57fe5b8091505092915050565b600082821115151561362257fe5b818303905092915050565b8154818355818115116136545781836000526020600020918201910161365391906137af565b5b505050565b8154818355818115116136805781836000526020600020918201910161367f91906137af565b5b505050565b602060405190810160405280600081525090565b602060405190810160405280600081525090565b602060405190810160405280600081525090565b50805460008255906000526020600020908101906136df91906137d4565b50565b508054600082559060005260206000209081019061370091906137af565b50565b81548183558181151161372a5781836000526020600020918201910161372991906137d4565b5b505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061377057803560ff191683800117855561379e565b8280016001018555821561379e579182015b8281111561379d578235825591602001919060010190613782565b5b5090506137ab91906137af565b5090565b6137d191905b808211156137cd5760008160009055506001016137b5565b5090565b90565b6137fd91905b808211156137f957600081816137f09190613800565b506001016137da565b5090565b90565b50805460018160011615610100020316600290046000825580601f106138265750613845565b601f01602090049060005260206000209081019061384491906137af565b5b505600a165627a7a72305820f5bbb127b52ce86c873faef85cff176563476a5e49a3d88eaa9a06a8f432c9080029", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000007": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000008": "0x0000000000000000000000000000000000000000000000000000000000000003", + "0x0000000000000000000000000000000000000000000000000000000000000009": "0x0000000000000000000000000000000000000000000000000000000000000003", + "0x000000000000000000000000000000000000000000000000000000000000000a": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x000000000000000000000000000000000000000000000000000000000000000b": "0x000000000000000000000000000000000000000000084595161401484a000000", + "0x000000000000000000000000000000000000000000000000000000000000000c": "0x00000000000000000000000000000000000000000000054b40b1f852bda00000", + "0x000000000000000000000000000000000000000000000000000000000000000d": "0x0000000000000000000000000000000000000000000000000000000000000012", + "0x000000000000000000000000000000000000000000000000000000000000000e": "0x000000000000000000000000000000000000000000000000000000000013c680", + "0x000000000000000000000000000000000000000000000000000000000000000f": "0x0000000000000000000000000000000000000000000000000000000000069780", + "0x1cb68bf63bb3b55abf504ef789bb06e8b2b266a334ca39892e163225a47b8267": "0x000000000000000000000000000000000000000000084595161401484a000000", + "0x2c6b8fd5b2b39958a7e5a98eebf2c1c31122e89c7961ce1025e69a3d3f07fd20": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x3639e2dfabac2c6baff147abd66f76b8e526e974a9a2a14163169aa03d2f8d4b": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x473ba2a6d1aa200b3118a8abc51fe248a479e882e6c655ae014d9c66fbc181ed": "0x00000000000000000000000025c65b4b379ac37cf78357c4915f73677022eaff", + "0x473ba2a6d1aa200b3118a8abc51fe248a479e882e6c655ae014d9c66fbc181ee": "0x000000000000000000000000c7d49d0a2cf198deebd6ce581af465944ec8b2bb", + "0x473ba2a6d1aa200b3118a8abc51fe248a479e882e6c655ae014d9c66fbc181ef": "0x000000000000000000000000cfccdea1006a5cfa7d9484b5b293b46964c265c0", + "0x53dbb2c13e64ef254df4bb7c7b541e84dd24870927f98f151db88daa464fb4dc": "0x000000000000000000000000381047523972c9fdc3aa343e0b96900a8e2fa765", + "0x67a3292220e327ce969d100d7e4d83dd4b05efa763a5e4cdb04e0c0107736472": "0x000000000000000000000001381047523972c9fdc3aa343e0b96900a8e2fa765", + "0x67a3292220e327ce969d100d7e4d83dd4b05efa763a5e4cdb04e0c0107736473": "0x000000000000000000000000000000000000000000084595161401484a000000", + "0x78dfe8da08db00fe2cd4ddbd11f9cb7e4245ce35275d7734678593942034e181": "0x000000000000000000000001381047523972c9fdc3aa343e0b96900a8e2fa765", + "0x78dfe8da08db00fe2cd4ddbd11f9cb7e4245ce35275d7734678593942034e182": "0x000000000000000000000000000000000000000000084595161401484a000000", + "0x90e333b6971c3ecd09a0da09b031d63cdd2dc213d199a66955a8bf7df8a8142d": "0x000000000000000000000000000000000000000000084595161401484a000000", + "0xa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688": "0x000000000000000000000000381047523972c9fdc3aa343e0b96900a8e2fa765", + "0xac80bed7555f6f181a34915490d97d0bfe2c0e116d1c73b34523ca0d9749955c": "0x000000000000000000000000381047523972c9fdc3aa343e0b96900a8e2fa765", + "0xae7e2a864ae923819e93a9f6183bc7ca0dcee93a0759238acd92344ad3216228": "0x000000000000000000000000000000000000000000084595161401484a000000", + "0xb375859c4c97d60e8a699586dc5dd215f38f99e40430bb9261f085ee694ffb2c": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0xd5d5b62da76a3a9f2df0e9276cbaf8973a778bf41f7f4942e06243f195493e99": "0x000000000000000000000000381047523972c9fdc3aa343e0b96900a8e2fa765", + "0xec8699f61c2c8bbdbc66463590788e526c60046dda98e8c70df1fb756050baa4": "0x0000000000000000000000000000000000000000000000000000000000000003", + "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee3": "0x00000000000000000000000025c65b4b379ac37cf78357c4915f73677022eaff", + "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee4": "0x000000000000000000000000c7d49d0a2cf198deebd6ce581af465944ec8b2bb", + "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee5": "0x000000000000000000000000cfccdea1006a5cfa7d9484b5b293b46964c265c0", + "0xf4dd36495f675c407ac8f8d6dd8cc40162c854dba3ce4ce8919af34d0b1ed47c": "0x000000000000000000000001381047523972c9fdc3aa343e0b96900a8e2fa765", + "0xf4dd36495f675c407ac8f8d6dd8cc40162c854dba3ce4ce8919af34d0b1ed47d": "0x000000000000000000000000000000000000000000084595161401484a000000" + }, + "balance": "0x18d0bf423c03d8de000000" + }, + "0000000000000000000000000000000000000089": { + "code": "0x6060604052600436106100565763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663e341eaa4811461005b578063e7ec6aef14610076578063f4145a83146100df575b600080fd5b341561006657600080fd5b610074600435602435610104565b005b341561008157600080fd5b61008c600435610227565b60405160208082528190810183818151815260200191508051906020019060200280838360005b838110156100cb5780820151838201526020016100b3565b505050509050019250505060405180910390f35b34156100ea57600080fd5b6100f26102ac565b60405190815260200160405180910390f35b438290101561011257600080fd5b600280546101289184910263ffffffff6102b216565b43111561013457600080fd5b600082815260016020819052604090912080549091810161015583826102c8565b5060009182526020808320919091018390558282528190526040902080546001810161018183826102c8565b506000918252602090912001805473ffffffffffffffffffffffffffffffffffffffff19163373ffffffffffffffffffffffffffffffffffffffff8116919091179091557f62855fa22e051687c32ac285857751f6d3f2c100c72756d8d30cb7ecb1f64f5490838360405173ffffffffffffffffffffffffffffffffffffffff909316835260208301919091526040808301919091526060909101905180910390a15050565b61022f6102f1565b600082815260208181526040918290208054909290918281020190519081016040528092919081815260200182805480156102a057602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610275575b50505050509050919050565b60025481565b6000828201838110156102c157fe5b9392505050565b8154818355818115116102ec576000838152602090206102ec918101908301610303565b505050565b60206040519081016040526000815290565b61032191905b8082111561031d5760008155600101610309565b5090565b905600a165627a7a72305820a8ceddaea8e4ae00991e2ae81c8c88e160dd8770f255523282c24c2df4c30ec70029", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000002": "0x0000000000000000000000000000000000000000000000000000000000000384" + }, + "balance": "0x0" + }, + "0000000000000000000000000000000000000090": { + "code": "0x6060604052600436106100615763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663284180fc811461006657806334d38600146100d8578063d442d6cc14610129578063e11f5ba21461015a575b600080fd5b341561007157600080fd5b610085600160a060020a0360043516610170565b60405160208082528190810183818151815260200191508051906020019060200280838360005b838110156100c45780820151838201526020016100ac565b505050509050019250505060405180910390f35b34156100e357600080fd5b61012760046024813581810190830135806020818102016040519081016040528093929190818152602001838360200280828437509496506101f395505050505050565b005b341561013457600080fd5b610148600160a060020a0360043516610243565b60405190815260200160405180910390f35b341561016557600080fd5b61012760043561025e565b61017861028e565b60008083600160a060020a0316600160a060020a031681526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156101e757602002820191906000526020600020905b815481526001909101906020018083116101d2575b50505050509050919050565b610384430661032081101561020757600080fd5b610352811061021557600080fd5b600160a060020a033316600090815260208190526040902082805161023e9291602001906102a0565b505050565b600160a060020a031660009081526001602052604090205490565b610384430661035281101561027257600080fd5b50600160a060020a033316600090815260016020526040902055565b60206040519081016040526000815290565b8280548282559060005260206000209081019282156102dd579160200282015b828111156102dd57825182556020909201916001909101906102c0565b506102e99291506102ed565b5090565b61030791905b808211156102e957600081556001016102f3565b905600a165627a7a7230582034991c8dc4001fc254f3ba2811c05d2e7d29bee3908946ca56d1545b2c852de20029", + "balance": "0x0" + }, + "0000000000000000000000000000000000000099": { + "code": "0x60606040526004361061011c5763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663025e7c278114610165578063173825d91461019757806320ea8d86146101b65780632f54bf6e146101cc5780633411c81c146101ff57806354741525146102215780637065cb4814610250578063784547a71461026f5780638b51d13f146102855780639ace38c21461029b578063a0e67e2b14610349578063a8abe69a146103af578063b5dc40c3146103d2578063b77bf600146103e8578063ba51a6df146103fb578063c01a8c8414610411578063c642747414610427578063d74f8edd1461048c578063dc8452cd1461049f578063e20056e6146104b2578063ee22610b146104d7575b60003411156101635733600160a060020a03167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c3460405190815260200160405180910390a25b005b341561017057600080fd5b61017b6004356104ed565b604051600160a060020a03909116815260200160405180910390f35b34156101a257600080fd5b610163600160a060020a0360043516610515565b34156101c157600080fd5b6101636004356106aa565b34156101d757600080fd5b6101eb600160a060020a0360043516610788565b604051901515815260200160405180910390f35b341561020a57600080fd5b6101eb600435600160a060020a036024351661079d565b341561022c57600080fd5b61023e600435151560243515156107bd565b60405190815260200160405180910390f35b341561025b57600080fd5b610163600160a060020a0360043516610829565b341561027a57600080fd5b6101eb600435610965565b341561029057600080fd5b61023e6004356109e9565b34156102a657600080fd5b6102b1600435610a58565b604051600160a060020a038516815260208101849052811515606082015260806040820181815290820184818151815260200191508051906020019080838360005b8381101561030b5780820151838201526020016102f3565b50505050905090810190601f1680156103385780820380516001836020036101000a031916815260200191505b509550505050505060405180910390f35b341561035457600080fd5b61035c610b36565b60405160208082528190810183818151815260200191508051906020019060200280838360005b8381101561039b578082015183820152602001610383565b505050509050019250505060405180910390f35b34156103ba57600080fd5b61035c60043560243560443515156064351515610b9f565b34156103dd57600080fd5b61035c600435610cc7565b34156103f357600080fd5b61023e610e2b565b341561040657600080fd5b610163600435610e31565b341561041c57600080fd5b610163600435610ec4565b341561043257600080fd5b61023e60048035600160a060020a03169060248035919060649060443590810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650610fb295505050505050565b341561049757600080fd5b61023e610fd1565b34156104aa57600080fd5b61023e610fd6565b34156104bd57600080fd5b610163600160a060020a0360043581169060243516610fdc565b34156104e257600080fd5b61016360043561118a565b60038054829081106104fb57fe5b600091825260209091200154600160a060020a0316905081565b600030600160a060020a031633600160a060020a031614151561053757600080fd5b600160a060020a038216600090815260026020526040902054829060ff16151561056057600080fd5b600160a060020a0383166000908152600260205260408120805460ff1916905591505b600354600019018210156106435782600160a060020a03166003838154811015156105aa57fe5b600091825260209091200154600160a060020a03161415610638576003805460001981019081106105d757fe5b60009182526020909120015460038054600160a060020a0390921691849081106105fd57fe5b6000918252602090912001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055610643565b600190910190610583565b6003805460001901906106569082611442565b50600354600454111561066f5760035461066f90610e31565b82600160a060020a03167f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b9060405160405180910390a2505050565b33600160a060020a03811660009081526002602052604090205460ff1615156106d257600080fd5b600082815260016020908152604080832033600160a060020a038116855292529091205483919060ff16151561070757600080fd5b600084815260208190526040902060030154849060ff161561072857600080fd5b6000858152600160209081526040808320600160a060020a033316808552925291829020805460ff1916905586917ff6a317157440607f36269043eb55f1287a5a19ba2216afeab88cd46cbcfb88e9905160405180910390a35050505050565b60026020526000908152604090205460ff1681565b600160209081526000928352604080842090915290825290205460ff1681565b6000805b600554811015610822578380156107ea575060008181526020819052604090206003015460ff16155b8061080e575082801561080e575060008181526020819052604090206003015460ff165b1561081a576001820191505b6001016107c1565b5092915050565b30600160a060020a031633600160a060020a031614151561084957600080fd5b600160a060020a038116600090815260026020526040902054819060ff161561087157600080fd5b81600160a060020a038116151561088757600080fd5b600380549050600101600454603282111580156108a45750818111155b80156108af57508015155b80156108ba57508115155b15156108c557600080fd5b600160a060020a0385166000908152600260205260409020805460ff1916600190811790915560038054909181016108fd8382611442565b506000918252602090912001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0387169081179091557ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d60405160405180910390a25050505050565b600080805b6003548110156109e2576000848152600160205260408120600380549192918490811061099357fe5b6000918252602080832090910154600160a060020a0316835282019290925260400190205460ff16156109c7576001820191505b6004548214156109da57600192506109e2565b60010161096a565b5050919050565b6000805b600354811015610a525760008381526001602052604081206003805491929184908110610a1657fe5b6000918252602080832090910154600160a060020a0316835282019290925260400190205460ff1615610a4a576001820191505b6001016109ed565b50919050565b60006020528060005260406000206000915090508060000160009054906101000a9004600160a060020a031690806001015490806002018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610b235780601f10610af857610100808354040283529160200191610b23565b820191906000526020600020905b815481529060010190602001808311610b0657829003601f168201915b5050506003909301549192505060ff1684565b610b3e61146b565b6003805480602002602001604051908101604052809291908181526020018280548015610b9457602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311610b76575b505050505090505b90565b610ba761146b565b610baf61146b565b600080600554604051805910610bc25750595b9080825280602002602001820160405250925060009150600090505b600554811015610c5757858015610c07575060008181526020819052604090206003015460ff16155b80610c2b5750848015610c2b575060008181526020819052604090206003015460ff165b15610c4f5780838381518110610c3d57fe5b60209081029091010152600191909101905b600101610bde565b878703604051805910610c675750595b908082528060200260200182016040525093508790505b86811015610cbc57828181518110610c9257fe5b906020019060200201518489830381518110610caa57fe5b60209081029091010152600101610c7e565b505050949350505050565b610ccf61146b565b610cd761146b565b6003546000908190604051805910610cec5750595b9080825280602002602001820160405250925060009150600090505b600354811015610db45760008581526001602052604081206003805491929184908110610d3157fe5b6000918252602080832090910154600160a060020a0316835282019290925260400190205460ff1615610dac576003805482908110610d6c57fe5b600091825260209091200154600160a060020a0316838381518110610d8d57fe5b600160a060020a03909216602092830290910190910152600191909101905b600101610d08565b81604051805910610dc25750595b90808252806020026020018201604052509350600090505b81811015610e2357828181518110610dee57fe5b90602001906020020151848281518110610e0457fe5b600160a060020a03909216602092830290910190910152600101610dda565b505050919050565b60055481565b30600160a060020a031633600160a060020a0316141515610e5157600080fd5b6003548160328211801590610e665750818111155b8015610e7157508015155b8015610e7c57508115155b1515610e8757600080fd5b60048390557fa3f1ee9126a074d9326c682f561767f710e927faa811f7a99829d49dc421797a8360405190815260200160405180910390a1505050565b33600160a060020a03811660009081526002602052604090205460ff161515610eec57600080fd5b6000828152602081905260409020548290600160a060020a03161515610f1157600080fd5b600083815260016020908152604080832033600160a060020a038116855292529091205484919060ff1615610f4557600080fd5b6000858152600160208181526040808420600160a060020a033316808652925292839020805460ff191690921790915586917f4a504a94899432a9846e1aa406dceb1bcfd538bb839071d49d1e5e23f5be30ef905160405180910390a3610fab8561118a565b5050505050565b6000610fbf848484611345565b9050610fca81610ec4565b9392505050565b603281565b60045481565b600030600160a060020a031633600160a060020a0316141515610ffe57600080fd5b600160a060020a038316600090815260026020526040902054839060ff16151561102757600080fd5b600160a060020a038316600090815260026020526040902054839060ff161561104f57600080fd5b600092505b6003548310156110e85784600160a060020a031660038481548110151561107757fe5b600091825260209091200154600160a060020a031614156110dd57836003848154811015156110a257fe5b6000918252602090912001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03929092169190911790556110e8565b600190920191611054565b600160a060020a03808616600081815260026020526040808220805460ff199081169091559388168252908190208054909316600117909255907f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b90905160405180910390a283600160a060020a03167ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d60405160405180910390a25050505050565b33600160a060020a03811660009081526002602052604081205490919060ff1615156111b557600080fd5b600083815260016020908152604080832033600160a060020a038116855292529091205484919060ff1615156111ea57600080fd5b600085815260208190526040902060030154859060ff161561120b57600080fd5b61121486610965565b1561133d576000868152602081905260409081902060038101805460ff19166001908117909155815490820154919750600160a060020a03169160028801905180828054600181600116156101000203166002900480156112b65780601f1061128b576101008083540402835291602001916112b6565b820191906000526020600020905b81548152906001019060200180831161129957829003601f168201915b505091505060006040518083038185875af1925050501561130357857f33e13ecb54c3076d8e8bb8c2881800a4d972b792045ffae98fdf46df365fed7560405160405180910390a261133d565b857f526441bb6c1aba3c9a4a6ca1d6545da9c2333c8c48343ef398eb858d72b7923660405160405180910390a260038501805460ff191690555b505050505050565b600083600160a060020a038116151561135d57600080fd5b600554915060806040519081016040908152600160a060020a0387168252602080830187905281830186905260006060840181905285815290819052208151815473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0391909116178155602082015181600101556040820151816002019080516113e892916020019061147d565b506060820151600391909101805460ff191691151591909117905550600580546001019055817fc0ba8fe4b176c1714197d43b9cc6bcf797a4a7461c5fe8d0ef6e184ae7601e5160405160405180910390a2509392505050565b815481835581811511611466576000838152602090206114669181019083016114fb565b505050565b60206040519081016040526000815290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106114be57805160ff19168380011785556114eb565b828001600101855582156114eb579182015b828111156114eb5782518255916020019190600101906114d0565b506114f79291506114fb565b5090565b610b9c91905b808211156114f757600081556001016115015600a165627a7a72305820d42d65ce3cd184b1c0e98ae5fe9841a03ddd21c504e98c38f8d89df83b2b6be60029", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000003": "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x0000000000000000000000000000000000000000000000000000000000000004": "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x78b26c076ef10b04070ffc86c9b244b91eb38d2b654f4e2e617edf56d2d830d8": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0xc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b": "0x0000000000000000000000006aaf1ac2c2afdd2bca4fea2dc471d467781418c3", + "0xc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85c": "0x000000000000000000000000c476ce3240bb44e36746f74001d8a0d62bc917f6", + "0xc420d2a03bcba1d1b98a4b32ba6d074d885b5a5f366e4de6b9a7fd70184950cd": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + "balance": "0x0" + }, + "54d4369719bf06b194c32f8be57e2605dd5b59e5": { + "balance": "0x7912752226cec5131e000000" + }, + "746249c61f5832c5eed53172776b460491bdcd5c": { + "code": "0x60606040526004361061011c5763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663025e7c278114610165578063173825d91461019757806320ea8d86146101b65780632f54bf6e146101cc5780633411c81c146101ff57806354741525146102215780637065cb4814610250578063784547a71461026f5780638b51d13f146102855780639ace38c21461029b578063a0e67e2b14610349578063a8abe69a146103af578063b5dc40c3146103d2578063b77bf600146103e8578063ba51a6df146103fb578063c01a8c8414610411578063c642747414610427578063d74f8edd1461048c578063dc8452cd1461049f578063e20056e6146104b2578063ee22610b146104d7575b60003411156101635733600160a060020a03167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c3460405190815260200160405180910390a25b005b341561017057600080fd5b61017b6004356104ed565b604051600160a060020a03909116815260200160405180910390f35b34156101a257600080fd5b610163600160a060020a0360043516610515565b34156101c157600080fd5b6101636004356106aa565b34156101d757600080fd5b6101eb600160a060020a0360043516610788565b604051901515815260200160405180910390f35b341561020a57600080fd5b6101eb600435600160a060020a036024351661079d565b341561022c57600080fd5b61023e600435151560243515156107bd565b60405190815260200160405180910390f35b341561025b57600080fd5b610163600160a060020a0360043516610829565b341561027a57600080fd5b6101eb600435610965565b341561029057600080fd5b61023e6004356109e9565b34156102a657600080fd5b6102b1600435610a58565b604051600160a060020a038516815260208101849052811515606082015260806040820181815290820184818151815260200191508051906020019080838360005b8381101561030b5780820151838201526020016102f3565b50505050905090810190601f1680156103385780820380516001836020036101000a031916815260200191505b509550505050505060405180910390f35b341561035457600080fd5b61035c610b36565b60405160208082528190810183818151815260200191508051906020019060200280838360005b8381101561039b578082015183820152602001610383565b505050509050019250505060405180910390f35b34156103ba57600080fd5b61035c60043560243560443515156064351515610b9f565b34156103dd57600080fd5b61035c600435610cc7565b34156103f357600080fd5b61023e610e2b565b341561040657600080fd5b610163600435610e31565b341561041c57600080fd5b610163600435610ec4565b341561043257600080fd5b61023e60048035600160a060020a03169060248035919060649060443590810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650610fb295505050505050565b341561049757600080fd5b61023e610fd1565b34156104aa57600080fd5b61023e610fd6565b34156104bd57600080fd5b610163600160a060020a0360043581169060243516610fdc565b34156104e257600080fd5b61016360043561118a565b60038054829081106104fb57fe5b600091825260209091200154600160a060020a0316905081565b600030600160a060020a031633600160a060020a031614151561053757600080fd5b600160a060020a038216600090815260026020526040902054829060ff16151561056057600080fd5b600160a060020a0383166000908152600260205260408120805460ff1916905591505b600354600019018210156106435782600160a060020a03166003838154811015156105aa57fe5b600091825260209091200154600160a060020a03161415610638576003805460001981019081106105d757fe5b60009182526020909120015460038054600160a060020a0390921691849081106105fd57fe5b6000918252602090912001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055610643565b600190910190610583565b6003805460001901906106569082611442565b50600354600454111561066f5760035461066f90610e31565b82600160a060020a03167f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b9060405160405180910390a2505050565b33600160a060020a03811660009081526002602052604090205460ff1615156106d257600080fd5b600082815260016020908152604080832033600160a060020a038116855292529091205483919060ff16151561070757600080fd5b600084815260208190526040902060030154849060ff161561072857600080fd5b6000858152600160209081526040808320600160a060020a033316808552925291829020805460ff1916905586917ff6a317157440607f36269043eb55f1287a5a19ba2216afeab88cd46cbcfb88e9905160405180910390a35050505050565b60026020526000908152604090205460ff1681565b600160209081526000928352604080842090915290825290205460ff1681565b6000805b600554811015610822578380156107ea575060008181526020819052604090206003015460ff16155b8061080e575082801561080e575060008181526020819052604090206003015460ff165b1561081a576001820191505b6001016107c1565b5092915050565b30600160a060020a031633600160a060020a031614151561084957600080fd5b600160a060020a038116600090815260026020526040902054819060ff161561087157600080fd5b81600160a060020a038116151561088757600080fd5b600380549050600101600454603282111580156108a45750818111155b80156108af57508015155b80156108ba57508115155b15156108c557600080fd5b600160a060020a0385166000908152600260205260409020805460ff1916600190811790915560038054909181016108fd8382611442565b506000918252602090912001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0387169081179091557ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d60405160405180910390a25050505050565b600080805b6003548110156109e2576000848152600160205260408120600380549192918490811061099357fe5b6000918252602080832090910154600160a060020a0316835282019290925260400190205460ff16156109c7576001820191505b6004548214156109da57600192506109e2565b60010161096a565b5050919050565b6000805b600354811015610a525760008381526001602052604081206003805491929184908110610a1657fe5b6000918252602080832090910154600160a060020a0316835282019290925260400190205460ff1615610a4a576001820191505b6001016109ed565b50919050565b60006020528060005260406000206000915090508060000160009054906101000a9004600160a060020a031690806001015490806002018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610b235780601f10610af857610100808354040283529160200191610b23565b820191906000526020600020905b815481529060010190602001808311610b0657829003601f168201915b5050506003909301549192505060ff1684565b610b3e61146b565b6003805480602002602001604051908101604052809291908181526020018280548015610b9457602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311610b76575b505050505090505b90565b610ba761146b565b610baf61146b565b600080600554604051805910610bc25750595b9080825280602002602001820160405250925060009150600090505b600554811015610c5757858015610c07575060008181526020819052604090206003015460ff16155b80610c2b5750848015610c2b575060008181526020819052604090206003015460ff165b15610c4f5780838381518110610c3d57fe5b60209081029091010152600191909101905b600101610bde565b878703604051805910610c675750595b908082528060200260200182016040525093508790505b86811015610cbc57828181518110610c9257fe5b906020019060200201518489830381518110610caa57fe5b60209081029091010152600101610c7e565b505050949350505050565b610ccf61146b565b610cd761146b565b6003546000908190604051805910610cec5750595b9080825280602002602001820160405250925060009150600090505b600354811015610db45760008581526001602052604081206003805491929184908110610d3157fe5b6000918252602080832090910154600160a060020a0316835282019290925260400190205460ff1615610dac576003805482908110610d6c57fe5b600091825260209091200154600160a060020a0316838381518110610d8d57fe5b600160a060020a03909216602092830290910190910152600191909101905b600101610d08565b81604051805910610dc25750595b90808252806020026020018201604052509350600090505b81811015610e2357828181518110610dee57fe5b90602001906020020151848281518110610e0457fe5b600160a060020a03909216602092830290910190910152600101610dda565b505050919050565b60055481565b30600160a060020a031633600160a060020a0316141515610e5157600080fd5b6003548160328211801590610e665750818111155b8015610e7157508015155b8015610e7c57508115155b1515610e8757600080fd5b60048390557fa3f1ee9126a074d9326c682f561767f710e927faa811f7a99829d49dc421797a8360405190815260200160405180910390a1505050565b33600160a060020a03811660009081526002602052604090205460ff161515610eec57600080fd5b6000828152602081905260409020548290600160a060020a03161515610f1157600080fd5b600083815260016020908152604080832033600160a060020a038116855292529091205484919060ff1615610f4557600080fd5b6000858152600160208181526040808420600160a060020a033316808652925292839020805460ff191690921790915586917f4a504a94899432a9846e1aa406dceb1bcfd538bb839071d49d1e5e23f5be30ef905160405180910390a3610fab8561118a565b5050505050565b6000610fbf848484611345565b9050610fca81610ec4565b9392505050565b603281565b60045481565b600030600160a060020a031633600160a060020a0316141515610ffe57600080fd5b600160a060020a038316600090815260026020526040902054839060ff16151561102757600080fd5b600160a060020a038316600090815260026020526040902054839060ff161561104f57600080fd5b600092505b6003548310156110e85784600160a060020a031660038481548110151561107757fe5b600091825260209091200154600160a060020a031614156110dd57836003848154811015156110a257fe5b6000918252602090912001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03929092169190911790556110e8565b600190920191611054565b600160a060020a03808616600081815260026020526040808220805460ff199081169091559388168252908190208054909316600117909255907f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b90905160405180910390a283600160a060020a03167ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d60405160405180910390a25050505050565b33600160a060020a03811660009081526002602052604081205490919060ff1615156111b557600080fd5b600083815260016020908152604080832033600160a060020a038116855292529091205484919060ff1615156111ea57600080fd5b600085815260208190526040902060030154859060ff161561120b57600080fd5b61121486610965565b1561133d576000868152602081905260409081902060038101805460ff19166001908117909155815490820154919750600160a060020a03169160028801905180828054600181600116156101000203166002900480156112b65780601f1061128b576101008083540402835291602001916112b6565b820191906000526020600020905b81548152906001019060200180831161129957829003601f168201915b505091505060006040518083038185875af1925050501561130357857f33e13ecb54c3076d8e8bb8c2881800a4d972b792045ffae98fdf46df365fed7560405160405180910390a261133d565b857f526441bb6c1aba3c9a4a6ca1d6545da9c2333c8c48343ef398eb858d72b7923660405160405180910390a260038501805460ff191690555b505050505050565b600083600160a060020a038116151561135d57600080fd5b600554915060806040519081016040908152600160a060020a0387168252602080830187905281830186905260006060840181905285815290819052208151815473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0391909116178155602082015181600101556040820151816002019080516113e892916020019061147d565b506060820151600391909101805460ff191691151591909117905550600580546001019055817fc0ba8fe4b176c1714197d43b9cc6bcf797a4a7461c5fe8d0ef6e184ae7601e5160405160405180910390a2509392505050565b815481835581811511611466576000838152602090206114669181019083016114fb565b505050565b60206040519081016040526000815290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106114be57805160ff19168380011785556114eb565b828001600101855582156114eb579182015b828111156114eb5782518255916020019190600101906114d0565b506114f79291506114fb565b5090565b610b9c91905b808211156114f757600081556001016115015600a165627a7a72305820d42d65ce3cd184b1c0e98ae5fe9841a03ddd21c504e98c38f8d89df83b2b6be60029", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000003": "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x0000000000000000000000000000000000000000000000000000000000000004": "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x53a74cb8e1409f2fa6885f50a9cd170366c9e7e52c8ca5e4c8268ec2e66088e0": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0xb689ca06605d85e946f5fb4cd76cafa04abd8cd4d1cd4e2e8a559464b7f2b8ca": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0xc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b": "0x000000000000000000000000ca97040ea64b0eb127370b92f6941e9d0cb87134", + "0xc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85c": "0x000000000000000000000000d1c8103106710ba08b5596c0ed115b508c879c74" + }, + "balance": "0x0" + } + }, + "number": "0x0", + "gasUsed": "0x0", + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000" +} diff --git a/.gitbook/assets/labels b/.gitbook/assets/labels new file mode 100644 index 00000000..7b202152 --- /dev/null +++ b/.gitbook/assets/labels @@ -0,0 +1,1489 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Labels · XinFinOrg/Local_DPoS_Setup · GitHub + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ Skip to content + + + + + + + + + + + +
+ +
+ + + + + + + +
+ + + + + + +
+ + + + + + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + +
+ + + + + +
+ +
+ + + + + + +
+ + +

No labels! +

+

There aren’t any labels for this repository quite yet. +

+ +
+ + +
+
+ +
+ +
+ + + bug + + +
+ + + bug + + +
+
+ +
+ Something isn't working +
+ +
+
+ + + +
+ + +
+ +
+ + + duplicate + + +
+ + + duplicate + + +
+
+ +
+ This issue or pull request already exists +
+ +
+
+ + + +
+ + +
+ +
+ + + enhancement + + +
+ + + enhancement + + +
+
+ +
+ New feature or request +
+ +
+
+ + + +
+ + +
+ +
+ + + good first issue + + +
+ + + good first issue + + +
+
+ +
+ Good for newcomers +
+ +
+
+ + + +
+ + +
+ +
+ + + help wanted + + +
+ + + help wanted + + +
+
+ +
+ Extra attention is needed +
+ +
+
+ + + +
+ + +
+ +
+ + + invalid + + +
+ + + invalid + + +
+
+ +
+ This doesn't seem right +
+ +
+
+ + + +
+ + +
+ +
+ + + question + + +
+ + + question + + +
+
+ +
+ Further information is requested +
+ +
+
+ + + +
+ + +
+ +
+ + + wontfix + + +
+ + + wontfix + + +
+
+ +
+ This will not be worked on +
+ +
+
+ + + +
+ +
+
+
+ +
+ +
+ + +
+ +
+ + +
+
+ +
+ + + + + + + + + + + + + + + + + + +
+ +
+ + + diff --git a/.gitbook/assets/local run.sh b/.gitbook/assets/local run.sh new file mode 100644 index 00000000..32c505ea --- /dev/null +++ b/.gitbook/assets/local run.sh @@ -0,0 +1,45 @@ +#!/bin/bash +_interupt() { + echo "Shutdown $child_proc" + kill -TERM $child_proc + exit +} + +trap _interupt INT TERM + +touch .pwd +export $(cat .env | xargs) +Bin_NAME=XDC + +WORK_DIR=$PWD +PROJECT_DIR="/home/xinfin/github/xinFinOrg/XDPoS-TestNet-Apothem" +cd $PROJECT_DIR && make all +cd $WORK_DIR + +if [ ! -d ./nodes/1/$Bin_NAME/chaindata ] +then + wallet1=$(${PROJECT_DIR}/build/bin/$Bin_NAME account import --password .pwd --datadir ./nodes/1 <(echo ${PRIVATE_KEY_1}) | awk -v FS="({|})" '{print $2}') + wallet2=$(${PROJECT_DIR}/build/bin/$Bin_NAME account import --password .pwd --datadir ./nodes/2 <(echo ${PRIVATE_KEY_2}) | awk -v FS="({|})" '{print $2}') + wallet3=$(${PROJECT_DIR}/build/bin/$Bin_NAME account import --password .pwd --datadir ./nodes/3 <(echo ${PRIVATE_KEY_3}) | awk -v FS="({|})" '{print $2}') + ${PROJECT_DIR}/build/bin/$Bin_NAME --datadir ./nodes/1 init ./genesis/genesis.json + ${PROJECT_DIR}/build/bin/$Bin_NAME --datadir ./nodes/2 init ./genesis/genesis.json + ${PROJECT_DIR}/build/bin/$Bin_NAME --datadir ./nodes/3 init ./genesis/genesis.json +else + wallet1=$(${PROJECT_DIR}/build/bin/$Bin_NAME account list --datadir ./nodes/1 | head -n 1 | awk -v FS="({|})" '{print $2}') + wallet2=$(${PROJECT_DIR}/build/bin/$Bin_NAME account list --datadir ./nodes/2 | head -n 1 | awk -v FS="({|})" '{print $2}') + wallet3=$(${PROJECT_DIR}/build/bin/$Bin_NAME account list --datadir ./nodes/3 | head -n 1 | awk -v FS="({|})" '{print $2}') +fi + +VERBOSITY=3 +GASPRICE="1" + +echo Starting the bootnode ... +${PROJECT_DIR}/build/bin/bootnode -nodekey ./bootnode.key --addr 0.0.0.0:30301 & +child_proc=$! + +echo Starting the nodes ... +${PROJECT_DIR}/build/bin/$Bin_NAME --bootnodes "enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@127.0.0.1:30301" --syncmode "full" --datadir ./nodes/1 --networkid 853 --port 30303 --rpc --rpccorsdomain "*" --ws --wsaddr="0.0.0.0" --wsorigins "*" --wsport 8555 --rpcaddr 0.0.0.0 --rpcport 8545 --rpcvhosts "*" --unlock "${wallet1}" --password ./.pwd --mine --gasprice "${GASPRICE}" --targetgaslimit "420000000" --verbosity ${VERBOSITY} --rpcapi admin,db,eth,debug,miner,net,shh,txpool,personal,web3,XDPoS --ethstats "BlockWorks01:xinfin_network_stats@localhost:3005" & +child_proc="$child_proc $!" +${PROJECT_DIR}/build/bin/$Bin_NAME --bootnodes "enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@127.0.0.1:30301" --syncmode "full" --datadir ./nodes/2 --networkid 853 --port 30304 --rpc --rpccorsdomain "*" --ws --wsaddr="0.0.0.0" --wsorigins "*" --wsport 8556 --rpcaddr 0.0.0.0 --rpcport 8546 --rpcvhosts "*" --unlock "${wallet2}" --password ./.pwd --mine --gasprice "${GASPRICE}" --targetgaslimit "420000000" --verbosity ${VERBOSITY} --rpcapi admin,db,eth,debug,miner,net,shh,txpool,personal,web3,XDPoS --ethstats "BlockWorks02:xinfin_network_stats@localhost:3005" & +child_proc="$child_proc $!" +${PROJECT_DIR}/build/bin/$Bin_NAME --bootnodes "enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@127.0.0.1:30301" --syncmode "full" --datadir ./nodes/3 --networkid 853 --port 30305 --rpc --rpccorsdomain "*" --ws --wsaddr="0.0.0.0" --wsorigins "*" --wsport 8557 --rpcaddr 0.0.0.0 --rpcport 8547 --rpcvhosts "*" --unlock "${wallet3}" --password ./.pwd --mine --gasprice "${GASPRICE}" --targetgaslimit "420000000" --verbosity ${VERBOSITY} --rpcapi admin,db,eth,debug,miner,net,shh,txpool,personal,web3,XDPoS --ethstats "BlockWorks03:xinfin_network_stats@localhost:3005" diff --git a/.gitbook/assets/milestones b/.gitbook/assets/milestones new file mode 100644 index 00000000..bba1048e --- /dev/null +++ b/.gitbook/assets/milestones @@ -0,0 +1,1271 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Milestones - XinFinOrg/Local_DPoS_Setup · GitHub + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ Skip to content + + + + + + + + + + + +
+ +
+ + + + + + + +
+ + + + + + +
+ + + + + + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ + + + + + + + + + + + + + + + + + +
+ +
+ + + diff --git a/.gitbook/assets/node1 (1).sh b/.gitbook/assets/node1 (1).sh new file mode 100644 index 00000000..7564c44b --- /dev/null +++ b/.gitbook/assets/node1 (1).sh @@ -0,0 +1,45 @@ +#!/bin/bash +_interupt() { + echo "Shutdown $child_proc" + kill -TERM $child_proc + exit +} + +trap _interupt INT TERM + +touch .pwd +export $(cat .env | xargs) +Bin_NAME=XDC + +WORK_DIR=$PWD +PROJECT_DIR="/root/XinFin/XDPoS-TestNet-Apothem" +cd $PROJECT_DIR && make all +cd $WORK_DIR + +if [ ! -d ./nodes/1/$Bin_NAME/chaindata ] +then + wallet1=$(${PROJECT_DIR}/build/bin/$Bin_NAME account import --password .pwd --datadir ./nodes/1 <(echo ${PRIVATE_KEY_1}) | awk -v FS="({|})" '{print $2}') + wallet2=$(${PROJECT_DIR}/build/bin/$Bin_NAME account import --password .pwd --datadir ./nodes/2 <(echo ${PRIVATE_KEY_2}) | awk -v FS="({|})" '{print $2}') + wallet3=$(${PROJECT_DIR}/build/bin/$Bin_NAME account import --password .pwd --datadir ./nodes/3 <(echo ${PRIVATE_KEY_3}) | awk -v FS="({|})" '{print $2}') + ${PROJECT_DIR}/build/bin/$Bin_NAME --datadir ./nodes/1 init ./genesis/genesis.json + ${PROJECT_DIR}/build/bin/$Bin_NAME --datadir ./nodes/2 init ./genesis/genesis.json + ${PROJECT_DIR}/build/bin/$Bin_NAME --datadir ./nodes/3 init ./genesis/genesis.json +else + wallet1=$(${PROJECT_DIR}/build/bin/$Bin_NAME account list --datadir ./nodes/1 | head -n 1 | awk -v FS="({|})" '{print $2}') + wallet2=$(${PROJECT_DIR}/build/bin/$Bin_NAME account list --datadir ./nodes/2 | head -n 1 | awk -v FS="({|})" '{print $2}') + wallet3=$(${PROJECT_DIR}/build/bin/$Bin_NAME account list --datadir ./nodes/3 | head -n 1 | awk -v FS="({|})" '{print $2}') +fi + +VERBOSITY=3 +GASPRICE="1" + +echo Starting the bootnode ... +${PROJECT_DIR}/build/bin/bootnode -nodekey ./bootnode.key --addr 0.0.0.0:30301 & +child_proc=$! + +echo Starting the nodes ... +${PROJECT_DIR}/build/bin/$Bin_NAME --bootnodes "enode://ec569f5d52cefee5c5405a0c5db720dc7061f3085e0682dd8321413430ddda6a177b85db75b0daf83d2e68760ba3f5beb4ba9e333e7d52072fba4d39b05a0451@109.169.40.129:30301,enode://ec569f5d52cefee5c5405a0c5db720dc7061f3085e0682dd8321413430ddda6a177b85db75b0daf83d2e68760ba3f5beb4ba9e333e7d52072fba4d39b05a0451@5.152.223.199:30303,enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@62.233.65.7:30301,enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@127.0.0.1:30301" --syncmode "full" --datadir ./nodes/1 --networkid "${networkid}" --port 30303 --rpc --rpccorsdomain "*" --ws --wsaddr="0.0.0.0" --wsorigins "*" --wsport 8555 --rpcaddr 0.0.0.0 --rpcport 8545 --rpcvhosts "*" --unlock "${wallet1}" --password ./.pwd --mine --gasprice "${GASPRICE}" --targetgaslimit "420000000" --verbosity ${VERBOSITY} --rpcapi admin,db,eth,debug,miner,net,shh,txpool,personal,web3,XDPoS --ethstats "XinFin-MasterNode-01:xinfin_test_network_stats@stats_testnet.xinfin.network:3000" +# child_proc="$child_proc $!" +# ${PROJECT_DIR}/build/bin/$Bin_NAME --bootnodes "enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@127.0.0.1:30301" --syncmode "full" --datadir ./nodes/2 --networkid 853 --port 30304 --rpc --rpccorsdomain "*" --ws --wsaddr="0.0.0.0" --wsorigins "*" --wsport 8556 --rpcaddr 0.0.0.0 --rpcport 8546 --rpcvhosts "*" --unlock "${wallet2}" --password ./.pwd --mine --gasprice "${GASPRICE}" --targetgaslimit "420000000" --verbosity ${VERBOSITY} --rpcapi admin,db,eth,debug,miner,net,shh,txpool,personal,web3,XDPoS --ethstats "XinFin-MasterNode-02:xinfin_network_stats@stats.testnet.xinfin.network:3000" & +# child_proc="$child_proc $!" +# ${PROJECT_DIR}/build/bin/$Bin_NAME --bootnodes "enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@127.0.0.1:30301" --syncmode "full" --datadir ./nodes/3 --networkid 853 --port 30305 --rpc --rpccorsdomain "*" --ws --wsaddr="0.0.0.0" --wsorigins "*" --wsport 8557 --rpcaddr 0.0.0.0 --rpcport 8547 --rpcvhosts "*" --unlock "${wallet3}" --password ./.pwd --mine --gasprice "${GASPRICE}" --targetgaslimit "420000000" --verbosity ${VERBOSITY} --rpcapi admin,db,eth,debug,miner,net,shh,txpool,personal,web3,XDPoS --ethstats "XinFin-MasterNode-03:xinfin_network_stats@stats.testnet.xinfin.network:3000" diff --git a/.gitbook/assets/node1.sh b/.gitbook/assets/node1.sh new file mode 100644 index 00000000..300c18c0 --- /dev/null +++ b/.gitbook/assets/node1.sh @@ -0,0 +1,30 @@ +#!/bin/bash +_interupt() { + echo "Shutdown $child_proc" + kill -TERM $child_proc + exit +} + +trap _interupt INT TERM + +touch .pwd +export $(cat .env | xargs) +Bin_NAME=gxdc +WORK_DIR=$PWD +PROJECT_DIR="${HOME}/go/src/github.com/ethereum/go-ethereum" +cd $PROJECT_DIR && make $Bin_NAME +cd $WORK_DIR + +wallet1=$(${PROJECT_DIR}/build/bin/$Bin_NAME account list --datadir ./nodes/1 | head -n 1 | awk -v FS="({|})" '{print $2}') + +VERBOSITY=4 +GASPRICE="1" + +echo Starting the bootnode ... +${PROJECT_DIR}/build/bin/bootnode -nodekey ./bootnode.key & +child_proc=$! + +echo Starting the nodes ... +${PROJECT_DIR}/build/bin/$Bin_NAME --bootnodes "enode://7d8ffe6d28f738d8b7c32f11fb6daa6204abae990a842025b0a969aabdda702aca95a821746332c2e618a92736538761b1660aa9defb099bc46b16db28992bc9@127.0.0.1:30301" --syncmode "full" --datadir ./nodes/1 --networkid 89 --port 30303 --rpc --rpccorsdomain "*" --rpcaddr 0.0.0.0 --rpcport 8545 --rpcvhosts "*" --unlock "${wallet1}" --password ./.pwd --mine --gasprice "${GASPRICE}" --targetgaslimit "420000000" --verbosity ${VERBOSITY} & +child_proc="$child_proc $!" +tail -f ./genesis/$Bin_NAMEchain.json diff --git a/.gitbook/assets/node2 (1).sh b/.gitbook/assets/node2 (1).sh new file mode 100644 index 00000000..23e7c011 --- /dev/null +++ b/.gitbook/assets/node2 (1).sh @@ -0,0 +1,30 @@ +#!/bin/bash +_interupt() { + echo "Shutdown $child_proc" + kill -TERM $child_proc + exit +} + +trap _interupt INT TERM + +touch .pwd +export $(cat .env | xargs) +Bin_NAME=gxdc +WORK_DIR=$PWD +PROJECT_DIR="${HOME}/go/src/github.com/ethereum/go-ethereum" +cd $PROJECT_DIR && make $Bin_NAME +cd $WORK_DIR + +wallet2=$(${PROJECT_DIR}/build/bin/$Bin_NAME account list --datadir ./nodes/2 | head -n 1 | awk -v FS="({|})" '{print $2}') + +VERBOSITY=4 +GASPRICE="1" + +echo Starting the bootnode ... +${PROJECT_DIR}/build/bin/bootnode -nodekey ./bootnode.key & +child_proc=$! + +echo Starting the nodes ... +${PROJECT_DIR}/build/bin/$Bin_NAME --bootnodes "enode://7d8ffe6d28f738d8b7c32f11fb6daa6204abae990a842025b0a969aabdda702aca95a821746332c2e618a92736538761b1660aa9defb099bc46b16db28992bc9@127.0.0.1:30301" --syncmode "full" --datadir ./nodes/2 --networkid 89 --port 30304 --rpc --rpccorsdomain "*" --rpcaddr 0.0.0.0 --rpcport 8546 --rpcvhosts "*" --unlock "${wallet2}" --password ./.pwd --mine --gasprice "${GASPRICE}" --targetgaslimit "420000000" --verbosity ${VERBOSITY} & +child_proc="$child_proc $!" +tail -f ./genesis/$Bin_NAMEchain.json diff --git a/.gitbook/assets/node2.sh b/.gitbook/assets/node2.sh new file mode 100644 index 00000000..2039f321 --- /dev/null +++ b/.gitbook/assets/node2.sh @@ -0,0 +1,45 @@ +#!/bin/bash +_interupt() { + echo "Shutdown $child_proc" + kill -TERM $child_proc + exit +} + +trap _interupt INT TERM + +touch .pwd +export $(cat .env | xargs) +Bin_NAME=XDC + +WORK_DIR=$PWD +PROJECT_DIR="/root/XinFin/XDPoS-TestNet-Apothem" +cd $PROJECT_DIR && make all +cd $WORK_DIR + +if [ ! -d ./nodes/1/$Bin_NAME/chaindata ] +then + wallet1=$(${PROJECT_DIR}/build/bin/$Bin_NAME account import --password .pwd --datadir ./nodes/1 <(echo ${PRIVATE_KEY_1}) | awk -v FS="({|})" '{print $2}') + wallet2=$(${PROJECT_DIR}/build/bin/$Bin_NAME account import --password .pwd --datadir ./nodes/2 <(echo ${PRIVATE_KEY_2}) | awk -v FS="({|})" '{print $2}') + wallet3=$(${PROJECT_DIR}/build/bin/$Bin_NAME account import --password .pwd --datadir ./nodes/3 <(echo ${PRIVATE_KEY_3}) | awk -v FS="({|})" '{print $2}') + ${PROJECT_DIR}/build/bin/$Bin_NAME --datadir ./nodes/1 init ./genesis/genesis.json + ${PROJECT_DIR}/build/bin/$Bin_NAME --datadir ./nodes/2 init ./genesis/genesis.json + ${PROJECT_DIR}/build/bin/$Bin_NAME --datadir ./nodes/3 init ./genesis/genesis.json +else + wallet1=$(${PROJECT_DIR}/build/bin/$Bin_NAME account list --datadir ./nodes/1 | head -n 1 | awk -v FS="({|})" '{print $2}') + wallet2=$(${PROJECT_DIR}/build/bin/$Bin_NAME account list --datadir ./nodes/2 | head -n 1 | awk -v FS="({|})" '{print $2}') + wallet3=$(${PROJECT_DIR}/build/bin/$Bin_NAME account list --datadir ./nodes/3 | head -n 1 | awk -v FS="({|})" '{print $2}') +fi + +VERBOSITY=3 +GASPRICE="1" + +# echo Starting the bootnode ... +# ${PROJECT_DIR}/build/bin/bootnode -nodekey ./bootnode.key --addr 0.0.0.0:30301 & +# child_proc=$! + +echo Starting the nodes ... +# ${PROJECT_DIR}/build/bin/$Bin_NAME --bootnodes "enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@127.0.0.1:30301" --syncmode "full" --datadir ./nodes/1 --networkid 853 --port 30303 --rpc --rpccorsdomain "*" --ws --wsaddr="0.0.0.0" --wsorigins "*" --wsport 8555 --rpcaddr 0.0.0.0 --rpcport 8545 --rpcvhosts "*" --unlock "${wallet1}" --password ./.pwd --mine --gasprice "${GASPRICE}" --targetgaslimit "420000000" --verbosity ${VERBOSITY} --rpcapi admin,db,eth,debug,miner,net,shh,txpool,personal,web3,XDPoS --ethstats "XinFin-MasterNode-01:xinfin_network_stats@stats.testnet.xinfin.network:3000" +# # child_proc="$child_proc $!" +${PROJECT_DIR}/build/bin/$Bin_NAME --bootnodes "enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@109.169.40.128:30301" --syncmode "full" --datadir ./nodes/2 --networkid 853 --port 30304 --rpc --rpccorsdomain "*" --ws --wsaddr="0.0.0.0" --wsorigins "*" --wsport 8556 --rpcaddr 0.0.0.0 --rpcport 8546 --rpcvhosts "*" --unlock "${wallet2}" --password ./.pwd --mine --gasprice "${GASPRICE}" --targetgaslimit "420000000" --verbosity ${VERBOSITY} --rpcapi admin,db,eth,debug,miner,net,shh,txpool,personal,web3,XDPoS --ethstats "XinFin-MasterNode-02:xinfin_network_stats@stats.testnet.xinfin.network:3000" +# child_proc="$child_proc $!" +# ${PROJECT_DIR}/build/bin/$Bin_NAME --bootnodes "enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@127.0.0.1:30301" --syncmode "full" --datadir ./nodes/3 --networkid 853 --port 30305 --rpc --rpccorsdomain "*" --ws --wsaddr="0.0.0.0" --wsorigins "*" --wsport 8557 --rpcaddr 0.0.0.0 --rpcport 8547 --rpcvhosts "*" --unlock "${wallet3}" --password ./.pwd --mine --gasprice "${GASPRICE}" --targetgaslimit "420000000" --verbosity ${VERBOSITY} --rpcapi admin,db,eth,debug,miner,net,shh,txpool,personal,web3,XDPoS --ethstats "XinFin-MasterNode-03:xinfin_network_stats@stats.testnet.xinfin.network:3000" diff --git a/.gitbook/assets/node3 (1).sh b/.gitbook/assets/node3 (1).sh new file mode 100644 index 00000000..734d235b --- /dev/null +++ b/.gitbook/assets/node3 (1).sh @@ -0,0 +1,45 @@ +#!/bin/bash +_interupt() { + echo "Shutdown $child_proc" + kill -TERM $child_proc + exit +} + +trap _interupt INT TERM + +touch .pwd +export $(cat .env | xargs) +Bin_NAME=XDC + +WORK_DIR=$PWD +PROJECT_DIR="/root/XinFin/XDPoS-TestNet-Apothem" +cd $PROJECT_DIR && make all +cd $WORK_DIR + +if [ ! -d ./nodes/1/$Bin_NAME/chaindata ] +then + wallet1=$(${PROJECT_DIR}/build/bin/$Bin_NAME account import --password .pwd --datadir ./nodes/1 <(echo ${PRIVATE_KEY_1}) | awk -v FS="({|})" '{print $2}') + wallet2=$(${PROJECT_DIR}/build/bin/$Bin_NAME account import --password .pwd --datadir ./nodes/2 <(echo ${PRIVATE_KEY_2}) | awk -v FS="({|})" '{print $2}') + wallet3=$(${PROJECT_DIR}/build/bin/$Bin_NAME account import --password .pwd --datadir ./nodes/3 <(echo ${PRIVATE_KEY_3}) | awk -v FS="({|})" '{print $2}') + ${PROJECT_DIR}/build/bin/$Bin_NAME --datadir ./nodes/1 init ./genesis/genesis.json + ${PROJECT_DIR}/build/bin/$Bin_NAME --datadir ./nodes/2 init ./genesis/genesis.json + ${PROJECT_DIR}/build/bin/$Bin_NAME --datadir ./nodes/3 init ./genesis/genesis.json +else + wallet1=$(${PROJECT_DIR}/build/bin/$Bin_NAME account list --datadir ./nodes/1 | head -n 1 | awk -v FS="({|})" '{print $2}') + wallet2=$(${PROJECT_DIR}/build/bin/$Bin_NAME account list --datadir ./nodes/2 | head -n 1 | awk -v FS="({|})" '{print $2}') + wallet3=$(${PROJECT_DIR}/build/bin/$Bin_NAME account list --datadir ./nodes/3 | head -n 1 | awk -v FS="({|})" '{print $2}') +fi + +VERBOSITY=3 +GASPRICE="1" + +echo Starting the bootnode ... +${PROJECT_DIR}/build/bin/bootnode -nodekey ./bootnode.key --addr 0.0.0.0:30301 & +child_proc=$! + +echo Starting the nodes ... +# ${PROJECT_DIR}/build/bin/$Bin_NAME --bootnodes "enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@127.0.0.1:30301" --syncmode "full" --datadir ./nodes/1 --networkid 853 --port 30303 --rpc --rpccorsdomain "*" --ws --wsaddr="0.0.0.0" --wsorigins "*" --wsport 8555 --rpcaddr 0.0.0.0 --rpcport 8545 --rpcvhosts "*" --unlock "${wallet1}" --password ./.pwd --mine --gasprice "${GASPRICE}" --targetgaslimit "420000000" --verbosity ${VERBOSITY} --rpcapi admin,db,eth,debug,miner,net,shh,txpool,personal,web3,XDPoS --ethstats "XinFin-MasterNode-01:xinfin_network_stats@stats.testnet.xinfin.network:3000" +# child_proc="$child_proc $!" +# ${PROJECT_DIR}/build/bin/$Bin_NAME --bootnodes "enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@127.0.0.1:30301" --syncmode "full" --datadir ./nodes/2 --networkid 853 --port 30304 --rpc --rpccorsdomain "*" --ws --wsaddr="0.0.0.0" --wsorigins "*" --wsport 8556 --rpcaddr 0.0.0.0 --rpcport 8546 --rpcvhosts "*" --unlock "${wallet2}" --password ./.pwd --mine --gasprice "${GASPRICE}" --targetgaslimit "420000000" --verbosity ${VERBOSITY} --rpcapi admin,db,eth,debug,miner,net,shh,txpool,personal,web3,XDPoS --ethstats "XinFin-MasterNode-02:xinfin_network_stats@stats.testnet.xinfin.network:3000" & +# child_proc="$child_proc $!" +${PROJECT_DIR}/build/bin/$Bin_NAME --bootnodes "enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@109.169.40.128:30301" --syncmode "full" --datadir ./nodes/3 --networkid 853 --port 30305 --rpc --rpccorsdomain "*" --ws --wsaddr="0.0.0.0" --wsorigins "*" --wsport 8557 --rpcaddr 0.0.0.0 --rpcport 8547 --rpcvhosts "*" --unlock "${wallet3}" --password ./.pwd --mine --gasprice "${GASPRICE}" --targetgaslimit "420000000" --verbosity ${VERBOSITY} --rpcapi admin,db,eth,debug,miner,net,shh,txpool,personal,web3,XDPoS --ethstats "XinFin-MasterNode-03:xinfin_network_stats@stats.testnet.xinfin.network:3000" diff --git a/.gitbook/assets/node3.sh b/.gitbook/assets/node3.sh new file mode 100644 index 00000000..c867d00d --- /dev/null +++ b/.gitbook/assets/node3.sh @@ -0,0 +1,30 @@ +#!/bin/bash +_interupt() { + echo "Shutdown $child_proc" + kill -TERM $child_proc + exit +} + +trap _interupt INT TERM + +touch .pwd +export $(cat .env | xargs) +Bin_NAME=gxdc +WORK_DIR=$PWD +PROJECT_DIR="${HOME}/go/src/github.com/ethereum/go-ethereum" +cd $PROJECT_DIR && make $Bin_NAME +cd $WORK_DIR + +wallet3=$(${PROJECT_DIR}/build/bin/$Bin_NAME account list --datadir ./nodes/3 | head -n 1 | awk -v FS="({|})" '{print $2}') + +VERBOSITY=4 +GASPRICE="1" + +echo Starting the bootnode ... +${PROJECT_DIR}/build/bin/bootnode -nodekey ./bootnode.key & +child_proc=$! + +echo Starting the nodes ... +${PROJECT_DIR}/build/bin/$Bin_NAME --bootnodes "enode://7d8ffe6d28f738d8b7c32f11fb6daa6204abae990a842025b0a969aabdda702aca95a821746332c2e618a92736538761b1660aa9defb099bc46b16db28992bc9@127.0.0.1:30301" --syncmode "full" --datadir ./nodes/3 --networkid 89 --port 30305 --rpc --rpccorsdomain "*" --rpcaddr 0.0.0.0 --rpcport 8547 --rpcvhosts "*" --unlock "${wallet3}" --password ./.pwd --mine --gasprice "${GASPRICE}" --targetgaslimit "420000000" --verbosity ${VERBOSITY} & +child_proc="$child_proc $!" +tail -f ./genesis/$Bin_NAMEchain.json diff --git a/.gitbook/assets/node4.sh b/.gitbook/assets/node4.sh new file mode 100644 index 00000000..68c5e5c5 --- /dev/null +++ b/.gitbook/assets/node4.sh @@ -0,0 +1,21 @@ +#!/bin/bash +export $(cat .env | xargs) +Bin_NAME=gxdc +WORK_DIR=$PWD +PROJECT_DIR="${HOME}/go/src/github.com/ethereum/go-ethereum" +cd $PROJECT_DIR && make $Bin_NAME +cd $WORK_DIR + +if [ ! -d ./nodes/4/$Bin_NAME/chaindata ] +then + wallet4=$(${PROJECT_DIR}/build/bin/$Bin_NAME account import --password .pwd --datadir ./nodes/4 <(echo ${PRIVATE_KEY_4}) | awk -v FS="({|})" '{print $2}') + ${PROJECT_DIR}/build/bin/$Bin_NAME --datadir ./nodes/4 init ./genesis/genesis.json +else + wallet4=$(${PROJECT_DIR}/build/bin/$Bin_NAME account list --datadir ./nodes/4 | head -n 1 | awk -v FS="({|})" '{print $2}') +fi + +VERBOSITY=3 +GASPRICE="1" + +echo Starting the nodes ... +${PROJECT_DIR}/build/bin/$Bin_NAME --bootnodes "enode://7d8ffe6d28f738d8b7c32f11fb6daa6204abae990a842025b0a969aabdda702aca95a821746332c2e618a92736538761b1660aa9defb099bc46b16db28992bc9@127.0.0.1:30301" --syncmode 'full' --datadir ./nodes/4 --networkid 89 --port 30306 --rpc --rpccorsdomain "*" --rpcaddr 0.0.0.0 --rpcport 8548 --rpcvhosts "*" --unlock "${wallet4}" --password ./.pwd --mine --gasprice "${GASPRICE}" --targetgaslimit "420000000" --verbosity ${VERBOSITY} diff --git a/.gitbook/assets/node5.sh b/.gitbook/assets/node5.sh new file mode 100644 index 00000000..7373ce45 --- /dev/null +++ b/.gitbook/assets/node5.sh @@ -0,0 +1,21 @@ +#!/bin/bash +export $(cat .env | xargs) +Bin_NAME=gxdc +WORK_DIR=$PWD +PROJECT_DIR="${HOME}/go/src/github.com/ethereum/go-ethereum" +cd $PROJECT_DIR && make $Bin_NAME +cd $WORK_DIR + +if [ ! -d ./nodes/5/$Bin_NAME/chaindata ] +then + wallet5=$(${PROJECT_DIR}/build/bin/$Bin_NAME account import --password .pwd --datadir ./nodes/5 <(echo ${PRIVATE_KEY_5}) | awk -v FS="({|})" '{print $2}') + ${PROJECT_DIR}/build/bin/$Bin_NAME --datadir ./nodes/5 init ./genesis/genesis.json +else + wallet5=$(${PROJECT_DIR}/build/bin/$Bin_NAME account list --datadir ./nodes/5 | head -n 1 | awk -v FS="({|})" '{print $2}') +fi + +VERBOSITY=3 +GASPRICE="1" + +echo Starting the nodes ... +${PROJECT_DIR}/build/bin/$Bin_NAME --bootnodes "enode://7d8ffe6d28f738d8b7c32f11fb6daa6204abae990a842025b0a969aabdda702aca95a821746332c2e618a92736538761b1660aa9defb099bc46b16db28992bc9@127.0.0.1:30301" --syncmode 'full' --datadir ./nodes/5 --networkid 89 --port 30307 --rpc --rpccorsdomain "*" --rpcaddr 0.0.0.0 --rpcport 8549 --rpcvhosts "*" --unlock "${wallet5}" --password ./.pwd --mine --gasprice "${GASPRICE}" --targetgaslimit "420000000" --verbosity ${VERBOSITY} diff --git a/.gitbook/assets/node6.sh b/.gitbook/assets/node6.sh new file mode 100644 index 00000000..3b336f6c --- /dev/null +++ b/.gitbook/assets/node6.sh @@ -0,0 +1,21 @@ +#!/bin/bash +export $(cat .env | xargs) +Bin_NAME=gxdc +WORK_DIR=$PWD +PROJECT_DIR="${HOME}/go/src/github.com/ethereum/go-ethereum" +cd $PROJECT_DIR && make $Bin_NAME +cd $WORK_DIR + +if [ ! -d ./nodes/6/$Bin_NAME/chaindata ] +then + wallet6=$(${PROJECT_DIR}/build/bin/$Bin_NAME account import --password .pwd --datadir ./nodes/6 <(echo ${PRIVATE_KEY_6}) | awk -v FS="({|})" '{print $2}') + ${PROJECT_DIR}/build/bin/$Bin_NAME --datadir ./nodes/6 init ./genesis/genesis.json +else + wallet6=$(${PROJECT_DIR}/build/bin/$Bin_NAME account list --datadir ./nodes/6 | head -n 1 | awk -v FS="({|})" '{print $2}') +fi + +VERBOSITY=3 +GASPRICE="1" + +echo Starting the nodes ... +${PROJECT_DIR}/build/bin/$Bin_NAME --bootnodes "enode://7d8ffe6d28f738d8b7c32f11fb6daa6204abae990a842025b0a969aabdda702aca95a821746332c2e618a92736538761b1660aa9defb099bc46b16db28992bc9@127.0.0.1:30301" --syncmode 'full' --datadir ./nodes/6 --networkid 89 --port 30308 --rpc --rpccorsdomain "*" --rpcaddr 0.0.0.0 --rpcport 8550 --rpcvhosts "*" --unlock "${wallet6}" --password ./.pwd --mine --gasprice "${GASPRICE}" --targetgaslimit "420000000" --verbosity ${VERBOSITY} diff --git a/.gitbook/assets/pwd.txt b/.gitbook/assets/pwd.txt new file mode 100644 index 00000000..e69de29b diff --git a/SUMMARY.md b/SUMMARY.md index cd63579a..1b7b499c 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -76,6 +76,9 @@ * [Full Node (Docker version)](run-a-node/masternode/full-node.md) * [One-Click-Installer Masternode (Windows OS)](run-a-node/masternode/standby-node.md) * [One-Click-Installer Masternode (macOS)](run-a-node/masternode/one-click-installer-masternode-macos.md) +* [Subnets](subnets/README.md) + * [Requirements](subnets/requirements.md) + * [Deploy a subnet](subnets/deploy-a-subnet.md) ## Learn diff --git a/get-details/smart-contract-details/flattening-smart-contracts/flattening-smart-contracts-with-hardhat.md b/get-details/smart-contract-details/flattening-smart-contracts/flattening-smart-contracts-with-hardhat.md index c99d308b..9f9fe69a 100644 --- a/get-details/smart-contract-details/flattening-smart-contracts/flattening-smart-contracts-with-hardhat.md +++ b/get-details/smart-contract-details/flattening-smart-contracts/flattening-smart-contracts-with-hardhat.md @@ -1,52 +1,57 @@ --- id: flatten-contract-hardhat title: Flatten a Smart Contract Using Hardhat -description: "Use Hardhat to deploy and verify smart contract" keywords: - docs - apothem - token - flatten - hardhat +description: Use Hardhat to deploy and verify smart contract --- -# 🧭 Table of contents - -- [🧭 Table of contents](#-table-of-contents) -- [📰 Overview](#-overview) - - [What you will learn](#what-you-will-learn) - - [What you will do](#what-you-will-do) -- [⚒ Starting a new Hardhat Project](#-starting-a-new-hardhat-project) - - [⚒ Configuring XDC Mainnet and Apothem Testnet on Hardhat](#-configuring-xdc-mainnet-and-apothem-testnet-on-hardhat) - - [⚒ Adding Testnet XDC to Development Wallet](#-adding-testnet-xdc-to-development-wallet) -- [💵 Writing Smart Contract](#-writing-smart-contract) - - [💵 Compiling and Testing](#-compiling-and-testing) - - [Testing](#testing) - - [💵 Deploying Contract](#-deploying-contract) - - [💵 Flattening Contract](#-flattening-contract) -- [🔍 Veryfing Contracts on the Block Explorer](#-veryfing-contracts-on-the-block-explorer) - -# 📰 Overview +# Flattening Smart Contracts with Hardhat + +## 🧭 Table of contents + +* [🧭 Table of contents](flattening-smart-contracts-with-hardhat.md#-table-of-contents) +* [📰 Overview](flattening-smart-contracts-with-hardhat.md#-overview) + * [What you will learn](flattening-smart-contracts-with-hardhat.md#what-you-will-learn) + * [What you will do](flattening-smart-contracts-with-hardhat.md#what-you-will-do) +* [⚒ Starting a new Hardhat Project](flattening-smart-contracts-with-hardhat.md#-starting-a-new-hardhat-project) + * [⚒ Configuring XDC Mainnet and Apothem Testnet on Hardhat](flattening-smart-contracts-with-hardhat.md#-configuring-xdc-mainnet-and-apothem-testnet-on-hardhat) + * [⚒ Adding Testnet XDC to Development Wallet](flattening-smart-contracts-with-hardhat.md#-adding-testnet-xdc-to-development-wallet) +* [💵 Writing Smart Contract](flattening-smart-contracts-with-hardhat.md#-writing-smart-contract) + * [💵 Compiling and Testing](flattening-smart-contracts-with-hardhat.md#-compiling-and-testing) + * [Testing](flattening-smart-contracts-with-hardhat.md#testing) + * [💵 Deploying Contract](flattening-smart-contracts-with-hardhat.md#-deploying-contract) + * [💵 Flattening Contract](flattening-smart-contracts-with-hardhat.md#-flattening-contract) +* [🔍 Veryfing Contracts on the Block Explorer](flattening-smart-contracts-with-hardhat.md#-veryfing-contracts-on-the-block-explorer) + +## 📰 Overview + [Hardhat](https://hardhat.org/) is a development environment to compile, deploy, test, and debug your Ethereum software. Get Solidity stack traces & console.log. -### What you will learn +#### What you will learn + In this tutorial, you will learn how to set up Hardhat and use it to build, test and deploy smart contract on both the XDC Network mainnet and XDC Apothem testnet and verify it on Block Explorer. -### What you will do -- Install and set up Hardhat -- Create a complex smart contract with dependencies (like OpenZeppelin) -- Compile the smart contract -- Test the smart contract -- Deploy the smart contract -- Flatten the smart contract -- Verify the smart contract +#### What you will do + +* Install and set up Hardhat +* Create a complex smart contract with dependencies (like OpenZeppelin) +* Compile the smart contract +* Test the smart contract +* Deploy the smart contract +* Flatten the smart contract +* Verify the smart contract -# ⚒ Starting a new Hardhat Project +## ⚒ Starting a new Hardhat Project There are a few technical requirements before we start. Please install the following: -- [Node.js v8+ LTS and npm](https://nodejs.org/en/) (comes with Node) -- [Git](https://git-scm.com/) +* [Node.js v8+ LTS and npm](https://nodejs.org/en/) (comes with Node) +* [Git](https://git-scm.com/) Lets start by setting up our folder, we are creating a project called `MyCounter`, create a new `MyCounter` folder by running on terminal @@ -70,14 +75,11 @@ Ok to proceed? (y) The following message should log on your console: - -

- hardhat config -

+![hardhat config](https://user-images.githubusercontent.com/78161484/191259993-b817901f-7df9-4df1-bb1c-c4805c416974.png) Press `ENTER` to get started with a new JavaScript Hardhat Project. Then you will be presented with the following options: -```sh +``` ? Hardhat project root: ‣ /home/path/to/MyCounter // Press ENTER or y @@ -90,17 +92,15 @@ Press `ENTER` to get started with a new JavaScript Hardhat Project. Then you wil The standard Hardhat project comes with a pre-created `Lock.sol` contract and `deploy.js` script. Lets clean up our working environment before moving forward: -```sh +``` rm -rf ./contracts/Lock.sol ./scripts/deploy.js ./test/Lock.js ``` And your folder files will look like this: -

- hardhat folder -

+![hardhat folder](https://user-images.githubusercontent.com/78161484/191263408-af21bd08-98a8-440c-9270-7f9960bb531d.png) -## ⚒ Configuring XDC Mainnet and Apothem Testnet on Hardhat +### ⚒ Configuring XDC Mainnet and Apothem Testnet on Hardhat In order to get started deploying new contracts on XDC Mainnet and/or Apothem, we need to install a new dependency called `dotenv` that will be used in the `hardhat.config.js` file: @@ -121,6 +121,7 @@ XINFIN_NETWORK_URL=https://erpc.xinfin.network APOTHEM_NETWORK_URL=https://erpc.apothem.network PRIVATE_KEY=202e3c9d30bbeca38d6578659919d4c3dc989ae18c16756690877fdc4dfa607f ``` + 🚨 **Do not use the Private Key in the example above in production or you can risk losing your assets!** 🚨 And finally, we can configure the `hardhat.config.js` file for both Apothem and XinFin Networks by writting: @@ -144,16 +145,17 @@ module.exports = { }; ``` -## ⚒ Adding Testnet XDC to Development Wallet +### ⚒ Adding Testnet XDC to Development Wallet Let's check our Signer's Address on Hardhat by accessing the hardhat console: -```sh +``` npx hardhat console --network xinfin ``` + If you get an error that hardhat is not installed locally and are running on a Windows OS you will need to execute: -```sh +``` npm install --save-dev @nomicfoundation/hardhat-toolbox ``` @@ -172,15 +174,13 @@ This account is on the Ethereum standard format starting with `0x`, but we can s With this account in hand, we can head to the [Apothem Faucet](https://faucet.apothem.network/) and claim some TXDC for development purposes: -

- Step 02 -

+![Step 02](https://user-images.githubusercontent.com/78161484/189952656-eb7793cc-7dee-4307-88fc-7c351a75cec7.png) -# 💵 Writing Smart Contract +## 💵 Writing Smart Contract We will be using OpenZeppelin for this guide so lets install it first: -```sh +``` npm install @openzeppelin/contracts ``` @@ -212,32 +212,31 @@ contract MyCounter { } ``` -## 💵 Compiling and Testing +### 💵 Compiling and Testing We can now compile our `MyCounter.sol` by running: -```sh +``` npx hardhat compile ``` If everything is correctly configured and there is no errors, you should see the following message on your console: -```sh +``` Downloading compiler 0.8.16 Compiled 2 Solidity files successfully ``` And your folder should look like this: -

- Folder 02 -

+![Folder 02](https://user-images.githubusercontent.com/78161484/191273560-8f666f6c-c7b9-4bad-8369-46337f6243b2.png) -### Testing +#### Testing Now lets create a simple test to see everything works as intended before we deploy our contract to live network. This will save us time and gas fees, so it is recommended you do as much as possible tests for your smart contracts before deploying. Create file `MyCounter.js` under `test` directory: + ```javascript const { expect } = require("chai"); @@ -270,13 +269,13 @@ describe("MyCounter contract", function () { Then run: -```sh +``` npx hardhat test ``` Your output should look like this: -```sh +``` MyCounter contract ✔ should deploy MyCounter (847ms) ✔ should increment and decrement MyCounter and show current count (66ms) @@ -284,11 +283,11 @@ MyCounter contract 2 passing (916ms) ``` -## 💵 Deploying Contract +### 💵 Deploying Contract In order to deploy our newly compiled contract artifacts to the blockchain, we need to create a deployment script into the script folder: -```sh +``` touch ./scripts/deploy.js ``` @@ -316,13 +315,13 @@ main() If the deployment script have no errors, we can go ahead and run the command: -```sh +``` npx hardhat run scripts/deploy.js --network xinfin ``` For deployment on XDC mainet, or: -```sh +``` npx hardhat run scripts/deploy.js --network apothem ``` @@ -330,12 +329,12 @@ For deployment on the XDC Apothem Testnet. In either case, you need to have enou If the deployment is sucessful, the console should log the following message after migrations complete processing: -```sh +``` MyCounter Successfully Deployed! MyCounter address: 0xfCd7d366048a50E0600C46Dd854Da343050EB3A1 ``` -## 💵 Flattening Contract +### 💵 Flattening Contract If smart contract imports external files like ours, we need to flatten it before verifying on Block Explorer. @@ -347,40 +346,34 @@ npx hardhat flatten contracts/MyCounter.sol > MyCounterFlatten.sol Then open `MyCounterFlatten.sol` and remove every line which starts with `// SPDX-License-Identifier` except the first one. We do this because Block Explorer does not accepts contracts with mutliple license definitions. -# 🔍 Veryfing Contracts on the Block Explorer +## 🔍 Veryfing Contracts on the Block Explorer Once you have successfully deployed your smart contract to the blockchain, it might be interesting to verify you contract on [XinFin Block Explorer](https://explorer.xinfin.network/). Lets grab the `MyCounter.sol` address from the previous step: this address is in the Ethereum standard but we can simply swap the `0x` prefix for `xdc` and search for our newly deployed contract on [XinFin Block Explorer](https://explorer.xinfin.network/): -

- Verify 01 -

+![Verify 01](https://user-images.githubusercontent.com/78161484/190875518-828c0061-71de-42c2-b222-0b8427852d01.png) And click in the `Verify And Publish` Option. We will be redirected to the Contract verification page where we need to fill out: -- Contract Name: MyCounter -- Compiler: Check your `hardhat-config.js` file for Compiler Version -- Contract Code: Just paste everything from your `MyCounterFlatten.sol` file +* Contract Name: _MyCounter_ +* Compiler: _Check your_ `hardhat-config.js` _file for Compiler Version_ +* Contract Code: _Just paste everything from your_ `MyCounterFlatten.sol` _file_ ❕ Keep in mind that `Contract Code` should be `MyCounterFlatten.sol`, not `MyCounter.sol`. ❕ Once everything is filled out, press Submit! -

- Verify 02 -

+![Verify 02](https://user-images.githubusercontent.com/78161484/190875635-f6d3aa36-47b2-4b09-ad6a-fe6df3fb11f1.png) If everything is correctly filled out, your contract page on the block explorer should display a new tab called `Contract`: -

- Verify 03 -

+![Verify 03](https://user-images.githubusercontent.com/78161484/190875780-6223b4b0-fecc-4e79-83bc-c810c5b0351c.png) ---- +*** -For more information about Hardhat, Please Visit [Hardhat Documentation](https://hardhat.org/tutorial).
-For more information about XinFin Network, Please Visit [XDC Network Documentation on GitBook](https://docs.xdc.community/).
+For more information about Hardhat, Please Visit [Hardhat Documentation](https://hardhat.org/tutorial).\ +For more information about XinFin Network, Please Visit [XDC Network Documentation on GitBook](https://docs.xdc.community/).\ Resources used during the deployment of the MyCounter can be found at [MyCounter Contract Folder](https://github.com/XDC-Community/docs/tree/main/how-to/SmartContract/Flatten/Hardhat/example-flatten-smart-contract). diff --git a/get-details/smart-contract-details/flattening-smart-contracts/flattening-smart-contracts-with-truffle.md b/get-details/smart-contract-details/flattening-smart-contracts/flattening-smart-contracts-with-truffle.md index 9214cb3f..5c0d79ce 100644 --- a/get-details/smart-contract-details/flattening-smart-contracts/flattening-smart-contracts-with-truffle.md +++ b/get-details/smart-contract-details/flattening-smart-contracts/flattening-smart-contracts-with-truffle.md @@ -1,53 +1,58 @@ --- id: flatten-contract-truffle title: Flatten a Smart Contract Using Truffle -description: "Use Truffle to deploy and verify smart contract" keywords: - docs - apothem - token - flatten - truffle +description: Use Truffle to deploy and verify smart contract --- -# 🧭 Table of contents - -- [🧭 Table of contents](#-table-of-contents) -- [📰 Overview](#-overview) - - [What you will learn](#what-you-will-learn) - - [What you will do](#what-you-will-do) -- [🚀 Setting up the development environment](#-setting-up-the-development-environment) - - [⚒ Starting a new Truffle Project](#-starting-a-new-truffle-project) - - [⚒ Configuring XDC Mainnet and Apothem Testnet on Truffle](#-configuring-xdc-mainnet-and-apothem-testnet-on-truffle) - - [⚒ Adding Testnet XDC to Development Wallet](#-adding-testnet-xdc-to-development-wallet) -- [💵 Writing Smart Contract](#-writing-smart-contract) - - [💵 Compiling and Testing](#-compiling-and-testing) - - [Testing](#testing) - - [💵 Deploying Contract](#-deploying-contract) - - [💵 Flattening Contract](#-flattening-contract) -- [🔍 Veryfing Contracts on the Block Explorer](#-veryfing-contracts-on-the-block-explorer) - -# 📰 Overview +# Flattening Smart Contracts with Truffle + +## 🧭 Table of contents + +* [🧭 Table of contents](flattening-smart-contracts-with-truffle.md#-table-of-contents) +* [📰 Overview](flattening-smart-contracts-with-truffle.md#-overview) + * [What you will learn](flattening-smart-contracts-with-truffle.md#what-you-will-learn) + * [What you will do](flattening-smart-contracts-with-truffle.md#what-you-will-do) +* [🚀 Setting up the development environment](flattening-smart-contracts-with-truffle.md#-setting-up-the-development-environment) + * [⚒ Starting a new Truffle Project](flattening-smart-contracts-with-truffle.md#-starting-a-new-truffle-project) + * [⚒ Configuring XDC Mainnet and Apothem Testnet on Truffle](flattening-smart-contracts-with-truffle.md#-configuring-xdc-mainnet-and-apothem-testnet-on-truffle) + * [⚒ Adding Testnet XDC to Development Wallet](flattening-smart-contracts-with-truffle.md#-adding-testnet-xdc-to-development-wallet) +* [💵 Writing Smart Contract](flattening-smart-contracts-with-truffle.md#-writing-smart-contract) + * [💵 Compiling and Testing](flattening-smart-contracts-with-truffle.md#-compiling-and-testing) + * [Testing](flattening-smart-contracts-with-truffle.md#testing) + * [💵 Deploying Contract](flattening-smart-contracts-with-truffle.md#-deploying-contract) + * [💵 Flattening Contract](flattening-smart-contracts-with-truffle.md#-flattening-contract) +* [🔍 Veryfing Contracts on the Block Explorer](flattening-smart-contracts-with-truffle.md#-veryfing-contracts-on-the-block-explorer) + +## 📰 Overview + [Truffle](https://trufflesuite.com/) is a blockchain development environment, which you can use to create and test smart contracts by levering an Ethereum Virtual Machine. -### What you will learn +#### What you will learn + In this tutorial, you will learn how to set up Truffle and use it to build, test and deploy smart contract on both the XDC Network mainnet and XDC Apothem testnet and verify it on Block Explorer. -### What you will do -- Install and set up Truffle -- Create a complex smart contract with dependencies (like OpenZeppelin) -- Compile the smart contract -- Test the smart contract -- Deploy the smart contract -- Flatten the smart contract -- Verify the smart contract +#### What you will do + +* Install and set up Truffle +* Create a complex smart contract with dependencies (like OpenZeppelin) +* Compile the smart contract +* Test the smart contract +* Deploy the smart contract +* Flatten the smart contract +* Verify the smart contract -# 🚀 Setting up the development environment +## 🚀 Setting up the development environment There are a few technical requirements before we start. Please install the following: -- [Node.js v8+ LTS and npm](https://nodejs.org/en/) (comes with Node) -- [Git](https://git-scm.com/) +* [Node.js v8+ LTS and npm](https://nodejs.org/en/) (comes with Node) +* [Git](https://git-scm.com/) Once we have those installed, we only need one command to install Truffle: @@ -55,7 +60,7 @@ Once we have those installed, we only need one command to install Truffle: npm install -g truffle ``` -To verify that Truffle is installed properly, type **`truffle version`** on a terminal. You should see something like: +To verify that Truffle is installed properly, type **`truffle version`** on a terminal. You should see something like: ```bash Truffle v5.5.27 (core: 5.5.27) @@ -67,7 +72,7 @@ Web3.js v1.7.4 If you see an error instead, make sure that your npm modules are added to your path. -## ⚒ Starting a new Truffle Project +### ⚒ Starting a new Truffle Project Lets start by setting up our folder, we are creating a project called `MyCounter`, create a new `MyCounter` folder by running on terminal @@ -94,31 +99,29 @@ http://trufflesuite.com/docs And your folder files will look like this: -

- Step 01 -

- +![Step 01](https://user-images.githubusercontent.com/78161484/190839624-495ef863-e177-4c62-81ca-680e5e6a4cab.png) -## ⚒ Configuring XDC Mainnet and Apothem Testnet on Truffle +### ⚒ Configuring XDC Mainnet and Apothem Testnet on Truffle In order to get started deploying new contracts on XDC Mainnet and/or Apothem, we need to install two new dependencies that will be used in the `truffle-config.js` file. These dependencies are `@truffle/hdwallet-provider` and `dotenv`. First choose your preferred package manager. In this example we are using `yarn` but you can also use `npm`. - If you never used `yarn` before, you might need to install it first.
‼️You can skip this step if you already have yarn installed‼️ +If you never used `yarn` before, you might need to install it first.\ +‼️You can skip this step if you already have yarn installed‼️ -```sh +``` npm install --global yarn ``` Initialize your package manager on your folder and install the required dependencies: -```sh +``` yarn init -y yarn add @truffle/hdwallet-provider dotenv ``` You will also need a **24-Word Mnemonic Phrase**. To configure your wallet, create a new `.env` file and write your mnemonic by running: -```sh +``` touch .env echo MNEMONIC=arm derive cupboard decade course garlic journey blast tribe describe curve obey >> .env ``` @@ -129,7 +132,6 @@ Remember to change the **24-Word Mnemonic** above for your own mnemonic. The con MNEMONIC=arm derive cupboard decade course garlic journey blast tribe describe curve obey ``` - 🚨 **Do not use the mnemonic in the example above in production or you can risk losing your assets and/or the ownership of your smart contracts!** 🚨 And finally, we can configure the `truffle-config.js` file for both Apothem and XinFin Networks by writting: @@ -173,17 +175,17 @@ module.exports = { }; ``` -## ⚒ Adding Testnet XDC to Development Wallet +### ⚒ Adding Testnet XDC to Development Wallet It is possible to list all XDC addresses bound to your mnemonic on truffle by accessing the truffle console: -```sh +``` truffle console --network xinfin ``` Once the truffle console CLI opens, you can run: -```sh +``` truffle(xinfin)> accounts ``` @@ -208,21 +210,19 @@ These accounts are on the Ethereum standard format starting with `0x`, but we ca With this account in hand, we can head to the [Apothem Faucet](https://faucet.apothem.network/) and claim some TXDC for development purposes: -

- Step 02 -

+![Step 02](https://user-images.githubusercontent.com/78161484/189952656-eb7793cc-7dee-4307-88fc-7c351a75cec7.png) -# 💵 Writing Smart Contract +## 💵 Writing Smart Contract We will be using OpenZeppelin for this guide so lets install it first: -```sh +``` yarn add @openzeppelin/contracts ``` or using `npm` -```sh +``` npm install @openzeppelin/contracts ``` @@ -254,17 +254,17 @@ contract MyCounter { } ``` -## 💵 Compiling and Testing +### 💵 Compiling and Testing We can compile our `MyCounter.sol` by running: -```sh +``` truffle compile ``` If everything is correctly configured and there is no errors, you should see the following message on your console: -```sh +``` Compiling your contracts... =========================== > Compiling ./contracts/MyCounter.sol @@ -276,15 +276,14 @@ Compiling your contracts... And your folder should look like this: -

- Step 03 -

+![Step 03](https://user-images.githubusercontent.com/78161484/190875030-27137576-84b6-45a1-be1d-f52f55d6488f.png) -### Testing +#### Testing Now lets create a simple test to see everything works as intended before we deploy our contract to live network. This will save us time and gas fees, so it is recommended you do as much as possible tests for your smart contracts before deploying. Create file `MyCounter.js` under `test` directory: + ```javascript const MyCounter = artifacts.require("MyCounter"); @@ -315,13 +314,13 @@ contract("MyCounter", (accounts) => { Then run -```sh +``` truffle test ``` Your output should look like this: -```sh +``` Contract: MyCounter ✔ should deploy MyCounter ✔ should increment and decrement MyCounter and show current count (131ms) @@ -329,11 +328,11 @@ Contract: MyCounter 2 passing (197ms) ``` -## 💵 Deploying Contract +### 💵 Deploying Contract In order to deploy our newly compiled contract artifacts to the blockchain, we need to create a deployment script into the migrations folder: -```sh +``` touch ./migrations/1_token_migration.js ``` @@ -349,13 +348,13 @@ module.exports = function (deployer) { If the migration script have no errors, we can go ahead and run the command: -```sh +``` truffle migrate --network xinfin ``` For deployment on XDC mainet, or: -```sh +``` truffle migrate --network apothem ``` @@ -363,7 +362,7 @@ For deployment on the XDC Apothem Testnet. In either case, you need to have enou If the deployment is sucessful, the console should log the following message after migrations complete processing: -```sh +``` 1_counter_migration.js ====================== @@ -391,7 +390,7 @@ Summary > Final cost: 0.0032993 ETH ``` -## 💵 Flattening Contract +### 💵 Flattening Contract If smart contract imports external files like our, we need to flatten it before verifying on Block Explorer. @@ -415,19 +414,19 @@ truffle-flattener contracts/MyCounter.sol > MyCounterFlatten.sol Then open `MyCounterFlatten.sol` and remove every line which starts with `// SPDX-License-Identifier` except the first one. We do this because Block Explorer does not accepts contracts with mutliple license definition. -# 🔍 Veryfing Contracts on the Block Explorer +## 🔍 Veryfing Contracts on the Block Explorer Once you have successfully deployed your smart contract to the blockchain, it might be interesting to verify you contract on [XinFin Block Explorer](https://explorer.xinfin.network/). First lets check the address our contract is deployed to by running: -```sh +``` truffle networks ``` If you have a contract already deployed, the console should log something like this: -```sh +``` Network: apothem (id: 51) No contracts deployed. @@ -437,34 +436,28 @@ Network: xinfin (id: 50) Here we have a `MyCounter` contract deployed on XDC Mainnet at the `0x53bA8Cb12EaF09E6B0b671F39ac4798A6DA7d660`. This address is in the Ethereum standard but we can simply swap the `0x` prefix for `xdc` and search for our newly deployed contract on [XinFin Block Explorer](https://explorer.xinfin.network/): -

- Verify 01 -

+![Verify 01](https://user-images.githubusercontent.com/78161484/190875518-828c0061-71de-42c2-b222-0b8427852d01.png) And click in the `Verify And Publish` Option. We will be redirected to the Contract verification page where we need to fill out: -- Contract Name: MyCounter -- Compiler: Check your `truffle-config.js` file for Compiler Version -- Contract Code: Just paste everything from your `MyCounterFlatten.sol` file +* Contract Name: _MyCounter_ +* Compiler: _Check your_ `truffle-config.js` _file for Compiler Version_ +* Contract Code: _Just paste everything from your_ `MyCounterFlatten.sol` _file_ ❕ Keep in mind that `Contract Code` should be `MyCounterFlatten.sol`, not `MyCounter.sol`. ❕ Once everything is filled out, press Submit! -

- Verify 02 -

+![Verify 02](https://user-images.githubusercontent.com/78161484/190875635-f6d3aa36-47b2-4b09-ad6a-fe6df3fb11f1.png) If everything is correctly filled out, your contract page on the block explorer should display a new tab called `Contract`: -

- Verify 03 -

+![Verify 03](https://user-images.githubusercontent.com/78161484/190875780-6223b4b0-fecc-4e79-83bc-c810c5b0351c.png) ---- +*** -For more information about Truffle Suite, Please Visit [Truffle Suite Documentation](https://trufflesuite.com/docs/truffle/).
-For more information about XinFin Network, Please Visit [XDC Network Documentation on GitBook](https://docs.xdc.community/).
+For more information about Truffle Suite, Please Visit [Truffle Suite Documentation](https://trufflesuite.com/docs/truffle/).\ +For more information about XinFin Network, Please Visit [XDC Network Documentation on GitBook](https://docs.xdc.community/).\ Resources used during the deployment of the MyCounter can be found at [MyCounter Contract Folder](https://github.com/XDC-Community/docs/tree/main/how-to/SmartContract/Flatten/Truffle/example-flatten-smart-contract). diff --git a/get-started/dev-environment/brownie.md b/get-started/dev-environment/brownie.md index 3898a18a..c7223734 100644 --- a/get-started/dev-environment/brownie.md +++ b/get-started/dev-environment/brownie.md @@ -1,120 +1,119 @@ -Brownie is Python-Based framework for developing custom smart contracts on the Blockchain, we will be deploying XRC20 to XDC Network using brownie - -Things we need: - - Python > 3.8 - - eth-brownie - - ##### Brownie works well with Python above 3.8 - - ```code - python -m pip install eth-brownie - ``` - ![powershell_j6ZGJ6csen](https://user-images.githubusercontent.com/41552663/197033638-5698520b-0c45-46e4-99c7-c40bd584f23b.gif) - - ![powershell_2yD7EobabD](https://user-images.githubusercontent.com/41552663/197037734-13540079-1cbb-4a99-8485-a51e05d72d40.gif) - - Will get you the latest eth-brownie version from pypi packages - - After installation eth-brownie should be in your terminal enviroment as *brownie* - - Fire up a terminal and type *brownie --help* to make sure everything is good - - ![powershell_i3TJBhkko9](https://user-images.githubusercontent.com/41552663/197038983-2df3513b-6015-47be-b0c9-a7ee2db9aea3.gif) - -#### Connecting to XDC Network Using Brownie - -Using a suitable RPC address we will be connecting to a node on XDC Network to be use on brownie - -We will connect to Testnet using RPC https://apothemxdcpayrpc.blocksscan.io/ - -```brownie network list``` will print a list of network that we have available and ready to use yet we need to add XDC since it does not come by default in brownie - -To easily connect to XDC Network when using brownie we will be adding it as default in our Brownie Networks enviroment type the following: - -```brownie networks add xdc testnet host=https://apothemxdcpayrpc.blocksscan.io/ chainid=51``` - -![powershell_sCPO8SxO9k](https://user-images.githubusercontent.com/41552663/197041710-8f88be4c-9271-4404-aa64-f7f4126284b7.gif) - -### Interacting with XDC Network using Brownie - -We our network already added on our brownie list we will proceed to interact with it - -Lighting up a terminal type ```brownie console --network tesnet``` - -![Code_0emPCIYoOP](https://user-images.githubusercontent.com/41552663/197043395-d71887d1-fac6-4cfe-95b5-11a1bef7acbf.gif) - -```chain.id``` print us ```51``` letting us know that are already connected to XDC - -### Querying Account balances - -We will add an account to query the balance we have available on XDC - -``` ->>> from web3 import Account ->>> account = accounts.add(Account.create().key) ->>> account.address -'0x4D0928Df315D816d9a6540CF79D7c547C5294eA8' ->>> account.balance() -100000000000000000000 ->>> -``` - -![Code_HfFpNWKCbB](https://user-images.githubusercontent.com/41552663/197049220-d3af6794-59df-4000-97aa-cf01b84c16a4.gif) - -Our balance in fact: - -![chrome_mT1p7EHfaU](https://user-images.githubusercontent.com/41552663/197049576-0e41dd28-d5be-4635-84e7-a2d1c63f27c0.gif) - - - - - -## Initializing a new Brownie Project - -Using ```brownie init``` will output us a project structure containing folder to initialize our new project (tokens, etc) - -![Code_jgK7UqBOBb](https://user-images.githubusercontent.com/41552663/197054279-45eb9155-7582-4619-956c-f956b56aae3c.gif) - -#### Transfering XDC between Accounts using Brownie - -below we are transfering some XDC main token between accounts using browning - -![Code_XJR9qIggCn](https://user-images.githubusercontent.com/41552663/197057983-92494e80-e1a1-413f-8332-e9e92c5e9d26.gif) - -![chrome_elStq0tBGn](https://user-images.githubusercontent.com/41552663/197058096-ea984de5-dec7-4fe8-896d-b0458988001d.gif) - -### Compiling a XRC20 & deploying to the network - - We will be deploying the following XRC20 - ```solidity - pragma solidity >=0.8.0 <0.9.0; -import "./XRC20.sol"; -address constant owner = 0x4D0928Df315D816d9a6540CF79D7c547C5294eA8; -contract BlastToken is XRC20Token { - constructor() XRC20Token('Blaster Token', 'Blast', 18, 1000*10**18) {} -} - ``` - -![Code_2zkYkM5fdW](https://user-images.githubusercontent.com/41552663/197070060-13cd5b75-3159-42dc-8088-3dc3c49c828d.png) - -![Code_tZNY8mdGRn](https://user-images.githubusercontent.com/41552663/197070549-10b2103e-c70e-42dc-b452-c279623accba.gif) - -Deployed Token - -![chrome_hHyRarZ9m5](https://user-images.githubusercontent.com/41552663/197072906-23aa7bc4-e090-4b1c-8c82-74e906920e3c.png) - -After deployment the we can see "Blast Token" on-chain https://explorer.apothem.network/tokens/xdcaccf490aea9a2c17d60a62672ee519e61b5a1ec5 - -### Adding the token to XDC Pay & transfering - - -![chrome_pZKaMfMkQ0](https://user-images.githubusercontent.com/41552663/197070978-70267fc6-ed58-4118-bacd-4264eea7abc1.gif) - - -![chrome_5QXMaeYvoG](https://user-images.githubusercontent.com/41552663/197072620-fb1c9fa0-1055-4048-b298-175ad079ca3e.gif) - -## Some transactions done - -https://explorer.apothem.network/txs/0x23bbf8d8f84bbfdc85cce7493cb388e968f0aed3715b95fa81d3ac7c1614d004#overview - -https://explorer.apothem.network/txs/0x2acf5757d236580c98b0c7e4ec864f700964ffa0cf3fcf7fe6130fe2a77a8d0c#overview \ No newline at end of file +# Brownie + +Brownie is Python-Based framework for developing custom smart contracts on the Blockchain, we will be deploying XRC20 to XDC Network using brownie + +Things we need: + +* Python > 3.8 +* eth-brownie + +**Brownie works well with Python above 3.8** + +``` + python -m pip install eth-brownie +``` + +![powershell\_j6ZGJ6csen](https://user-images.githubusercontent.com/41552663/197033638-5698520b-0c45-46e4-99c7-c40bd584f23b.gif) + +![powershell\_2yD7EobabD](https://user-images.githubusercontent.com/41552663/197037734-13540079-1cbb-4a99-8485-a51e05d72d40.gif) + +Will get you the latest eth-brownie version from pypi packages + +After installation eth-brownie should be in your terminal enviroment as _brownie_ + +Fire up a terminal and type _brownie --help_ to make sure everything is good + +![powershell\_i3TJBhkko9](https://user-images.githubusercontent.com/41552663/197038983-2df3513b-6015-47be-b0c9-a7ee2db9aea3.gif) + +**Connecting to XDC Network Using Brownie** + +Using a suitable RPC address we will be connecting to a node on XDC Network to be use on brownie + +We will connect to Testnet using RPC https://apothemxdcpayrpc.blocksscan.io/ + +`brownie network list` will print a list of network that we have available and ready to use yet we need to add XDC since it does not come by default in brownie + +To easily connect to XDC Network when using brownie we will be adding it as default in our Brownie Networks enviroment type the following: + +`brownie networks add xdc testnet host=https://apothemxdcpayrpc.blocksscan.io/ chainid=51` + +![powershell\_sCPO8SxO9k](https://user-images.githubusercontent.com/41552663/197041710-8f88be4c-9271-4404-aa64-f7f4126284b7.gif) + +#### Interacting with XDC Network using Brownie + +We our network already added on our brownie list we will proceed to interact with it + +Lighting up a terminal type `brownie console --network tesnet` + +![Code\_0emPCIYoOP](https://user-images.githubusercontent.com/41552663/197043395-d71887d1-fac6-4cfe-95b5-11a1bef7acbf.gif) + +`chain.id` print us `51` letting us know that are already connected to XDC + +#### Querying Account balances + +We will add an account to query the balance we have available on XDC + +``` +>>> from web3 import Account +>>> account = accounts.add(Account.create().key) +>>> account.address +'0x4D0928Df315D816d9a6540CF79D7c547C5294eA8' +>>> account.balance() +100000000000000000000 +>>> +``` + +![Code\_HfFpNWKCbB](https://user-images.githubusercontent.com/41552663/197049220-d3af6794-59df-4000-97aa-cf01b84c16a4.gif) + +Our balance in fact: + +![chrome\_mT1p7EHfaU](https://user-images.githubusercontent.com/41552663/197049576-0e41dd28-d5be-4635-84e7-a2d1c63f27c0.gif) + +### Initializing a new Brownie Project + +Using `brownie init` will output us a project structure containing folder to initialize our new project (tokens, etc) + +![Code\_jgK7UqBOBb](https://user-images.githubusercontent.com/41552663/197054279-45eb9155-7582-4619-956c-f956b56aae3c.gif) + +**Transfering XDC between Accounts using Brownie** + +below we are transfering some XDC main token between accounts using browning + +![Code\_XJR9qIggCn](https://user-images.githubusercontent.com/41552663/197057983-92494e80-e1a1-413f-8332-e9e92c5e9d26.gif) + +![chrome\_elStq0tBGn](https://user-images.githubusercontent.com/41552663/197058096-ea984de5-dec7-4fe8-896d-b0458988001d.gif) + +#### Compiling a XRC20 & deploying to the network + +We will be deploying the following XRC20 + +```solidity +pragma solidity >=0.8.0 <0.9.0; +import "./XRC20.sol"; +address constant owner = 0x4D0928Df315D816d9a6540CF79D7c547C5294eA8; +contract BlastToken is XRC20Token { + constructor() XRC20Token('Blaster Token', 'Blast', 18, 1000*10**18) {} +} +``` + +![Code\_2zkYkM5fdW](https://user-images.githubusercontent.com/41552663/197070060-13cd5b75-3159-42dc-8088-3dc3c49c828d.png) + +![Code\_tZNY8mdGRn](https://user-images.githubusercontent.com/41552663/197070549-10b2103e-c70e-42dc-b452-c279623accba.gif) + +Deployed Token + +![chrome\_hHyRarZ9m5](https://user-images.githubusercontent.com/41552663/197072906-23aa7bc4-e090-4b1c-8c82-74e906920e3c.png) + +After deployment the we can see "Blast Token" on-chain https://explorer.apothem.network/tokens/xdcaccf490aea9a2c17d60a62672ee519e61b5a1ec5 + +#### Adding the token to XDC Pay & transfering + +![chrome\_pZKaMfMkQ0](https://user-images.githubusercontent.com/41552663/197070978-70267fc6-ed58-4118-bacd-4264eea7abc1.gif) + +![chrome\_5QXMaeYvoG](https://user-images.githubusercontent.com/41552663/197072620-fb1c9fa0-1055-4048-b298-175ad079ca3e.gif) + +### Some transactions done + +https://explorer.apothem.network/txs/0x23bbf8d8f84bbfdc85cce7493cb388e968f0aed3715b95fa81d3ac7c1614d004#overview + +https://explorer.apothem.network/txs/0x2acf5757d236580c98b0c7e4ec864f700964ffa0cf3fcf7fe6130fe2a77a8d0c#overview diff --git a/get-started/xdc-design/xdpos-2.0.md b/get-started/xdc-design/xdpos-2.0.md index e8d1c33e..9c22fee3 100644 --- a/get-started/xdc-design/xdpos-2.0.md +++ b/get-started/xdc-design/xdpos-2.0.md @@ -98,7 +98,7 @@ The protocol is a leader-based one proceeding in rounds. Each round has a differ The block data structure is similar to that in Ethereum, except that a parentQC field is added to the block header. Here QC stands for quorum certificate. It is created by the leader of round-r for the block in r −1 (the parent block) when at least tH = dVALIDATOR\_SET\_SIZE × 2/3e master nodes have voted for this parent block, certifying that this parent block has been approved by the super-majority of the nodes. A QC contains the parent block hash1 , the round number, and the metadata such as signatures of the vote messages. In case of no proposal and/or a timeout in a round r − 1, nodes will send a "timeout" message for this round, and the leader of round r will gather tH of them into a timeout certificate (TC), so that this round can be dropped from the 1This parent hash is the same as header.parentHash. But we do not override header.parentHash for the sake of backwards-compatibility. 6 blockchain. We note that round number is not the same as block number - round number might be skipped in the blockchain but block numbers are guaranteed to be consecutive. Figure 2 shows an example of the main chain with QCs. Note that round r + 2 is skipped in the main chain due to timeout. The specification of data structures is provided in Algorithm 1. -

Figure 2: XDC blockchain

+

Figure 2: XDC blockchain

`Algorithm 1 Data Structures in the protocol` diff --git a/learn/community-support/how-to-report-an-issue.md b/learn/community-support/how-to-report-an-issue.md index b94c722c..30511a68 100644 --- a/learn/community-support/how-to-report-an-issue.md +++ b/learn/community-support/how-to-report-an-issue.md @@ -35,7 +35,7 @@ In general the issue reporting process has two steps: 1. On [xdc.dev](https://www.xdc.dev/) (after having created an account) click on the "Create Post" button in the upper right hand corner. -
+
2. Add a descriptive title to your post and be sure to provide a link back to the GitHub issue in the body of the post.
diff --git a/learn/how-to-articles/create-and-deploy-your-first-smart-contract-on-the-xdc-network-using-openzeppelin-and-hardhat.md b/learn/how-to-articles/create-and-deploy-your-first-smart-contract-on-the-xdc-network-using-openzeppelin-and-hardhat.md index 18ec1f90..1be864a3 100644 --- a/learn/how-to-articles/create-and-deploy-your-first-smart-contract-on-the-xdc-network-using-openzeppelin-and-hardhat.md +++ b/learn/how-to-articles/create-and-deploy-your-first-smart-contract-on-the-xdc-network-using-openzeppelin-and-hardhat.md @@ -1,60 +1,58 @@ # Create and Deploy Your First Smart Contract on the XDC Network Using OpenZeppelin and Hardhat -# 🧭 Table of contents - -- [Create and Deploy Your First Smart Contract on the XDC Network Using OpenZeppelin and Hardhat](#create-and-deploy-your-first-smart-contract-on-the-xdc-network-using-openzeppelin-and-hardhat) -- [🧭 Table of contents](#-table-of-contents) -- [📰 Overview](#-overview) - - [What you will learn](#what-you-will-learn) - - [What you will do](#what-you-will-do) -- [⚒ Starting a new Hardhat Project](#-starting-a-new-hardhat-project) - - [Prerequisites](#prerequisites) - - [Setup for a Hardhat Project](#setup-for-a-hardhat-project) -- [💵 Write Smart Contract Using OpenZeppelin](#-write-smart-contract-using-openzeppelin) - - [Compile the Contract](#compile-the-contract) - - [Writing a script file to deploy the contract](#writing-a-script-file-to-deploy-the-contract) - - [Setup .env file](#setup-env-file) - - [⚒ Configuring XDC Mainnet and Apothem Testnet on Hardhat](#-configuring-xdc-mainnet-and-apothem-testnet-on-hardhat) - - [💵 Deploying the contract](#-deploying-the-contract) - - [Flattening the Smart Contract](#flattening-the-smart-contract) - - [🔍 Veryfing Contracts on the Block Explorer](#-veryfing-contracts-on-the-block-explorer) - -# 📰 Overview - - +## Create and Deploy Your First Smart Contract on the XDC Network Using OpenZeppelin and Hardhat + +## 🧭 Table of contents + +* [Create and Deploy Your First Smart Contract on the XDC Network Using OpenZeppelin and Hardhat](create-and-deploy-your-first-smart-contract-on-the-xdc-network-using-openzeppelin-and-hardhat.md#create-and-deploy-your-first-smart-contract-on-the-xdc-network-using-openzeppelin-and-hardhat) +* [🧭 Table of contents](create-and-deploy-your-first-smart-contract-on-the-xdc-network-using-openzeppelin-and-hardhat.md#-table-of-contents) +* [📰 Overview](create-and-deploy-your-first-smart-contract-on-the-xdc-network-using-openzeppelin-and-hardhat.md#-overview) + * [What you will learn](create-and-deploy-your-first-smart-contract-on-the-xdc-network-using-openzeppelin-and-hardhat.md#what-you-will-learn) + * [What you will do](create-and-deploy-your-first-smart-contract-on-the-xdc-network-using-openzeppelin-and-hardhat.md#what-you-will-do) +* [⚒ Starting a new Hardhat Project](create-and-deploy-your-first-smart-contract-on-the-xdc-network-using-openzeppelin-and-hardhat.md#-starting-a-new-hardhat-project) + * [Prerequisites](create-and-deploy-your-first-smart-contract-on-the-xdc-network-using-openzeppelin-and-hardhat.md#prerequisites) + * [Setup for a Hardhat Project](create-and-deploy-your-first-smart-contract-on-the-xdc-network-using-openzeppelin-and-hardhat.md#setup-for-a-hardhat-project) +* [💵 Write Smart Contract Using OpenZeppelin](create-and-deploy-your-first-smart-contract-on-the-xdc-network-using-openzeppelin-and-hardhat.md#-write-smart-contract-using-openzeppelin) + * [Compile the Contract](create-and-deploy-your-first-smart-contract-on-the-xdc-network-using-openzeppelin-and-hardhat.md#compile-the-contract) + * [Writing a script file to deploy the contract](create-and-deploy-your-first-smart-contract-on-the-xdc-network-using-openzeppelin-and-hardhat.md#writing-a-script-file-to-deploy-the-contract) + * [Setup .env file](create-and-deploy-your-first-smart-contract-on-the-xdc-network-using-openzeppelin-and-hardhat.md#setup-env-file) + * [⚒ Configuring XDC Mainnet and Apothem Testnet on Hardhat](create-and-deploy-your-first-smart-contract-on-the-xdc-network-using-openzeppelin-and-hardhat.md#-configuring-xdc-mainnet-and-apothem-testnet-on-hardhat) + * [💵 Deploying the contract](create-and-deploy-your-first-smart-contract-on-the-xdc-network-using-openzeppelin-and-hardhat.md#-deploying-the-contract) + * [Flattening the Smart Contract](create-and-deploy-your-first-smart-contract-on-the-xdc-network-using-openzeppelin-and-hardhat.md#flattening-the-smart-contract) + * [🔍 Veryfing Contracts on the Block Explorer](create-and-deploy-your-first-smart-contract-on-the-xdc-network-using-openzeppelin-and-hardhat.md#-veryfing-contracts-on-the-block-explorer) + +## 📰 Overview [OpenZeppelin](https://www.openzeppelin.com/) is an open-source framework that helps to build secure smart contracts to automate your decentralized applications. OpenZeppelin contracts are written in solidity and use ERC standards for Ethereum-based tokens. -### What you will learn +#### What you will learn In this tutorial, you will learn how to set up Hardhat and use it to build, test, and deploy a smart contract build with OpenZeppelin on both the XDC Network mainnet and XDC Apothem testnet. -The complete tutorial code can be found [here](./xdc-openzeppelin). +The complete tutorial code can be found [here](xdc-openzeppelin/). -### What you will do +#### What you will do -- Install and setup Hardhat -- Create a smart contract with the help of openzeppelin -- Compile the smart contract -- Deploy the smart contract -- Interact with the smart contract -- Check the deployment status on [xinfin.network](https://xinfin.network/#stats) +* Install and setup Hardhat +* Create a smart contract with the help of openzeppelin +* Compile the smart contract +* Deploy the smart contract +* Interact with the smart contract +* Check the deployment status on [xinfin.network](https://xinfin.network/#stats) -# ⚒ Starting a new Hardhat Project +## ⚒ Starting a new Hardhat Project -### Prerequisites +#### Prerequisites Metamask wallet ([Extension link](https://chrome.google.com/webstore/detail/metamask/nkbihfbeogaeaoehlefnkodbefgpgknn?hl=en)) or XDC Pay wallet ([Extension link](https://chrome.google.com/webstore/detail/xdcpay/bocpokimicclpaiekenaeelehdjllofo)) -Don't know how to create a wallet? [Click here](https://myterablock.medium.com/how-to-create-or-import-a-metamask-wallet-a551fc2f5a6b#:~:text=Click%20on%20the%20MetaMask%20extension,or%20create%20a%20new%20one.&text=Click%20on%20%E2%80%9CCreate%20a%20Wallet,%E2%80%9CNo%20Thanks%E2%80%9D%20to%20proceed.) +Don't know how to create a wallet? [Click here](https://myterablock.medium.com/how-to-create-or-import-a-metamask-wallet-a551fc2f5a6b) Node.js. ([Download link](https://nodejs.org/en/download/)) -### Setup for a Hardhat Project +#### Setup for a Hardhat Project First, you'll need to setup your hardhat project. Open the terminal and follow these commands. @@ -78,12 +76,12 @@ In the same directory, run: npx hardhat ``` -Screenshot 2022-09-13 at 11 56 26 AM +![Screenshot 2022-09-13 at 11 56 26 AM](https://user-images.githubusercontent.com/35517007/189841544-480b1a9c-b5d8-483c-a77e-b04501f6f121.png) -- Select `Create a Javascript project` or `Create a Typescript project` according to your requirement. -- Specify Hardhat Project root or press enter for already specified path. -- Specify `y` for yes and `n` for no for adding a .gitignore -- Press enter for `Do you want to install this sample project's dependencies with npm (@nomicfoundation/hardhat-toolbox)?` +* Select `Create a Javascript project` or `Create a Typescript project` according to your requirement. +* Specify Hardhat Project root or press enter for already specified path. +* Specify `y` for yes and `n` for no for adding a .gitignore +* Press enter for `Do you want to install this sample project's dependencies with npm (@nomicfoundation/hardhat-toolbox)?` Note: If you are on windows, install this: @@ -91,10 +89,9 @@ Note: If you are on windows, install this: npm install --save-dev @nomicfoundation/hardhat-toolbox ``` -Now, you will have a folder structure as below -Screenshot 2022-09-25 at 12 12 40 AM +Now, you will have a folder structure as below ![Screenshot 2022-09-25 at 12 12 40 AM](https://user-images.githubusercontent.com/35517007/192116380-698146f9-860f-4748-95f6-cba2cfa2edde.png) -# 💵 Write Smart Contract Using OpenZeppelin +## 💵 Write Smart Contract Using OpenZeppelin To use OpenZeppelin contracts, install the package in the project using: @@ -171,9 +168,9 @@ contract MyToken is ERC20 { } ``` -## Compile the Contract +### Compile the Contract -- To compile the contract, write the following in the terminal: +* To compile the contract, write the following in the terminal: ```bash npx hardhat compile @@ -183,11 +180,11 @@ If this returns errors, check your contract and rectify them. If everything is correctly configured and there is no errors, you should see the following message on your console: -```sh +``` Compiled 5 Solidity files successfully ``` -## Writing a script file to deploy the contract +### Writing a script file to deploy the contract For writing the script to deploy the contract, create `deploy.js` in `scripts` folder, if it is already not there. Copy the following code in the `deploy.js`: @@ -213,19 +210,19 @@ main() }); ``` -- To add the XDC Testnet network to metamask: (If you are using XDCPay, you don't have to follow this step) +* To add the XDC Testnet network to metamask: (If you are using XDCPay, you don't have to follow this step) -Screenshot 2022-09-13 at 12 31 31 PM +![Screenshot 2022-09-13 at 12 31 31 PM](https://user-images.githubusercontent.com/35517007/189842148-a3d20b76-e14a-44fa-9c94-445825acd42b.png) -- To add XDC mainnet network to metamask: (If you are using XDCPay you don't have to follow this step) +* To add XDC mainnet network to metamask: (If you are using XDCPay you don't have to follow this step) -Screenshot 2022-09-13 at 12 35 05 PM +![Screenshot 2022-09-13 at 12 35 05 PM](https://user-images.githubusercontent.com/35517007/189842216-01c87935-4b4e-49bc-89ea-11026250dbf8.png) -## Setup .env file +### Setup .env file > Make sure you do not push this file to github. -- Make a `.env` at the root of the project to store the private key and network url. +* Make a `.env` at the root of the project to store the private key and network url. ```python XINFIN_NETWORK_URL="enter-network-rpc-url-here" @@ -242,30 +239,29 @@ PRIVATE_KEY=202e3c9d30bbeca38d6578659919d4c3dc989ae18c16756690877fdc4dfa607f 🚨 **Do not use the Private Key in the example above in production or you can risk losing your assets!** 🚨 -- Dont know how to get your private key? Open your XDCPay wallet extension and click on the three dots on the top-left. This will open a popup. - Screenshot 2022-09-18 at 12 27 44 AM +* Dont know how to get your private key? Open your XDCPay wallet extension and click on the three dots on the top-left. This will open a popup. ![Screenshot 2022-09-18 at 12 27 44 AM](https://user-images.githubusercontent.com/35517007/190872826-b3437164-e6a8-487d-91c7-4a1d85d341d1.png) Click on the `Export Private key` inside the popup. -Screenshot 2022-09-18 at 12 31 05 AM +![Screenshot 2022-09-18 at 12 31 05 AM](https://user-images.githubusercontent.com/35517007/190872880-c0c34a79-b81f-40f5-895d-d29714ef42b6.png) Enter the password that you used while creating the account. -Screenshot 2022-09-18 at 12 31 20 AM +![Screenshot 2022-09-18 at 12 31 20 AM](https://user-images.githubusercontent.com/35517007/190872906-4cf58f76-bb80-4a53-a496-b05a33217758.png) Copy your private key. This key will be used to sign transactions when deploying the contract through hardhat. -Screenshot 2022-09-18 at 12 31 35 AM +![Screenshot 2022-09-18 at 12 31 35 AM](https://user-images.githubusercontent.com/35517007/190872961-7ffb8329-2601-4346-bbb0-7a4ff38fd5f8.png) -## ⚒ Configuring XDC Mainnet and Apothem Testnet on Hardhat +### ⚒ Configuring XDC Mainnet and Apothem Testnet on Hardhat -- To be able to import env file variables, please install `dotenv` from your terminal: +* To be able to import env file variables, please install `dotenv` from your terminal: ```bash npm install dotenv ``` -- Open the `hardhat.config.js` file. Now we will add the network url and private key of our wallet to this file, so that we can deploy our contract. Your `harhat.config.js` should look like this. +* Open the `hardhat.config.js` file. Now we will add the network url and private key of our wallet to this file, so that we can deploy our contract. Your `harhat.config.js` should look like this. ```jsx require("@nomicfoundation/hardhat-toolbox"); @@ -286,7 +282,7 @@ module.exports = { }; ``` -## 💵 Deploying the contract +### 💵 Deploying the contract After writing code for the setup and contract, go back to the terminal. Make sure you are in your project directory and type: @@ -298,7 +294,7 @@ npx hardhat run scripts/deploy.js --network xinfin For the testnet: -```sh +``` npx hardhat run scripts/deploy.js --network apothem ``` @@ -306,11 +302,11 @@ In either case, you need to have enough funds to pay gas fees on the address tha If the deployment is sucessful, the console should log the following message after migrations complete processing: -```sh +``` My token contract address: 0xc8Ac88d77b9870D289806F54AfF9057f170bAb21 ``` -## Flattening the Smart Contract +### Flattening the Smart Contract When importing third-party libraries like OpenZeppelin, it becomes necessary to flatten your smart contract and then verify it on the blockscan, because blockscan doesn't have access to the OpenZeppelin's code. When we flatten the code, the OpenZeppelin's code will be included in the same file as your samrt contract. @@ -328,7 +324,7 @@ npx hardhat flatten ./contracts/MyToken.sol > flattenedMyToken.sol This will create a new file `flattenedMyToken.sol` which would include flattened code for your smart contract. -## 🔍 Veryfing Contracts on the Block Explorer +### 🔍 Veryfing Contracts on the Block Explorer Once you have successfully deployed your smart contract to the blockchain, it might be interesting to verify your contract on [XinFin Block Explorer](https://explorer.xinfin.network/). @@ -336,45 +332,30 @@ Change the prefix `0x` to `xdc` to look for your contract on [XinFin Block Explo In this example, there is a `MyToken` contract deployed on XDC Mainnet at the `0x802555081f6AAcE51559d0650Bf15f242aBe7fd7`. You could search for your newly deployed contract on [XinFin Block Explorer](https://explorer.xinfin.network/): -

- -Screenshot 2022-10-05 at 11 26 10 AM - -

+![Screenshot 2022-10-05 at 11 26 10 AM](https://user-images.githubusercontent.com/35517007/194009497-9deffaf8-dc30-482a-a143-f4cb972e1a53.png) Click in the `Verify And Publish` Option. You will be redirected to the contract verification page where we need to fill out: -- Contract Name: MyToken -- Compiler: Check your `hardhat-config.js` file for Compiler Version -- Contract Code: Just paste everything from your `flattenedMyToken.sol` file +* Contract Name: _MyToken_ +* Compiler: _Check your_ `hardhat-config.js` _file for Compiler Version_ +* Contract Code: _Just paste everything from your_ `flattenedMyToken.sol` _file_ Once everything is filled out, press Submit! -

- Screenshot 2022-10-05 at 11 28 46 AM - - -

+![Screenshot 2022-10-05 at 11 28 46 AM](https://user-images.githubusercontent.com/35517007/194009622-ea5966ba-aa15-4f81-ba94-bd2da2ca7dbf.png) If everything is correctly filled out, your contract page on the block explorer should display a new tab called `Contract`: -

- -Screenshot 2022-10-05 at 11 35 12 AM - -

+![Screenshot 2022-10-05 at 11 35 12 AM](https://user-images.githubusercontent.com/35517007/194009732-96bdc2be-cb9a-4fff-895c-9bcb7a1feb10.png) In this page you can Read from, Write to, or simply read the information tied to your Smart Contract on the blockchain: -

- Screenshot 2022-10-05 at 1 28 22 PM - -

+![Screenshot 2022-10-05 at 1 28 22 PM](https://user-images.githubusercontent.com/35517007/194010105-908c60ed-1261-4eac-b752-6b1f6feb8cc9.png) ---- +*** -For more information about Hardhat, Please Visit [Hardhat Documentation](https://hardhat.org/tutorial).
-For more information about XinFin Network, Please Visit [XDC Network Documentation on GitBook](https://docs.xdc.org/).
+For more information about Hardhat, Please Visit [Hardhat Documentation](https://hardhat.org/tutorial).\ +For more information about XinFin Network, Please Visit [XDC Network Documentation on GitBook](https://docs.xdc.org/).\ Resources used during the deployment of the openzeppelin ERC20 Token can be found [here](https://docs.openzeppelin.com/contracts/4.x/erc20). diff --git a/learn/how-to-articles/how-to-create-a-react-app-to-interact-with-xrc20-and-xrc721-tokens.md b/learn/how-to-articles/how-to-create-a-react-app-to-interact-with-xrc20-and-xrc721-tokens.md index 3d78fb2b..ede5f5d9 100644 --- a/learn/how-to-articles/how-to-create-a-react-app-to-interact-with-xrc20-and-xrc721-tokens.md +++ b/learn/how-to-articles/how-to-create-a-react-app-to-interact-with-xrc20-and-xrc721-tokens.md @@ -1,125 +1,129 @@ --- id: xdc-frontend-integration title: Creating a front-end for an XDC dApp. -description: "Creating a front-end for an XDC decentralized app and connecting it to XDC smart contracts." keywords: - docs - apothem - dApp - front-end - XRC20 +description: >- + Creating a front-end for an XDC decentralized app and connecting it to XDC + smart contracts. --- -# 🧭 Table of contents - -- [🧭 Table of contents](#-table-of-contents) -- [📰 Overview](#-overview) - - [What you will learn](#what-you-will-learn) - - [What you will do](#what-you-will-do) - - [What you will need](#what-you-will-need) -- [🚀 Project Introduction](#-project-introduction) - - [Smart Contracts](#smart-contracts) - - [Using Truffle](#using-truffle) - - [Using Hardhat](#using-hardhat) - - [Using Remix](#using-remix) - - [XRC20 Egg Token](#xrc20-egg-token) - - [XRC721 Egg NFT](#xrc721-egg-nft) - - [About XRC721 Egg NFT Metadata](#about-xrc721-egg-nft-metadata) - - [EGT Faucet](#egt-faucet) - - [Migration script using Truffle](#migration-script-using-truffle) - - [Migration script using Hardhat](#migration-script-using-hardhat) -- [📀 Flattening Solidity files](#-flattening-solidity-files) - - [Step 01](#step-01) - - [Step 02](#step-02) - - [Step 03](#step-03) -- [🏗 Building a Front-End Application](#-building-a-front-end-application) - - [Creating Smart Contract Instances in React](#creating-smart-contract-instances-in-react) - - [EggToken.ts](#eggtokents) - - [EggNFT.ts](#eggnftts) - - [Faucet.ts](#faucetts) - - [Creating Smart Contract Constants File](#creating-smart-contract-constants-file) - - [Creating Smart Contract Wrappers in React](#creating-smart-contract-wrappers-in-react) - - [EggTokenWrapper.ts](#eggtokenwrapperts) - - [EggNFTWrapper.ts](#eggnftwrapperts) - - [FaucetWrapper.ts](#faucetwrapperts) - - [Creating a Blockchain Context Provider in React](#creating-a-blockchain-context-provider-in-react) - - [Integrating Blockchain Methods to DOM elements](#integrating-blockchain-methods-to-dom-elements) - - [Updating `app.tsx` elements](#updating-apptsx-elements) -- [💧 Setting up Faucet Contract](#-setting-up-faucet-contract) - - [On Truffle](#on-truffle) - - [On Hardhat](#on-hardhat) -- [🔥 DApp Demo](#-dapp-demo) - - # 📰 Overview - +# How-To Create a React App to Interact with XRC20 and XRC721 Tokens + +## 🧭 Table of contents + +* [🧭 Table of contents](how-to-create-a-react-app-to-interact-with-xrc20-and-xrc721-tokens.md#-table-of-contents) +* [📰 Overview](how-to-create-a-react-app-to-interact-with-xrc20-and-xrc721-tokens.md#-overview) + * [What you will learn](how-to-create-a-react-app-to-interact-with-xrc20-and-xrc721-tokens.md#what-you-will-learn) + * [What you will do](how-to-create-a-react-app-to-interact-with-xrc20-and-xrc721-tokens.md#what-you-will-do) + * [What you will need](how-to-create-a-react-app-to-interact-with-xrc20-and-xrc721-tokens.md#what-you-will-need) +* [🚀 Project Introduction](how-to-create-a-react-app-to-interact-with-xrc20-and-xrc721-tokens.md#-project-introduction) + * [Smart Contracts](how-to-create-a-react-app-to-interact-with-xrc20-and-xrc721-tokens.md#smart-contracts) + * [Using Truffle](how-to-create-a-react-app-to-interact-with-xrc20-and-xrc721-tokens.md#using-truffle) + * [Using Hardhat](how-to-create-a-react-app-to-interact-with-xrc20-and-xrc721-tokens.md#using-hardhat) + * [Using Remix](how-to-create-a-react-app-to-interact-with-xrc20-and-xrc721-tokens.md#using-remix) + * [XRC20 Egg Token](how-to-create-a-react-app-to-interact-with-xrc20-and-xrc721-tokens.md#xrc20-egg-token) + * [XRC721 Egg NFT](how-to-create-a-react-app-to-interact-with-xrc20-and-xrc721-tokens.md#xrc721-egg-nft) + * [About XRC721 Egg NFT Metadata](how-to-create-a-react-app-to-interact-with-xrc20-and-xrc721-tokens.md#about-xrc721-egg-nft-metadata) + * [EGT Faucet](how-to-create-a-react-app-to-interact-with-xrc20-and-xrc721-tokens.md#egt-faucet) + * [Migration script using Truffle](how-to-create-a-react-app-to-interact-with-xrc20-and-xrc721-tokens.md#migration-script-using-truffle) + * [Migration script using Hardhat](how-to-create-a-react-app-to-interact-with-xrc20-and-xrc721-tokens.md#migration-script-using-hardhat) +* [📀 Flattening Solidity files](how-to-create-a-react-app-to-interact-with-xrc20-and-xrc721-tokens.md#-flattening-solidity-files) + * [Step 01](how-to-create-a-react-app-to-interact-with-xrc20-and-xrc721-tokens.md#step-01) + * [Step 02](how-to-create-a-react-app-to-interact-with-xrc20-and-xrc721-tokens.md#step-02) + * [Step 03](how-to-create-a-react-app-to-interact-with-xrc20-and-xrc721-tokens.md#step-03) +* [🏗 Building a Front-End Application](how-to-create-a-react-app-to-interact-with-xrc20-and-xrc721-tokens.md#-building-a-front-end-application) + * [Creating Smart Contract Instances in React](how-to-create-a-react-app-to-interact-with-xrc20-and-xrc721-tokens.md#creating-smart-contract-instances-in-react) + * [EggToken.ts](how-to-create-a-react-app-to-interact-with-xrc20-and-xrc721-tokens.md#eggtokents) + * [EggNFT.ts](how-to-create-a-react-app-to-interact-with-xrc20-and-xrc721-tokens.md#eggnftts) + * [Faucet.ts](how-to-create-a-react-app-to-interact-with-xrc20-and-xrc721-tokens.md#faucetts) + * [Creating Smart Contract Constants File](how-to-create-a-react-app-to-interact-with-xrc20-and-xrc721-tokens.md#creating-smart-contract-constants-file) + * [Creating Smart Contract Wrappers in React](how-to-create-a-react-app-to-interact-with-xrc20-and-xrc721-tokens.md#creating-smart-contract-wrappers-in-react) + * [EggTokenWrapper.ts](how-to-create-a-react-app-to-interact-with-xrc20-and-xrc721-tokens.md#eggtokenwrapperts) + * [EggNFTWrapper.ts](how-to-create-a-react-app-to-interact-with-xrc20-and-xrc721-tokens.md#eggnftwrapperts) + * [FaucetWrapper.ts](how-to-create-a-react-app-to-interact-with-xrc20-and-xrc721-tokens.md#faucetwrapperts) + * [Creating a Blockchain Context Provider in React](how-to-create-a-react-app-to-interact-with-xrc20-and-xrc721-tokens.md#creating-a-blockchain-context-provider-in-react) + * [Integrating Blockchain Methods to DOM elements](how-to-create-a-react-app-to-interact-with-xrc20-and-xrc721-tokens.md#integrating-blockchain-methods-to-dom-elements) + * [Updating `app.tsx` elements](how-to-create-a-react-app-to-interact-with-xrc20-and-xrc721-tokens.md#updating-apptsx-elements) +* [💧 Setting up Faucet Contract](how-to-create-a-react-app-to-interact-with-xrc20-and-xrc721-tokens.md#-setting-up-faucet-contract) + * [On Truffle](how-to-create-a-react-app-to-interact-with-xrc20-and-xrc721-tokens.md#on-truffle) + * [On Hardhat](how-to-create-a-react-app-to-interact-with-xrc20-and-xrc721-tokens.md#on-hardhat) +* [🔥 DApp Demo](how-to-create-a-react-app-to-interact-with-xrc20-and-xrc721-tokens.md#-dapp-demo) + +## 📰 Overview + In this tutorial, you will work with a few different tools to create a working decentralized App front-end from start to finish, leveraging [React](https://reactjs.org/) to bootstrap our front end. [Web3Modal](https://www.npmjs.com/package/web3modal) and [web3.js](https://www.npmjs.com/package/web3) will be used to create a touchpoint between our front-end and the XDC Network. You'll use the smart contract development environment of your choice: [Truffle](https://trufflesuite.com/), [Hardhat](https://hardhat.org/) or [Remix](https://remix.xinfin.network/)! -### What you will learn +#### What you will learn + In this tutorial, you will learn how to interact with XDC Network smart contracts and tokens through a simple web front-end on the XDC Network mainnet and XDC Apothem testnet. -### What you will do - - Create a simple web front end - - Further instructions on how to deploy multiple smart contracts - - Interact with smart contracts - - Create Interfaces to use XRC20 tokens on a React App - - Create Interfaces to use XRC721 tokens on a React App +#### What you will do -### What you will need +* Create a simple web front end +* Further instructions on how to deploy multiple smart contracts +* Interact with smart contracts +* Create Interfaces to use XRC20 tokens on a React App +* Create Interfaces to use XRC721 tokens on a React App + +#### What you will need There are a few technical requirements before we start. Please install the following: -- [Node.js v8+ LTS and npm](https://nodejs.org/en/) (comes with Node) -- [Git](https://git-scm.com/) +* [Node.js v8+ LTS and npm](https://nodejs.org/en/) (comes with Node) +* [Git](https://git-scm.com/) As you will be using XDCPay to interact with our first dApp on XDC Network, you can download XDCPay at: -- [XDCPay on Chrome Store](https://chrome.google.com/webstore/detail/xdcpay/bocpokimicclpaiekenaeelehdjllofo) +* [XDCPay on Chrome Store](https://chrome.google.com/webstore/detail/xdcpay/bocpokimicclpaiekenaeelehdjllofo) -# 🚀 Project Introduction +## 🚀 Project Introduction This tutorial is full of important concepts and we wanted to make something both interesting and fun, with that in mind, we are happy to introduce `EGG GACHA`! -

- Egg Gacha! - - -

- EGG GACHA! -

-

+![Egg Gacha!](https://user-images.githubusercontent.com/78161484/193483143-7589a63f-4204-4adb-9394-42544497e2c2.png) + +**EGG GACHA!** Gacha is a Japanese term for a small toy sold in a plastic capsule in a vending machine. And this is what we will make: A NFT vending machine where you can trade in an XRC20 token for a new XRC721 non-fungible token. We will create in the course of this tutorial: - 1. An XRC20 Token called `EGT` (Egg Tokens); - 2. An XRC721 Token called `EGGS`; - 3. An `EGT Faucet` smart contract, so people can get more `EGT` and buy new `EGGS`; - 4. An interface where users can interact with `EGT`, `EGGS` and the `EGT Faucet` Smart Contract; - - ## Smart Contracts - +1. An XRC20 Token called `EGT` (Egg Tokens); +2. An XRC721 Token called `EGGS`; +3. An `EGT Faucet` smart contract, so people can get more `EGT` and buy new `EGGS`; +4. An interface where users can interact with `EGT`, `EGGS` and the `EGT Faucet` Smart Contract; + +### Smart Contracts + It is not uncommon to see several smart contracts interacting in a real-world application to create a complete user experience - and that's what you'll be doing here. You will deploy three smart contracts that depend on one another to create our decentralized app experience. **If you have never deployed a Smart Contract on XDC Mainnet or Apothem Tesnet, please check the following tutorials before continuing** (You can chose between using **Truffle**, **Hardhat** or **Remix**): -### Using Truffle -:rotating_light: [Use Truffle to deploy a Smart Contract](https://github.com/XDC-Community/docs/blob/main/how-to/truffle.md)
-:rotating_light: [Use Truffle to deploy a XRC20 Token](https://github.com/XDC-Community/docs/blob/main/how-to/XRC20/Truffle/how-to.md)
-:rotating_light: [Use Truffle to deploy a XRC721 Token](https://github.com/XDC-Community/docs/blob/main/how-to/XRC721/Truffle/how-to.md) +#### Using Truffle + +:rotating\_light: [Use Truffle to deploy a Smart Contract](../../how-to/truffle.md)\ +:rotating\_light: [Use Truffle to deploy a XRC20 Token](../../how-to/XRC20/Truffle/how-to.md)\ +:rotating\_light: [Use Truffle to deploy a XRC721 Token](../../how-to/XRC721/Truffle/how-to.md) + +#### Using Hardhat -### Using Hardhat -:rotating_light: [Use Hardhat to deploy a Smart Contract](https://github.com/XDC-Community/docs/blob/main/how-to/contract-hardhat.md)
-:rotating_light: [Use Hardhat to deploy a XRC20 Token](https://github.com/XDC-Community/docs/blob/main/how-to/XRC20/Hardhat/how-to.md) +:rotating\_light: [Use Hardhat to deploy a Smart Contract](../../how-to/contract-hardhat.md)\ +:rotating\_light: [Use Hardhat to deploy a XRC20 Token](../../how-to/XRC20/Hardhat/how-to.md) -### Using Remix -:rotating_light: [Use Remix to deploy a Smart Contract](https://github.com/XDC-Community/docs/blob/main/how-to/remix-example.md)
-:rotating_light: [Use Remix to deploy a XRC20 Token](https://github.com/XDC-Community/docs/blob/main/how-to/XRC20/Remix/how-to.md)
-:rotating_light: [Use Remix to deploy a XRC721 Token](https://github.com/XDC-Community/docs/blob/main/how-to/XRC721/Remix/XRC721.md) +#### Using Remix -## XRC20 Egg Token +:rotating\_light: [Use Remix to deploy a Smart Contract](../../how-to/remix-example.md)\ +:rotating\_light: [Use Remix to deploy a XRC20 Token](../../how-to/XRC20/Remix/how-to.md)\ +:rotating\_light: [Use Remix to deploy a XRC721 Token](../../how-to/XRC721/Remix/XRC721.md) -First, you will abstract some of the code for the EGT tokens using Open Zeppelin's [Smart Contract Wizard](https://docs.openzeppelin.com/contracts/4.x/wizard). If you followed one of the tutorials listed in the [Smart Contracts](#smart-contracts) section, you might need to install `@openzeppelin/contracts` to your working directory first: +### XRC20 Egg Token -```sh +First, you will abstract some of the code for the EGT tokens using Open Zeppelin's [Smart Contract Wizard](https://docs.openzeppelin.com/contracts/4.x/wizard). If you followed one of the tutorials listed in the [Smart Contracts](how-to-create-a-react-app-to-interact-with-xrc20-and-xrc721-tokens.md#smart-contracts) section, you might need to install `@openzeppelin/contracts` to your working directory first: + +``` npm install @openzeppelin/contracts ``` @@ -141,7 +145,7 @@ contract EggToken is ERC20, Ownable { :bangbang: IMPORTANT: the contract above needs to be flattened to get verified on the block explorer :bangbang: -## XRC721 Egg NFT +### XRC721 Egg NFT Following the same logic as above, you will ceate an `Eggs.sol` file using a Open Zeppelin's smart contracts with a few small changes: @@ -228,14 +232,14 @@ contract EggNFT is ERC721, ERC721Enumerable, ERC721URIStorage, Ownable { } } ``` + :bangbang: IMPORTANT: the contract above needs to be flattened to get verified on the block explorer :bangbang: -## About XRC721 Egg NFT Metadata +### About XRC721 Egg NFT Metadata In the section above, we define the NFT metadata inside the `buyEgg()` method: ```solidity - _setTokenURI(tokenId, string( abi.encodePacked( @@ -251,7 +255,7 @@ This URI is pointing to a pre-defined list of assets created for this tutorial a Publishing files to IPFS is not within the scope of this tutorial, but if you want to know more, check out [This tutorial on how to create NFTs and publish metadata to IPFS using Pinata](https://github.com/menezesphill/eggnator). -## EGT Faucet +### EGT Faucet You also need to provide users a way to claim a few `EGT` tokens! The best way to do so is creating a FAUCET smart contract. Our faucet will have a `claimTokens()` method that users can call to get `50 EGT tokens` for free every 24-hours. Create a `Faucet.sol` contract with the following code: @@ -305,9 +309,9 @@ contract Faucet is Ownable { } ``` -## Migration script using Truffle +### Migration script using Truffle -If you followed the [Use Truffle to deploy a Smart Contract](https://github.com/XDC-Community/docs/blob/main/how-to/truffle.md) tutorial, you might need to adjust your migration script accordingly so all three smart contracts are correctly deployed to the blockchain. For Truffle, you'll need to create a `1_project_migration.js` file with the following code: +If you followed the [Use Truffle to deploy a Smart Contract](../../how-to/truffle.md) tutorial, you might need to adjust your migration script accordingly so all three smart contracts are correctly deployed to the blockchain. For Truffle, you'll need to create a `1_project_migration.js` file with the following code: ```jsx const EGT = artifacts.require("EggToken"); @@ -323,14 +327,11 @@ module.exports = function (deployer) { And your folder should look like this: -

- Truffle Workspace -

- +![Truffle Workspace](https://user-images.githubusercontent.com/78161484/193672515-d058ee10-70ee-4693-91f0-546592efe52a.png) -## Migration script using Hardhat +### Migration script using Hardhat -Conversely, if you followed the [Use Hardhat to deploy a Smart Contract](https://github.com/XDC-Community/docs/blob/main/how-to/contract-hardhat.md) tutorial, you need to adjust your `deploy.js` script to deploy all three contracts: +Conversely, if you followed the [Use Hardhat to deploy a Smart Contract](../../how-to/contract-hardhat.md) tutorial, you need to adjust your `deploy.js` script to deploy all three contracts: ```jsx async function main() { @@ -365,88 +366,76 @@ async function main() { And your folder should look like this: -

- Hardhat Workspace -

+![Hardhat Workspace](https://user-images.githubusercontent.com/78161484/193684235-f794ebff-40f1-463d-87fd-039b9a4fa6cb.png) -# 📀 Flattening Solidity files +## 📀 Flattening Solidity files To **Verify and Publish** your smart contracts inherited from `@openzeppelin/contracts`, you'll need to flatten your solidity smart contract into one file. In this section, you will learn how to use the [Solidity Visual Developer](https://marketplace.visualstudio.com/items?itemName=tintinweb.solidity-visual-auditor) plugin on **VSCode** to flatten your smart contracts. -### Step 01 +#### Step 01 - - On the left-sided panel, click on `Extensions` (or press `CTRL`+`SHIFT`+`X`); - - Seach for `Solidity`; - - Find `Solidity Visual Developer` and click in install. +* On the left-sided panel, click on `Extensions` (or press `CTRL`+`SHIFT`+`X`); +* Seach for `Solidity`; +* Find `Solidity Visual Developer` and click in install. -

- Solidity Flattening 01 -

+![Solidity Flattening 01](https://user-images.githubusercontent.com/78161484/193687692-ededd9b9-3466-496e-bc25-6e250533327d.png) -### Step 02 +#### Step 02 - - Go to `Explorer` on the left-side panel (or press `CTRL`+`SHIFT`+`E`); - - Select the `.sol` file you want to flatten; - - On the top of your visual code Editor window, you will see a list of new commands. Find `flatten` and click on it: - -

- Solidity Flattening 02 -

+* Go to `Explorer` on the left-side panel (or press `CTRL`+`SHIFT`+`E`); +* Select the `.sol` file you want to flatten; +* On the top of your visual code Editor window, you will see a list of new commands. Find `flatten` and click on it: -### Step 03 +![Solidity Flattening 02](https://user-images.githubusercontent.com/78161484/193695078-ee199266-0103-405d-bf58-a62ee666dd87.png) - - Once you click on `flatten`, a new editor window will open to the right; - - Press `CTRL`+`S` to Save As and name it `{name}-flat.sol` or whatever you feel is a good option to keep your folder organized; - - Repeat the process to any `.sol` file that uses `import @openzeppelin/contracts`; - -

- Solidity Flattening 03 -

+#### Step 03 + +* Once you click on `flatten`, a new editor window will open to the right; +* Press `CTRL`+`S` to Save As and name it `{name}-flat.sol` or whatever you feel is a good option to keep your folder organized; +* Repeat the process to any `.sol` file that uses `import @openzeppelin/contracts`; + +![Solidity Flattening 03](https://user-images.githubusercontent.com/78161484/193696014-c496f3b6-7d8d-4011-bc2e-2a93fbffcc2a.png) By the end of this process, your folder should look like this: -

- Solidity Flattening 04 -

+![Solidity Flattening 04](https://user-images.githubusercontent.com/78161484/193696481-44aad18b-0384-4895-91ec-3299751fb53f.png) -:rotating_light: **Remember to use the FLATTENED `.sol` files instead of the original file when verifying these contracts on the XDC Block Explorer.** +:rotating\_light: **Remember to use the FLATTENED `.sol` files instead of the original file when verifying these contracts on the XDC Block Explorer.** -# 🏗 Building a Front-End Application +## 🏗 Building a Front-End Application We prepared a project scaffold for the Egg Gacha. You can find the project folder [Here](https://github.com/menezesphill/egg-gacha-scaffold). Get started by cloning this dApp to your working directory: -```sh +``` git clone https://github.com/menezesphill/egg-gacha-scaffold.git cd egg-gacha-scaffold ``` Once you have cloned your dApp scaffold, you can install all the necessary dependencies. You can either use `yarn` or `npm`, but in this example we use `npm`: -```sh +``` npm install ``` When npm finishes installing your dependencies, you can run the `start` script to see if everything is working: -```sh +``` npm run start ``` You should see the following React App served at `http://localhost:3000/`: -

- Egg Gacha Front-end -

+![Egg Gacha Front-end](https://user-images.githubusercontent.com/78161484/193703640-1fcd5cf2-d8e1-47b2-88a6-803cb496f604.png) In this project folder, you will find a `contexts` folder with all methods necessary to connect to your `XDCPay` wallet. If you are not sure where this code is coming from or how to use it, please check the [XDCPay Integration Tutorial](https://github.com/menezesphill/docs/blob/main/how-to/XDCPay/Integration/how-to.md) before continuing. We are ready to move to the next steps if you see the page above! -## Creating Smart Contract Instances in React +### Creating Smart Contract Instances in React You will start by creating your smart contract instances in React. Create a `blockchain` folder locally, and a sub-folder called `contracts`: -```sh +``` mkdir -p ./src/blockchain/contracts ``` @@ -468,19 +457,17 @@ The only files you need to import from `Truffle` and `Hardhat` (whichever you de Move or copy these three `.json` files to our recently created `./src/blockchain/contracts` folder. Our working directory should now look like this: -

- Egg Gacha Folder 01 -

+![Egg Gacha Folder 01](https://user-images.githubusercontent.com/78161484/193709413-8a2f95ed-64cf-4bbf-b28e-0f2ad9246ccc.png) You'll need to install two new dependencies to your project, `web3-utils` and `web3-eth-contract`: -```sh +``` npm install web3-utils web3-eth-contract ``` -Create a generic contract handler in the `./src/blockchain/contracts` folder: +Create a generic contract handler in the `./src/blockchain/contracts` folder: -```sh +``` touch ./src/blockchain/contracts/Contract.ts ``` @@ -548,7 +535,7 @@ export default Contract; This way, you can your `EggToken`, `EggNFT` and `Faucet` contracts inherit from `Contract.ts`. You'll create three new files in the `./src/blockchain/contracts` folder: -```sh +``` touch ./src/blockchain/contracts/EggToken.ts touch ./src/blockchain/contracts/EggNFT.ts touch ./src/blockchain/contracts/Faucet.ts @@ -556,7 +543,7 @@ touch ./src/blockchain/contracts/Faucet.ts And each one of these files extends `Contract`: -### EggToken.ts +#### EggToken.ts ```jsx // EggToken.ts @@ -573,7 +560,7 @@ class EggToken extends Contract { export default EggToken; ``` -### EggNFT.ts +#### EggNFT.ts ```jsx // EggNFT.ts @@ -590,7 +577,7 @@ class EggNFT extends Contract { export default EggNFT; ``` -### Faucet.ts +#### Faucet.ts ```jsx // Faucet.ts @@ -609,21 +596,19 @@ export default Faucet; At this point, your project folder should look like this: -

- Egg Gacha Folder 02 -

+![Egg Gacha Folder 02](https://user-images.githubusercontent.com/78161484/193714901-0f6519b8-433a-46e4-aa98-df0678f2c8cb.png) -## Creating Smart Contract Constants File +### Creating Smart Contract Constants File -At this point, if you still haven't deployed the contracts, remember to check the scripts provided in [Migration script using Truffle](#migration-script-using-truffle) or [Migration script using Hardhat](#migration-script-using-hardhat). In this instance, we will show you how to deploy them using `Truffle`: +At this point, if you still haven't deployed the contracts, remember to check the scripts provided in [Migration script using Truffle](how-to-create-a-react-app-to-interact-with-xrc20-and-xrc721-tokens.md#migration-script-using-truffle) or [Migration script using Hardhat](how-to-create-a-react-app-to-interact-with-xrc20-and-xrc721-tokens.md#migration-script-using-hardhat). In this instance, we will show you how to deploy them using `Truffle`: -```sh +``` truffle migrate --network apothem ``` If migrations complete sucessfully, you can run `truffle networks` to get your contract addresses: -```sh +``` Network: apothem (id: 51) EggNFT: 0xDfe0F690Bb0F03b62D0350cc34B8195EdDa85134 EggToken: 0x8544C3568Fd88BC256eef824C5232fB12fAd2F69 @@ -635,7 +620,7 @@ Network: xinfin (id: 50) To keep your React dApp folder organized, you will create a `constants.ts` file with your deployment information: -```sh +``` touch ./src/blockchain/constants.ts ``` @@ -661,18 +646,17 @@ export const FaucetAddress = { }; ``` -## Creating Smart Contract Wrappers in React - +### Creating Smart Contract Wrappers in React The next step is to create Wrappers, where you'll define what kind of methods you want to access on the blockchain. You will create one for each contract: -```sh +``` touch ./src/blockchain/EggTokenWrapper.ts touch ./src/blockchain/EggNFTWrapper.ts touch ./src/blockchain/FaucetWrapper.ts ``` -### EggTokenWrapper.ts +#### EggTokenWrapper.ts You won't need to use all methods nor access all variables available in `EggToken.sol`, so you will only create the `balanceOf()`, `approve()`, and `allowance()` methods in your `EggTokenWrapper.ts` file: @@ -733,7 +717,7 @@ export default class EggTokenWrapper { } ``` -### EggNFTWrapper.ts +#### EggNFTWrapper.ts In `EggNFTWrapper.ts`, you will declare your `buyEgg()` method, which is probably the most important method, and a few other methods to help you display your collection in the front-end application like:`balanceOf()`, `tokenOfOwnerByIndex()`, and `tokenURI()`: @@ -800,7 +784,7 @@ export default class EggNFTWrapper { } ``` -### FaucetWrapper.ts +#### FaucetWrapper.ts Our `FaucetWrapper.ts` is the simpliest of the three contracts. You should only care about the `claimTokens()` method in your dApp: @@ -840,9 +824,9 @@ export default class Faucetrapper { } ``` -## Creating a Blockchain Context Provider in React +### Creating a Blockchain Context Provider in React -You are almost there! Next, you'll want to create a `Blockchain Context` so that you can access our blockchain methods throughout our React app. Right now, it might sound a bit exhausting to go through all these files, but trust us, in a real-world application, you will be glad you have created such a nice-looking and well-sectioned React project. +You are almost there! Next, you'll want to create a `Blockchain Context` so that you can access our blockchain methods throughout our React app. Right now, it might sound a bit exhausting to go through all these files, but trust us, in a real-world application, you will be glad you have created such a nice-looking and well-sectioned React project. If you feel like grabbing a coffee, go ahead, I'll be here waiting for you... @@ -850,7 +834,7 @@ If you feel like grabbing a coffee, go ahead, I'll be here waiting for you... ...and continuing, it is now time to create a `BlockchainProvider.tsx` into our `contexts` folder: -```sh +``` touch ./src/contexts/BlockchainProvider.tsx ``` @@ -937,7 +921,7 @@ export default BlockchainProvider; This way, whenever your `account` address, `chainId`, or `web3` provider changes, all contracts are updated accordingly throughout your React App, and you are also capable of tracking your EGGS NFTs images to show on the front-end. -## Integrating Blockchain Methods to DOM elements +### Integrating Blockchain Methods to DOM elements Now you'll need to update our `index.tsx` file in the `src` with your newly created provider. Your `index.tsx` should look like this: @@ -978,7 +962,7 @@ root.render( ); ``` -### Updating `app.tsx` elements +#### Updating `app.tsx` elements Next, move to your main App file at `./src/app.tsx` and make some changes: @@ -1233,66 +1217,66 @@ const App: React.FC = () => { export default App; ``` -🎉 Contrats! If you got this far, you have created your first fully functional decentralized app on XDC! +🎉 Contrats! If you got this far, you have created your first fully functional decentralized app on XDC! If you are not sure if your code is correct or if you feel you missed something, you can check the [Egg Gacha Scaffold Completed repo](https://github.com/menezesphill/egg-gacha-scaffold-completed) -# 💧 Setting up Faucet Contract +## 💧 Setting up Faucet Contract You are almost ready to run your dApp demo, but first you'll need to fund your `Faucet` contract with some `EGT tokens`: Move to your smart contract development environment. -### On Truffle +#### On Truffle You will begin by starting your development tool console: -```sh +``` truffle console --network apothem ``` Once the console opens, please instantiate your `EggToken` contract: -```sh +``` truffle(apothem)> let eggToken = await EggToken.deployed() // Should log: undefined ``` Next, instantiate your `Faucet` contract: -```sh +``` truffle(apothem)> let faucet = await Faucet.deployed() // Should log: undefined ``` You first need to approve `Faucet` to spend your EggTokens: -```sh +``` truffle(apothem)> let amount = web3.utils.toWei("40000", "ether") truffle(apothem)> eggToken.approve(faucet.address, amount) ``` It should log a Transaction Receipt (or a rejection in case it fails). If it failed, try again with a lower value, otherwise go ahead and use the `depositToken()` method: -```sh +``` truffle(apothem)> faucet.depositToken(amount) ``` It should log a Transaction Receipt (or a rejection in case it fails). If it failed, check if you hold the amount of tokens you are trying to deposit. -### On Hardhat +#### On Hardhat Using hardhat, you'll need to remember tour smart contract addresses. Fortunately, you can find the addresses in your dApp folder at `./src/blockchain/constants.ts`. You can begin by starting your development tool console: -```sh +``` npx hardhat console --network apothem ``` Once the console opens, attach your `EggToken` contract: -```sh +``` > const EggToken = await ethers.getContractFactory("EggToken"); // Should log: undefined > const eggTokenInstance = await EggToken.attach('0x8544C3568Fd88BC256eef824C5232fB12fAd2F69'); @@ -1301,7 +1285,7 @@ Once the console opens, attach your `EggToken` contract: Next, attach your `Faucet` contract: -```sh +``` > const Faucet = await ethers.getContractFactory("Faucet"); // Should log: undefined > const faucetInstance = await Faucet.attach('0x71e9774B1c70202f072326759B55c9c2a9C46E0b'); @@ -1310,24 +1294,24 @@ Next, attach your `Faucet` contract: You'll need to approve `Faucet` to spend tour EggTokens: -```sh +``` > let amount = ethers.utils.parseUnits("40000", 18) > await eggTokenInstance.approve(faucetInstance.address, amount) ``` Then, call the `depositToken()` -```sh +``` > await faucetInstance.depositToken(amount) ``` You are now ready for your first dApp demo! -# 🔥 DApp Demo +## 🔥 DApp Demo Head to our front-end folder and run: -```sh +``` npm run start ``` diff --git a/learn/how-to-articles/how-to-create-and-deploy-an-xrc20-token-using-foundry.md b/learn/how-to-articles/how-to-create-and-deploy-an-xrc20-token-using-foundry.md index 680f0a85..65e3b6d1 100644 --- a/learn/how-to-articles/how-to-create-and-deploy-an-xrc20-token-using-foundry.md +++ b/learn/how-to-articles/how-to-create-and-deploy-an-xrc20-token-using-foundry.md @@ -1,58 +1,63 @@ -# How to make a XRC-20 Royalty Token with Foundry. -This tutorial’s purpose is to create an XRC-20 token with foundry that will return a royalty amount (of that XRC-20 token) to the original creator of the contract. - -# 🧭 Table of contents +# How to Create and Deploy an XRC20 Token Using Foundry -- [How to make a XRC-20 Royalty Token with Foundry.](#how-to-make-a-xrc-20-royalty-token-with-foundry) -- [🧭 Table of contents](#-table-of-contents) -- [📰 Overview](#-overview) - - [What you will learn](#what-you-will-learn) - - [What you will do](#what-you-will-do) -- [The Tools We're Using](#the-tools-were-using) -- [Set up Foundry](#set-up-foundry) - - [Installing Foundry For MacOS / Linux:](#installing-foundry-for-macos--linux) - - [Installing Foundry For Windows:](#installing-foundry-for-windows) -- [environment SetUp](#environment-setup) -- [Smart Contract Development](#smart-contract-development) -- [Testing Our Smart Contract](#testing-our-smart-contract) - - [Create your test contract](#create-your-test-contract) -- [Deploying Our Smart Contract To The Blockchain](#deploying-our-smart-contract-to-the-blockchain) - - [Deploying Our Contract](#deploying-our-contract) -- [Veryfing Contracts on the Block Explorer](#veryfing-contracts-on-the-block-explorer) +## How to make a XRC-20 Royalty Token with Foundry. +This tutorial’s purpose is to create an XRC-20 token with foundry that will return a royalty amount (of that XRC-20 token) to the original creator of the contract. -# 📰 Overview +## 🧭 Table of contents + +* [How to make a XRC-20 Royalty Token with Foundry.](how-to-create-and-deploy-an-xrc20-token-using-foundry.md#how-to-make-a-xrc-20-royalty-token-with-foundry) +* [🧭 Table of contents](how-to-create-and-deploy-an-xrc20-token-using-foundry.md#-table-of-contents) +* [📰 Overview](how-to-create-and-deploy-an-xrc20-token-using-foundry.md#-overview) + * [What you will learn](how-to-create-and-deploy-an-xrc20-token-using-foundry.md#what-you-will-learn) + * [What you will do](how-to-create-and-deploy-an-xrc20-token-using-foundry.md#what-you-will-do) +* [The Tools We're Using](how-to-create-and-deploy-an-xrc20-token-using-foundry.md#the-tools-were-using) +* [Set up Foundry](how-to-create-and-deploy-an-xrc20-token-using-foundry.md#set-up-foundry) + * [Installing Foundry For MacOS / Linux:](how-to-create-and-deploy-an-xrc20-token-using-foundry.md#installing-foundry-for-macos--linux) + * [Installing Foundry For Windows:](how-to-create-and-deploy-an-xrc20-token-using-foundry.md#installing-foundry-for-windows) +* [environment SetUp](how-to-create-and-deploy-an-xrc20-token-using-foundry.md#environment-setup) +* [Smart Contract Development](how-to-create-and-deploy-an-xrc20-token-using-foundry.md#smart-contract-development) +* [Testing Our Smart Contract](how-to-create-and-deploy-an-xrc20-token-using-foundry.md#testing-our-smart-contract) + * [Create your test contract](how-to-create-and-deploy-an-xrc20-token-using-foundry.md#create-your-test-contract) +* [Deploying Our Smart Contract To The Blockchain](how-to-create-and-deploy-an-xrc20-token-using-foundry.md#deploying-our-smart-contract-to-the-blockchain) + * [Deploying Our Contract](how-to-create-and-deploy-an-xrc20-token-using-foundry.md#deploying-our-contract) +* [Veryfing Contracts on the Block Explorer](how-to-create-and-deploy-an-xrc20-token-using-foundry.md#veryfing-contracts-on-the-block-explorer) + +## 📰 Overview ![image](https://user-images.githubusercontent.com/114102465/203121145-7cc2a09d-4b2d-4606-90a7-8531c036afd4.png) - [Foundry](https://book.getfoundry.sh/) is a smart contract development toolchain. Foundry manages your dependencies, compiles your project, runs tests, deploys, and lets you interact with the chain from the command-line and via Solidity scripts. -### What you will learn +#### What you will learn + In this tutorial, you will learn how to set up Foundry and use it to build, test and deploy a XRC20 Royalty Token on both the XDC Network mainnet and XDC Apothem testnet. -### What you will do -- Install and setup Foundry -- Create an XRC20 Royalty token -- Compile the Contract -- Deploy the Contract -- Interact with the XRC20 Royalty token -- Check the deployment status on [XDC Mainnet](https://explorer.xinfin.network/) and [XDC Testnet](https://apothem.blocksscan.io/) - -# The Tools We're Using -- [Foundry](https://book.getfoundry.sh/) : a fast Solidity development toolkit that enables developers to write their tests in Solidity. -- [Solmate](https://github.com/Rari-Capital/solmate) : a library that contains gas-optimized contracts such as ERC20, ERC721, and more. -- [Visual Studio Code](https://code.visualstudio.com/) : a source-code editor made by Microsoft with the Electron Framework, for Windows, Linux and macOS. -- [XDC Testnet explorer](https://explorer.xinfin.network/) -- [Testnet XDC Faucet](https://faucet.apothem.network/) : a faucet that gives 1000 XDC for test. -- [XDCPay](https://chrome.google.com/webstore/detail/xdcpay/bocpokimicclpaiekenaeelehdjllofo) : is an extension for accessing XDC's XDPoS enabled distributed applications, or "Dapps" in your browser. - -# Set up Foundry +#### What you will do + +* Install and setup Foundry +* Create an XRC20 Royalty token +* Compile the Contract +* Deploy the Contract +* Interact with the XRC20 Royalty token +* Check the deployment status on [XDC Mainnet](https://explorer.xinfin.network/) and [XDC Testnet](https://apothem.blocksscan.io/) + +## The Tools We're Using + +* [Foundry](https://book.getfoundry.sh/) : a fast Solidity development toolkit that enables developers to write their tests in Solidity. +* [Solmate](https://github.com/Rari-Capital/solmate) : a library that contains gas-optimized contracts such as ERC20, ERC721, and more. +* [Visual Studio Code](https://code.visualstudio.com/) : a source-code editor made by Microsoft with the Electron Framework, for Windows, Linux and macOS. +* [XDC Testnet explorer](https://explorer.xinfin.network/) +* [Testnet XDC Faucet](https://faucet.apothem.network/) : a faucet that gives 1000 XDC for test. +* [XDCPay](https://chrome.google.com/webstore/detail/xdcpay/bocpokimicclpaiekenaeelehdjllofo) : is an extension for accessing XDC's XDPoS enabled distributed applications, or "Dapps" in your browser. + +## Set up Foundry + Before we can start writing some code, we need to set up our environment. We're going to be writing our contracts and testing them in Foundry. -### Installing Foundry For MacOS / Linux: +#### Installing Foundry For MacOS / Linux: Open-up terminal and type in the command: @@ -61,77 +66,95 @@ curl -L https://foundry.paradigm.xyz | bash ``` Afterward type: + ```bash foundryup ``` + Foundry should now be installed and ready to go! -### Installing Foundry For Windows: +#### Installing Foundry For Windows: If using Windows, you need to install Foundry from the source. First, install [Rust](https://rustup.rs/) with the [official documentation](https://book.getfoundry.sh/getting-started/installation). Then, open the command prompt and type in the command: + ```bash cargo install --git https://github.com/foundry-rs/foundry foundry-cli anvil --bins --locked ``` + To update from source, run the same command again. -# environment SetUp +## environment SetUp Now that we've installed Foundry, it's time to set up our folder where we will write our smart contract. From the same terminal window that you installed Foundry, type the following commands: 1. Make our folder where will we initialize our project. Then navigate into that folder with the following commands: + ```bash mkdir XRC20_Royalty && cd XRC20_Royalty ``` -2. Initialize our Foundry project within our XRC20_Royalty folder: + +1. Initialize our Foundry project within our XRC20\_Royalty folder: + ```bash forge init ``` -3. Install Solmate into our Foundry project: + +1. Install Solmate into our Foundry project: + ```bash forge install rari-capital/solmate ``` -4. Create a remappings.txt file for the Solmate library we just added: + +1. Create a remappings.txt file for the Solmate library we just added: + ```bash touch remappings.txt ``` -5. Open up your project in your IDE. For this tutorial, we’ll be using VSCode with this Solidity plugin: + +1. Open up your project in your IDE. For this tutorial, we’ll be using VSCode with this Solidity plugin: + ```bash code . ``` + Here’s what our IDE looks like. ![image](https://user-images.githubusercontent.com/114102465/203061766-76fbddb4-35c4-40d7-82fb-c985eed36e70.png) +1. Add these lines to remappings.txt so we can easily call the Solmate library in our contract: -6. Add these lines to remappings.txt so we can easily call the Solmate library in our contract: ```bash solmate/=lib/solmate/src/ forge-std=lib/forge-std/src/ ``` + Now that our environment and libraries are set up, we'll move into developing our smart contract! -# Smart Contract Development +## Smart Contract Development We will make a contract that passes tokens to the original contract creator whenever a token is transferred between wallets! 1. In your IDE, navigate to `src/Counter.sol` and rename the file to `RoyaltyToken.sol`. - 2. Import the Solmate ERC20 library in `RoyaltyToken.sol` and change the name of the contract. Under `pragma solidity ^0.8.14;`, add the following lines of code: + ```bash import { ERC20 } from "solmate/tokens/ERC20.sol"; contract RoyaltyToken is ERC20 {} ``` -3. Add in our state variables for the royalties. In the contract, add an address `royaltyAddress` variable and uint256 `royaltyFeePercentage` variable: + +1. Add in our state variables for the royalties. In the contract, add an address `royaltyAddress` variable and uint256 `royaltyFeePercentage` variable: + ```bash contract RoyaltyToken is ERC20 { address public royaltyAddress; uint256 public royaltyFeePercentage; } ``` -4. Make a constructor for the token. A constructor is what creates our token from the imported Solmate template. + +1. Make a constructor for the token. A constructor is what creates our token from the imported Solmate template. Add the following variables to the constructor: @@ -139,15 +162,12 @@ Add the following variables to the constructor: 2. `string memory _token` 3. `uint8 _decimals` 4. `uint256 _royaltyFeePercentage` -5. `uint256 _initialSupply` -Directly after we’ve added these variables and closed the `()`, add `ERC20(_name, _symbol, _decimals)`. +5. `uint256 _initialSupply` Directly after we’ve added these variables and closed the `()`, add `ERC20(_name, _symbol, _decimals)`. After that add brackets `{}` and inside the brackets set the following variables: -Set `royaltyAddress` variable as the wallet address of the creator of the contract: `royaltyAddress = msg.sender;` -The `RoyaltyFeePercentage` as the constructor variable: `royaltyFeePercentage = _royaltyFeePercentage;` -Mint the tokens to the creator of the contract and pass in the `_initialSupply` variable: `_mint(msg.sender, _initialSupply);` -Our constructor should now look like the following: +Set `royaltyAddress` variable as the wallet address of the creator of the contract: `royaltyAddress = msg.sender;` The `RoyaltyFeePercentage` as the constructor variable: `royaltyFeePercentage = _royaltyFeePercentage;` Mint the tokens to the creator of the contract and pass in the `_initialSupply` variable: `_mint(msg.sender, _initialSupply);` Our constructor should now look like the following: + ```bash contract RoyaltyToken is ERC20 { address public royaltyAddress; @@ -166,7 +186,9 @@ contract RoyaltyToken is ERC20 { } } ``` -5. Next, override the transfer function. + +1. Next, override the transfer function. + ```bash function transfer(address to, uint256 amount) public virtual returns (bool) { balanceOf[msg.sender] -= amount; @@ -181,7 +203,7 @@ function transfer(address to, uint256 amount) public virtual returns (bool) { return true; } -``` +``` Our contract now looks like this: @@ -221,16 +243,15 @@ contract RoyaltyToken is ERC20 { } } ``` + Add override after virtual in the function declaration: +`function transfer(address to, uint256 amount) public virtual override returns (bool) { ... }` Inside of the `transfer` function, create a uint256 called `royaltyAmount` and set it equal to the amount in the function parameters multiplied by the `royaltyFeePercentage` divided by `100`. This calculates the royalty amount that we will be sending to our `royaltyAddress`. -`function transfer(address to, uint256 amount) public virtual override returns (bool) { -... -} ` -Inside of the `transfer` function, create a uint256 called `royaltyAmount` and set it equal to the amount in the function parameters multiplied by the `royaltyFeePercentage` divided by `100`. This calculates the royalty amount that we will be sending to our `royaltyAddress`. ```bash uint256 royaltyAmount = amount * royaltyFeePercentage / 100; ``` + ```bash function transfer(address to, uint256 amount) public virtual returns (bool) { uint256 royaltyAmount = amount * royaltyFeePercentage / 100; @@ -247,6 +268,7 @@ function transfer(address to, uint256 amount) public virtual returns (bool) { return true; } ``` + In the `unchecked {}` for the `balanceOf[to]`, subtract the amount by the `royaltyAmount` and add an additional `balanceOf[royaltyAddress]` where we add the `royaltyAmount`: ```bash @@ -268,6 +290,7 @@ function transfer(address to, uint256 amount) public virtual returns (bool) { return true; } ``` + Add an additional emit Transfer where we send the royaltyAddress the royaltyAmount. Additionally, subtract the original emit Transfer amount by the royaltyAmount: ```bash @@ -293,7 +316,8 @@ function transfer(address to, uint256 amount) public virtual override returns (b return true; } ``` -6. Our contract is now finished! In total it should look like this: + +1. Our contract is now finished! In total it should look like this: ```bash // SPDX-License-Identifier: UNLICENSED @@ -349,21 +373,17 @@ contract RoyaltyToken is ERC20 { } ``` -# Testing Our Smart Contract +## Testing Our Smart Contract + Thanks to Foundry, we can test our new `RoyaltyToken.sol` contract in Solidity! Set up your test contract 1. In your IDE, head to `test/Counter.t.sol` and rename the file to `RoyaltyToken.t.sol`. - 2. Delete everything in the original body of `RoyaltyToken.t.sol`. - 3. Add our solidity version to the top: `pragma solidity ^0.8.14;`. - 4. Import the RoyaltyToken from `royaltyToken.sol`. Add `import {RoyaltyToken} from "src//RoyaltyToken.sol";` to the top of your contract. - 5. Import forge testing tools: `import "forge-std/Test.sol";`. - 6. Make a new contract called `RoyaltyTokenTest` and set it to a `Test`. Our contract should look like this. ```bash @@ -375,7 +395,9 @@ import "forge-std/Test.sol"; contract RoyaltyTokenTest is Test {} ``` -### Create your test contract + +#### Create your test contract + 1. Create your `RoyaltyToken`, `RoyaltyFeePercentage`, and `InitialSupply` arguments. For this test, we will be using `2%` for the fee and `10,000` initial tokens: ```bash @@ -391,7 +413,9 @@ contract RoyaltyTokenTest is Test { uint256 public initialSupply = 10 ** 4; } ``` -2. Create a `setUp()` function that constructs our `RoyaltyToken`. + +1. Create a `setUp()` function that constructs our `RoyaltyToken`. + ```bash pragma solidity ^0.8.14; @@ -410,7 +434,9 @@ contract RoyaltyTokenTest is Test { } ``` -3. Create a `testTransfer()` function that makes two dummy addresses and transfers funds between them. We will transfer 1,000 of the 10,000 tokens we created to an address. We're then going to check whether the address received 980 of those 1,000 tokens and whether our original contract address received the other 20. Afterward, we will initiate a transfer of 100 tokens between the newly created address and another wallet. We'll then check whether all 3 of the wallets have the correct amounts. + +1. Create a `testTransfer()` function that makes two dummy addresses and transfers funds between them. We will transfer 1,000 of the 10,000 tokens we created to an address. We're then going to check whether the address received 980 of those 1,000 tokens and whether our original contract address received the other 20. Afterward, we will initiate a transfer of 100 tokens between the newly created address and another wallet. We'll then check whether all 3 of the wallets have the correct amounts. + ```bash function testTransfer() public { address alice = address(1); @@ -429,7 +455,9 @@ function testTransfer() public { assertEq(token.balanceOf(address(this)), 9022); } ``` -4. Our entire contract should look like this: + +1. Our entire contract should look like this: + ```bash // SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.14; @@ -466,78 +494,74 @@ contract RoyaltyTokenTest is Test { } } ``` -5. Now, let’s compile our contract. Open up that terminal window we used earlier and type the command `forge build` . + +1. Now, let’s compile our contract. Open up that terminal window we used earlier and type the command `forge build` . + ```bash forge build ``` -`Compiling... -[⠰] Compiling 19 files with 0.8.14 -[⠒] Solc 0.8.14 finished in 2.00s -Compiler run successful` +`Compiling... [⠰] Compiling 19 files with 0.8.14 [⠒] Solc 0.8.14 finished in 2.00s Compiler run successful` Our smart contract is finished and is correctly compiling! Now let's test our smart contract to make sure it's actually doing what we want it to do. -6. Open up terminal and run `forge test`. This runs our tests and helps us understand whether or not they passed. +1. Open up terminal and run `forge test`. This runs our tests and helps us understand whether or not they passed. + ```bash forge test ``` -`Compiling... -No files changed, compilation skipped +\`Compiling... No files changed, compilation skipped -Running 1 test for test/RoyaltyToken.t.sol:RoyaltyTokenTest -[PASS] testTransfer() (gas: 78242) -Test result: ok. 1 passed; 0 failed; finished in 1.45ms` +Running 1 test for test/RoyaltyToken.t.sol:RoyaltyTokenTest \[PASS] testTransfer() (gas: 78242) Test result: ok. 1 passed; 0 failed; finished in 1.45ms\` If all goes well, you've just successfully made a smart contract in foundry, overrode the original transfer function, and ran some successful tests! Now, it's time to deploy the contract. -# Deploying Our Smart Contract To The Blockchain +## Deploying Our Smart Contract To The Blockchain + It's time for us to deploy our smart contract to the blockchain. 1. Open up terminal and run `cast wallet new` - Create a new random keypair. -```bash + +```bash cast wallet new ``` -`Successfully created new keypair. -Address: 0x80B75825D86a005453A08cD1a6Bd44C24d73A41d -Private Key: 0x4159ae5d34bb48367f9773c48de0e0effb2082681a69cd95f4e613246720af24` +`Successfully created new keypair. Address: 0x80B75825D86a005453A08cD1a6Bd44C24d73A41d Private Key: 0x4159ae5d34bb48367f9773c48de0e0effb2082681a69cd95f4e613246720af24` -2. Now Copy the address and go to XDC faucet for [test XDC](https://faucet.apothem.network/), And replace `0x` by xdc.Click on request 1000 XDC. +1. Now Copy the address and go to XDC faucet for [test XDC](https://faucet.apothem.network/), And replace `0x` by xdc.Click on request 1000 XDC. ![image](https://user-images.githubusercontent.com/114102465/203102902-22b85584-271c-4755-8fc1-975955cecd80.png) We've got everything we need to deploy our contract to the blockchain now. -### Deploying Our Contract +#### Deploying Our Contract + Head back to your terminal window to complete deployment. -1. Open up the terminal and type the following command, replacing [PASTE YOUR PRIVATE KEY HERE] +1. Open up the terminal and type the following command, replacing \[PASTE YOUR PRIVATE KEY HERE] + ```bash forge create --rpc-url https://erpc.apothem.network --private-key [PASTE YOUR PRIVATE KEY HERE] src/RoyaltyToken.sol:RoyaltyToken --constructor-args "RoyaltyToken" "ROYT" 18 2 10000000000000000000000 --legacy ``` -`Compiling... -No files changed, compilation skipped -Deployer: 0x80B75825D86a005453A08cD1a6Bd44C24d73A41d -Deployed to: 0x27f4D21150640df0856fF6CB5d57eB4447CC59AD -Transaction hash: 0x89f0edbf4755e93b8d25857e5a0fa0f7cae414cefac42e6ec9cb02930a932d41` - +`Compiling... No files changed, compilation skipped Deployer: 0x80B75825D86a005453A08cD1a6Bd44C24d73A41d Deployed to: 0x27f4D21150640df0856fF6CB5d57eB4447CC59AD Transaction hash: 0x89f0edbf4755e93b8d25857e5a0fa0f7cae414cefac42e6ec9cb02930a932d41` We can now see that our contract is deployed to the blockchain. If I copy the address in Deployed to, we can view the contract on [explorer](https://apothem.blocksscan.io/address/xdc27f4D21150640df0856fF6CB5d57eB4447CC59AD#transactions). ![image](https://user-images.githubusercontent.com/114102465/203111916-f92d40c2-20d6-4e20-ae21-1e547f5d5d94.png) -# Veryfing Contracts on the Block Explorer +## Veryfing Contracts on the Block Explorer + Once you have successfully deployed your smart contract to the blockchain, it might be interesting to verify you contract on [Apothem Block Explorer](https://apothem.blocksscan.io/address/xdc27f4D21150640df0856fF6CB5d57eB4447CC59AD#transactions). -1. Flatten our smart contract, Open up the terminal and type the following command + +1. Flatten our smart contract, Open up the terminal and type the following command + ```bash forge flatten --output src/Contract.flattened.sol src/RoyaltyToken.sol ``` -`Flattened file written at src/Contract.flattened.sol` -Now open the `Contract.flattened.sol` file and copy all source code, go to the [block explorer](https://apothem.blocksscan.io/address/xdc27f4D21150640df0856fF6CB5d57eB4447CC59AD#transactions) and click on Verify and Publish. -![image](https://user-images.githubusercontent.com/114102465/203114917-29ec08e6-3810-45ef-995a-771c52ea967c.png) + +`Flattened file written at src/Contract.flattened.sol` Now open the `Contract.flattened.sol` file and copy all source code, go to the [block explorer](https://apothem.blocksscan.io/address/xdc27f4D21150640df0856fF6CB5d57eB4447CC59AD#transactions) and click on Verify and Publish. ![image](https://user-images.githubusercontent.com/114102465/203114917-29ec08e6-3810-45ef-995a-771c52ea967c.png) ![image](https://user-images.githubusercontent.com/114102465/203115094-9e3dbfc4-5f85-41d7-8bd4-c6ef3705bf65.png) @@ -547,54 +571,8 @@ Now open the `Contract.flattened.sol` file and copy all source code, go to the [ If everything is correctly filled out, your contract page on the block explorer should display a new tab called Contract. ---- -For more information about XDC Network, Please Visit [XDC Network Documention](https://docs.xdc.org/).
-For more information about Foundry, Please Visit [Foundry Book](https://book.getfoundry.sh/).
-XDC Network [Disocrd](https://discord.gg/RBRx2HvbMr).
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +*** +For more information about XDC Network, Please Visit [XDC Network Documention](https://docs.xdc.org/).\ +For more information about Foundry, Please Visit [Foundry Book](https://book.getfoundry.sh/).\ +XDC Network [Disocrd](https://discord.gg/RBRx2HvbMr).\ diff --git a/learn/how-to-articles/how-to-create-and-deploy-an-xrc20-token-using-hardhat-and-typescript.md b/learn/how-to-articles/how-to-create-and-deploy-an-xrc20-token-using-hardhat-and-typescript.md index af6f44d8..59a238c6 100644 --- a/learn/how-to-articles/how-to-create-and-deploy-an-xrc20-token-using-hardhat-and-typescript.md +++ b/learn/how-to-articles/how-to-create-and-deploy-an-xrc20-token-using-hardhat-and-typescript.md @@ -1,7 +1,6 @@ --- id: xrc20-token-hardhat-typescript title: XRC20 using TypeScript and Hardhat -description: "Use TypeScript and Hardhat to deploy an XRC20 Token." keywords: - docs - apothem @@ -9,83 +8,82 @@ keywords: - XRC20 - hardhat - typescript +description: Use TypeScript and Hardhat to deploy an XRC20 Token. --- -# 🧭 Table of contents - -- [🧭 Table of contents](#-table-of-contents) -- [📰 Overview](#-overview) - - [What you will learn](#what-you-will-learn) - - [What you will do](#what-you-will-do) - - [📰 About XRC20 Tokens](#-about-xrc20-tokens) -- [⚒ Starting a new Hardhat Project](#-starting-a-new-hardhat-project) - - [⚒ Configuring XDC Mainnet and Apothem Testnet on Hardhat](#-configuring-xdc-mainnet-and-apothem-testnet-on-hardhat) - - [⚒ Adding Testnet XDC to Development Wallet](#-adding-testnet-xdc-to-development-wallet) -- [💵 Writing your first XRC20 Token](#-writing-our-first-xrc20-token) - - [💵 Constants](#-constants) - - [💵 Events](#-events) - - [💵 Methods](#-methods) - - [💵 Compiling and Deploying](#-compiling-and-deploying) -- [🔍 Veryfing Contracts on the Block Explorer](#-veryfing-contracts-on-the-block-explorer) - - [🔍 Interacting with your contract on the Block Explorer](#-interacting-with-your-contract-on-the-block-explorer) - -# 📰 Overview - -

- hardhat -

+# How to Create and Deploy an XRC20 Token Using Hardhat and TypeScript + +## 🧭 Table of contents + +* [🧭 Table of contents](how-to-create-and-deploy-an-xrc20-token-using-hardhat-and-typescript.md#-table-of-contents) +* [📰 Overview](how-to-create-and-deploy-an-xrc20-token-using-hardhat-and-typescript.md#-overview) + * [What you will learn](how-to-create-and-deploy-an-xrc20-token-using-hardhat-and-typescript.md#what-you-will-learn) + * [What you will do](how-to-create-and-deploy-an-xrc20-token-using-hardhat-and-typescript.md#what-you-will-do) + * [📰 About XRC20 Tokens](how-to-create-and-deploy-an-xrc20-token-using-hardhat-and-typescript.md#-about-xrc20-tokens) +* [⚒ Starting a new Hardhat Project](how-to-create-and-deploy-an-xrc20-token-using-hardhat-and-typescript.md#-starting-a-new-hardhat-project) + * [⚒ Configuring XDC Mainnet and Apothem Testnet on Hardhat](how-to-create-and-deploy-an-xrc20-token-using-hardhat-and-typescript.md#-configuring-xdc-mainnet-and-apothem-testnet-on-hardhat) + * [⚒ Adding Testnet XDC to Development Wallet](how-to-create-and-deploy-an-xrc20-token-using-hardhat-and-typescript.md#-adding-testnet-xdc-to-development-wallet) +* [💵 Writing your first XRC20 Token](how-to-create-and-deploy-an-xrc20-token-using-hardhat-and-typescript.md#-writing-our-first-xrc20-token) + * [💵 Constants](how-to-create-and-deploy-an-xrc20-token-using-hardhat-and-typescript.md#-constants) + * [💵 Events](how-to-create-and-deploy-an-xrc20-token-using-hardhat-and-typescript.md#-events) + * [💵 Methods](how-to-create-and-deploy-an-xrc20-token-using-hardhat-and-typescript.md#-methods) + * [💵 Compiling and Deploying](how-to-create-and-deploy-an-xrc20-token-using-hardhat-and-typescript.md#-compiling-and-deploying) +* [🔍 Veryfing Contracts on the Block Explorer](how-to-create-and-deploy-an-xrc20-token-using-hardhat-and-typescript.md#-veryfing-contracts-on-the-block-explorer) + * [🔍 Interacting with your contract on the Block Explorer](how-to-create-and-deploy-an-xrc20-token-using-hardhat-and-typescript.md#-interacting-with-your-contract-on-the-block-explorer) + +## 📰 Overview + +![hardhat](https://raw.githubusercontent.com/menezesphill/application\_utils/main/hardhaticon.png) [Hardhat](https://hardhat.org/) is a development environment to compile, deploy, test, and debug your Ethereum software. Get Solidity stack traces & console.log. [TypeScript](https://www.typescriptlang.org/) is a strongly typed programming language that builds on TypeScript. -### What you will learn +#### What you will learn In this tutorial, you will learn how to set up Hardhat and use it to build, test, and deploy a XRC20 token on both the XDC Network mainnet and XDC Apothem testnet. -### What you will do +#### What you will do -- Install and setup Hardhat -- Create an XRC20 token -- Compile the XRC20 token -- Deploy the XRC20 token -- Interact with the XRC20 token -- Check the deployment status on [xinfin.network](https://xinfin.network/#stats) +* Install and setup Hardhat +* Create an XRC20 token +* Compile the XRC20 token +* Deploy the XRC20 token +* Interact with the XRC20 token +* Check the deployment status on [xinfin.network](https://xinfin.network/#stats) -## 📰 About XRC20 Tokens +### 📰 About XRC20 Tokens XRC20 is a set of rules to standardize assets on the XinFin network. Every XRC20 token must be able to execute the following methods: -- `totalSupply()` -- `balanceOf(address account)` -- `allowance(address owner, address spender)` -- `transfer(address recipient, uint amount)` -- `approve(address spender, uint amount)` -- `transferFrom(address sender, address recipient, uint amount)` +* `totalSupply()` +* `balanceOf(address account)` +* `allowance(address owner, address spender)` +* `transfer(address recipient, uint amount)` +* `approve(address spender, uint amount)` +* `transferFrom(address sender, address recipient, uint amount)` These are the minimum required methods that allow an asset on the XDC Network to be called an XRC20 token. Also, a XRC20 token must be able to emit the following `Events` on the blockchain: -- `Approval(address indexed tokenOwner, address indexed spender, - uint tokens)` - - `Transfer(address indexed from, address indexed to, - uint tokens)` +* `Approval(address indexed tokenOwner, address indexed spender, uint tokens)` +* `Transfer(address indexed from, address indexed to, uint tokens)` Events come in handy in the exhaustive labor of indexing state changes, and they are essential for off-chain applications to find relevant data on the blockchain. By mapping all `Transfer` events, for example, we can fetch all the historic data on token transfers more easily. In addition, a few contract constants that are public that are also very important to have are: -- `name` -- `symbol` -- `decimals` +* `name` +* `symbol` +* `decimals` Without these public constants, it would be impossible to label tokens on block explorers, for example. In this tutorial, we will deploy a XRC20 token that have all the `Methods`, `Events`, and `Constants` mentioned above. -# ⚒ Starting a new Hardhat Project +## ⚒ Starting a new Hardhat Project There are a few technical requirements before we start. Please install the following: -- [Node.js v8+ LTS and npm](https://nodejs.org/en/) (comes with Node) -- [Git](https://git-scm.com/) +* [Node.js v8+ LTS and npm](https://nodejs.org/en/) (comes with Node) +* [Git](https://git-scm.com/) Next, set up your folder. As we are creating a project called `XRC20`, create a new `XRC20` folder by running the following on terminal: @@ -109,14 +107,11 @@ Ok to proceed? (y) The following message should log on your console: - -

- hardhat config -

+![hardhat config](https://user-images.githubusercontent.com/78161484/191259993-b817901f-7df9-4df1-bb1c-c4805c416974.png) Press `↓` and `ENTER` to get started with a new TypeScript Hardhat Project. You will then be presented with the following options: -```sh +``` ✔ Hardhat project root: · /Users/cr/XRC20 ✔ Do you want to add a .gitignore? (Y/n) · y ✔ Help us improve Hardhat with anonymous crash reports & basic usage data? (Y/n) · n @@ -126,17 +121,15 @@ Press `↓` and `ENTER` to get started with a new TypeScript Hardhat Project. Yo The standard Hardhat project comes with a pre-created `Lock.sol` contract and `deploy.ts` script. You should clean up your working environment before moving forward: -```sh +``` rm -f ./contracts/Lock.sol ./scripts/deploy.ts ./test/Lock.ts ``` Your folder files will look like this: -

- hardhat folder -

+![hardhat folder](https://user-images.githubusercontent.com/14329097/192099706-bcd0f3ad-2ad1-4a3a-880f-9dcc5bbe4a72.png) -## ⚒ Configuring XDC Mainnet and Apothem Testnet on Hardhat +### ⚒ Configuring XDC Mainnet and Apothem Testnet on Hardhat In order to get started deploying new contracts on XDC Mainnet and/or Apothem, we need to install a new dependency called `dotenv` that will be used in the `hardhat.config.ts` file: @@ -157,6 +150,7 @@ XINFIN_NETWORK_URL=https://erpc.xinfin.network APOTHEM_NETWORK_URL=https://erpc.apothem.network PRIVATE_KEY=202e3c9d30bbeca38d6578659919d4c3dc989ae18c16756690877fdc4dfa607f ``` + 🚨 **Do not use the Private Key in the example above in production or you can risk losing your assets!** 🚨 Finally, we can configure the `hardhat.config.ts` file for both Apothem and XinFin Networks by writting: @@ -185,16 +179,17 @@ const config: HardhatUserConfig = { export default config; ``` -## ⚒ Adding Testnet XDC to Development Wallet +### ⚒ Adding Testnet XDC to Development Wallet Now check your Signer's address on Hardhat by accessing the Hardhat console: -```sh +``` npx hardhat console --network xinfin ``` + If you get an error that hardhat is not installed locally and are running on a Windows OS, you will need to execute: -```sh +``` npm install --save-dev @nomicfoundation/hardhat-toolbox ``` @@ -213,21 +208,18 @@ This account is on the Ethereum standard format starting with `0x`, but you can With this account in hand, we can head to the [Apothem Faucet](https://faucet.apothem.network/) and claim some TXDC for development purposes: -

- Step 02 -

+![Step 02](https://user-images.githubusercontent.com/78161484/189952656-eb7793cc-7dee-4307-88fc-7c351a75cec7.png) -# 💵 Writing our first XRC20 Token +## 💵 Writing our first XRC20 Token -The source code for the XRC20 token used in this tutorial is available here: [XRC20 Contract Folder](./XRC20/contracts/XRC20.sol). But we will address all `Events`, `Methods`, and `Constants` mentioned in the section [📰 About XRC20 Tokens](#-about-xrc20-tokens). +The source code for the XRC20 token used in this tutorial is available here: [XRC20 Contract Folder](XRC20/contracts/XRC20.sol). But we will address all `Events`, `Methods`, and `Constants` mentioned in the section [📰 About XRC20 Tokens](how-to-create-and-deploy-an-xrc20-token-using-hardhat-and-typescript.md#-about-xrc20-tokens). Start by creating the `XRC20.sol` file: -```sh +``` touch ./contracts/XRC20.sol ``` - Write the shell of your smart contract as shown here: ```solidity @@ -244,7 +236,7 @@ contract XRC20Token { } ``` -## 💵 Constants +### 💵 Constants Inside `contract XRC20Token`, you will instantiate `name`, `symbol` and `decimals` as public variables, as well as a private `_totalSupply` that will be used on our `totalSupply()` method later on. You will also have two mapping variables, `balances` and `allowances`, which are key/value variables that maps user balances and approved spending allowances to other users: @@ -273,9 +265,9 @@ contract XRC20Token { } ``` -## 💵 Events +### 💵 Events -As mentioned in [📰 About XRC20 Tokens](#-about-xrc20-tokens), events are very important part of a smart contract logic. Events have `indexed` variables that are variables that can be filtered by off-chain interfaces. We might be tempted to index all the variables that are tied to an on-chain event, but Solidity has a _maximum of 3 indexed variable_ limitation for events. Here is how you'll write both `Approval` and `Transfer` events: +As mentioned in [📰 About XRC20 Tokens](how-to-create-and-deploy-an-xrc20-token-using-hardhat-and-typescript.md#-about-xrc20-tokens), events are very important part of a smart contract logic. Events have `indexed` variables that are variables that can be filtered by off-chain interfaces. We might be tempted to index all the variables that are tied to an on-chain event, but Solidity has a _maximum of 3 indexed variable_ limitation for events. Here is how you'll write both `Approval` and `Transfer` events: ```solidity // SPDX-License-Identifier: MIT @@ -308,9 +300,9 @@ contract XRC20Token { } ``` -## 💵 Methods +### 💵 Methods -You'll need to create the six methods mentioned in [📰 About XRC20 Tokens](#-about-xrc20-tokens) (`totalSupply`, `balanceOf`, `allowance`, `transfer`, `approve` and `transferFrom`) and a `constructor` that is a function used only once, when the contract is deployed, where we can attach information such as the token name, decimals and/or initial token supply: +You'll need to create the six methods mentioned in [📰 About XRC20 Tokens](how-to-create-and-deploy-an-xrc20-token-using-hardhat-and-typescript.md#-about-xrc20-tokens) (`totalSupply`, `balanceOf`, `allowance`, `transfer`, `approve` and `transferFrom`) and a `constructor` that is a function used only once, when the contract is deployed, where we can attach information such as the token name, decimals and/or initial token supply: ```solidity // SPDX-License-Identifier: MIT @@ -387,17 +379,17 @@ contract XRC20Token { Now, you have implemented everything necessary to make your token compliant with the XRC20 Standard. Of course, there are more features that you can implement to this contract, such as the [SafeMath](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/math/SafeMath.sol) library that replace naive mathematical operations for methods that will avoid `underflows` and `overflows`, and supply management methods such as `mint` and `burn`. -## 💵 Compiling and Deploying +### 💵 Compiling and Deploying Now you can compile your `XRC20.sol` by running: -```sh +``` npx hardhat compile ``` If everything is correctly configured and there are no errors, you will see the following message on your console: -```sh +``` Generating typings for: 1 artifacts in dir: typechain-types for target: ethers-v5 Successfully generated 6 typings! Compiled 1 Solidity file successfully @@ -405,13 +397,11 @@ Compiled 1 Solidity file successfully Your folder should look like this: -

- Folder 02 -

+![Folder 02](https://user-images.githubusercontent.com/14329097/192099710-95371105-2268-49bf-b0e6-121de01dc651.png) In order to deploy your newly-compiled contract artifacts to the blockchain, you'll need to create a deployment script into the script folder: -```sh +``` touch ./scripts/deploy.ts ``` @@ -440,80 +430,69 @@ main().catch((error) => { If the deployment script has no errors, you can go ahead and run the following command for deployment of the XDC Mainnet: -```sh +``` npx hardhat run scripts/deploy.ts --network xinfin ``` Or this command, for deployment of the XDC Apothem Testnet: -```sh +``` npx hardhat run scripts/deploy.ts --network apothem ``` + In either case, you must have enough funds to pay for gas fees on the address that is being used for development. If the deployment is sucessful, the console should log the following message after migrations complete processing: -```sh +``` Token Successfully Deployed! Token address: 0xbC5bA2B6e2f74EC1e8e5A310a42F65D185691Af2 ``` -# 🔍 Veryfing Contracts on the Block Explorer +## 🔍 Veryfing Contracts on the Block Explorer Once you have successfully deployed your smart contract to the blockchain, it might be interesting to verify you contract on [XinFin Block Explorer](https://explorer.xinfin.network/). Now grab the `XRC20.sol` address from the previous step. This address is in the Ethereum standard, but you can simply swap the `0x` prefix for `xdc`. After this prefix swap, search for our newly deployed contract on [XinFin Block Explorer](https://explorer.xinfin.network/): -

- Verify 01 -

+![Verify 01](https://user-images.githubusercontent.com/78161484/190875518-828c0061-71de-42c2-b222-0b8427852d01.png) Click on the `Verify And Publish` option. You will be redirected to the contract verification page where you'll need to fill out: -- Contract Name: XRC20Token -- Compiler: Check your `hardhat-config.ts` file for Compiler Version -- Contract Code: Just paste everything from your `XRC20.sol` file +* Contract Name: _XRC20Token_ +* Compiler: _Check your_ `hardhat-config.ts` _file for Compiler Version_ +* Contract Code: _Just paste everything from your_ `XRC20.sol` _file_ Once everything is filled out, press Submit! -

- Verify 02 -

+![Verify 02](https://user-images.githubusercontent.com/78161484/190875635-f6d3aa36-47b2-4b09-ad6a-fe6df3fb11f1.png) If everything is correctly filled out, your contract page on the block explorer should display a new tab called `Contract`: -

- Verify 03 -

+![Verify 03](https://user-images.githubusercontent.com/78161484/190875780-6223b4b0-fecc-4e79-83bc-c810c5b0351c.png) -## 🔍 Interacting with your contract on the Block Explorer +### 🔍 Interacting with your contract on the Block Explorer With your XDCPay wallet, it is possible to interact with verified Smart Contracts on the [XinFin Network Block Explorer](https://explorer.xinfin.network/). You can read from, write to, or simply read the information tied to your Smart Contract on the blockchain. Now head to the `Contract` tab on the explorer, choose `Write Contract`, and click in `Connect to Web3` to connect your XDCPay wallet. -

- Verify 04 -

+![Verify 04](https://user-images.githubusercontent.com/78161484/190876289-57de5994-809a-4307-b68d-6bb37e3601af.png) Try transfering `500 MTK` tokens that you have just created to a new wallet `xdc0431d52fe37f3839895018272dfa3ba189fce07e`. Fill out the `recipient` field with the new wallet address, and fill out the `amout` field with `500 * 10 ^ 18`. Remember that your token has 18 decimals. When you write numbers to the blockchain you must to account for the decimals as the virtual machine does not understand floating numbers the way humans do: -

- Verify 05 -

+![Verify 05](https://user-images.githubusercontent.com/78161484/190876402-32e800d4-b456-499d-8255-ba10aa35c0af.png) After clicking in `Write`, you'll need to confirm the transaction on the XDCPay wallet: -

- Verify 05 -

+![Verify 05](https://user-images.githubusercontent.com/78161484/190876653-eb8e558b-2b09-4c0f-ad5f-a3d17a54bf30.png) You can check your successful transaction on the [Block Explorer!](https://explorer.xinfin.network/txs/0xa365a7edea3af9ed22c6dffb2f24987f1941f21dbd4d9bbb13b11022439de96a#overview) ---- +*** -For more information about Hardhat, Please Visit [Hardhat Documentation](https://hardhat.org/tutorial).
-For more information about XinFin Network, Please Visit [XDC Network Documentation on GitBook](https://docs.xdc.org/).
-Resources used during the deployment of the XRC20 Token can be found at [XRC20 Contract Folder](./XRC20). +For more information about Hardhat, Please Visit [Hardhat Documentation](https://hardhat.org/tutorial).\ +For more information about XinFin Network, Please Visit [XDC Network Documentation on GitBook](https://docs.xdc.org/).\ +Resources used during the deployment of the XRC20 Token can be found at [XRC20 Contract Folder](XRC20/). diff --git a/learn/how-to-articles/how-to-create-and-deploy-an-xrc20-token-using-hardhat.md b/learn/how-to-articles/how-to-create-and-deploy-an-xrc20-token-using-hardhat.md index 62e43e11..e35a81c9 100644 --- a/learn/how-to-articles/how-to-create-and-deploy-an-xrc20-token-using-hardhat.md +++ b/learn/how-to-articles/how-to-create-and-deploy-an-xrc20-token-using-hardhat.md @@ -1,86 +1,86 @@ --- id: xrc20-token-hardhat title: XRC20 using Hardhat -description: "Use Hardhat to deploy an XRC20 Token." keywords: - docs - apothem - token - XRC20 - hardhat +description: Use Hardhat to deploy an XRC20 Token. --- -# 🧭 Table of contents - -- [🧭 Table of contents](#-table-of-contents) -- [📰 Overview](#-overview) - - [What you will learn](#what-you-will-learn) - - [What you will do](#what-you-will-do) - - [📰 About XRC20 Tokens](#-about-xrc20-tokens) -- [⚒ Starting a new Hardhat Project](#-starting-a-new-hardhat-project) - - [⚒ Configuring XDC Mainnet and Apothem Testnet on Hardhat](#-configuring-xdc-mainnet-and-apothem-testnet-on-hardhat) - - [⚒ Adding Testnet XDC to Development Wallet](#-adding-testnet-xdc-to-development-wallet) -- [💵 Writing your first XRC20 Token](#-writing-our-first-xrc20-token) - - [💵 Constants](#-constants) - - [💵 Events](#-events) - - [💵 Methods](#-methods) - - [💵 Compiling and Deploying](#-compiling-and-deploying) -- [🔍 Veryfing Contracts on the Block Explorer](#-veryfing-contracts-on-the-block-explorer) - - [🔍 Interacting with your contract on the Block Explorer](#-interacting-with-your-contract-on-the-block-explorer) - -# 📰 Overview - -

- hardhat -

+# How To Create and Deploy an XRC20 Token Using Hardhat + +## 🧭 Table of contents + +* [🧭 Table of contents](how-to-create-and-deploy-an-xrc20-token-using-hardhat.md#-table-of-contents) +* [📰 Overview](how-to-create-and-deploy-an-xrc20-token-using-hardhat.md#-overview) + * [What you will learn](how-to-create-and-deploy-an-xrc20-token-using-hardhat.md#what-you-will-learn) + * [What you will do](how-to-create-and-deploy-an-xrc20-token-using-hardhat.md#what-you-will-do) + * [📰 About XRC20 Tokens](how-to-create-and-deploy-an-xrc20-token-using-hardhat.md#-about-xrc20-tokens) +* [⚒ Starting a new Hardhat Project](how-to-create-and-deploy-an-xrc20-token-using-hardhat.md#-starting-a-new-hardhat-project) + * [⚒ Configuring XDC Mainnet and Apothem Testnet on Hardhat](how-to-create-and-deploy-an-xrc20-token-using-hardhat.md#-configuring-xdc-mainnet-and-apothem-testnet-on-hardhat) + * [⚒ Adding Testnet XDC to Development Wallet](how-to-create-and-deploy-an-xrc20-token-using-hardhat.md#-adding-testnet-xdc-to-development-wallet) +* [💵 Writing your first XRC20 Token](how-to-create-and-deploy-an-xrc20-token-using-hardhat.md#-writing-our-first-xrc20-token) + * [💵 Constants](how-to-create-and-deploy-an-xrc20-token-using-hardhat.md#-constants) + * [💵 Events](how-to-create-and-deploy-an-xrc20-token-using-hardhat.md#-events) + * [💵 Methods](how-to-create-and-deploy-an-xrc20-token-using-hardhat.md#-methods) + * [💵 Compiling and Deploying](how-to-create-and-deploy-an-xrc20-token-using-hardhat.md#-compiling-and-deploying) +* [🔍 Veryfing Contracts on the Block Explorer](how-to-create-and-deploy-an-xrc20-token-using-hardhat.md#-veryfing-contracts-on-the-block-explorer) + * [🔍 Interacting with your contract on the Block Explorer](how-to-create-and-deploy-an-xrc20-token-using-hardhat.md#-interacting-with-your-contract-on-the-block-explorer) + +## 📰 Overview + +![hardhat](https://raw.githubusercontent.com/menezesphill/application\_utils/main/hardhaticon.png) [Hardhat](https://hardhat.org/) is a development environment to compile, deploy, test, and debug your Ethereum software. Get Solidity stack traces & console.log. -### What you will learn +#### What you will learn + In this tutorial, you will learn how to set up Hardhat and use it to build, test, and deploy a XRC20 token on both the XDC Network mainnet and XDC Apothem testnet. -### What you will do -- Install and setup Hardhat -- Create an XRC20 token -- Compile the XRC20 token -- Deploy the XRC20 token -- Interact with the XRC20 token -- Check the deployment status on [xinfin.network](https://xinfin.network/#stats) +#### What you will do + +* Install and setup Hardhat +* Create an XRC20 token +* Compile the XRC20 token +* Deploy the XRC20 token +* Interact with the XRC20 token +* Check the deployment status on [xinfin.network](https://xinfin.network/#stats) -## 📰 About XRC20 Tokens +### 📰 About XRC20 Tokens XRC20 is a set of rules to standardize assets on the XDC network. Every XRC20 token must be able to execute the following methods: -- `totalSupply()` -- `balanceOf(address account)` -- `allowance(address owner, address spender)` -- `transfer(address recipient, uint amount)` -- `approve(address spender, uint amount)` -- `transferFrom(address sender, address recipient, uint amount)` +* `totalSupply()` +* `balanceOf(address account)` +* `allowance(address owner, address spender)` +* `transfer(address recipient, uint amount)` +* `approve(address spender, uint amount)` +* `transferFrom(address sender, address recipient, uint amount)` These are the minimum required methods that allow an asset on the XDC Network to be called an XRC20 token. Also, a XRC20 token must be able to emit the following `Events` on the blockchain: -- `Approval(address indexed tokenOwner, address indexed spender, - uint tokens)` - - `Transfer(address indexed from, address indexed to, - uint tokens)` - +* `Approval(address indexed tokenOwner, address indexed spender, uint tokens)` +* `Transfer(address indexed from, address indexed to, uint tokens)` + Events come in handy in the exhaustive process of indexing state changes, and they are essential to off-chain applications to find relevant data on the blockchain. By mapping all `Transfer` events, for example, we can fetch all the historic data on token transfers more easily. Several contract constants that are public that are also very important to have are: -- `name` -- `symbol` -- `decimals` +* `name` +* `symbol` +* `decimals` Without these public constants, it would be impossible to label tokens on block explorers, for example. In this tutorial, you will deploy a XRC20 token that have all the `Methods`, `Events` and `Constants` mentioned above. -# ⚒ Starting a new Hardhat Project +## ⚒ Starting a new Hardhat Project There are a few technical requirements before we start. Please install the following: -- [Node.js v8+ LTS and npm](https://nodejs.org/en/) (comes with Node) -- [Git](https://git-scm.com/) +* [Node.js v8+ LTS and npm](https://nodejs.org/en/) (comes with Node) +* [Git](https://git-scm.com/) You can start by setting up your folder. As we are creating a project called `XRC20`, you should create a new `XRC20` folder by running the following on terminal: @@ -104,14 +104,11 @@ Ok to proceed? (y) The following message should log on your console: - -

- hardhat config -

+![hardhat config](https://user-images.githubusercontent.com/78161484/191259993-b817901f-7df9-4df1-bb1c-c4805c416974.png) Press `ENTER` to get started with a new JavaScript Hardhat Project. Then you will be presented with the following options: -```sh +``` ? Hardhat project root: ‣ /home/taurinos/xdc_comm/docs/how-to/XRC20/Hardhat/XRC20 // Press ENTER or y @@ -124,17 +121,15 @@ Press `ENTER` to get started with a new JavaScript Hardhat Project. Then you wil The standard Hardhat project comes with a pre-created `Lock.sol` contract and `deploy.js` script. YOu should clean up your working environment before moving forward: -```sh +``` rm -rf ./contracts/Lock.sol ./scripts/deploy.js ./test/Lock.js ``` Your folder files will look like this: -

- hardhat folder -

+![hardhat folder](https://user-images.githubusercontent.com/78161484/191263408-af21bd08-98a8-440c-9270-7f9960bb531d.png) -## ⚒ Configuring XDC Mainnet and Apothem Testnet on Hardhat +### ⚒ Configuring XDC Mainnet and Apothem Testnet on Hardhat In order to get started deploying new contracts on XDC Mainnet and/or Apothem, you'll need to install a new dependency called `dotenv` that will be used in the `hardhat.config.js` file: @@ -155,6 +150,7 @@ XINFIN_NETWORK_URL=https://erpc.xinfin.network APOTHEM_NETWORK_URL=https://erpc.apothem.network PRIVATE_KEY=202e3c9d30bbeca38d6578659919d4c3dc989ae18c16756690877fdc4dfa607f ``` + 🚨 **Do not use the Private Key in the example above in production or you can risk losing your assets!** 🚨 Finally, you can configure the `hardhat.config.js` file for both Apothem and XDC Networks by writting: @@ -178,16 +174,17 @@ module.exports = { }; ``` -## ⚒ Adding Testnet XDC to Development Wallet +### ⚒ Adding Testnet XDC to Development Wallet Check your Signer's Address on Hardhat by accessing the Hardhat console: -```sh +``` npx hardhat console --network xinfin ``` + If you get an error that hardhat is not installed locally and are running on a Windows OS, you will need to execute: -```sh +``` npm install --save-dev @nomicfoundation/hardhat-toolbox ``` @@ -206,21 +203,18 @@ This account is on the Ethereum standard format starting with `0x`, but you can With this account in hand, we can head to the [Apothem Faucet](https://faucet.apothem.network/) and claim some TXDC for development purposes: -

- Step 02 -

+![Step 02](https://user-images.githubusercontent.com/78161484/189952656-eb7793cc-7dee-4307-88fc-7c351a75cec7.png) -# 💵 Writing our first XRC20 Token +## 💵 Writing our first XRC20 Token -The source code for the XRC20 token used in this tutorial is available here: [XRC20 Contract Folder](./../../how-to/XRC20/Hardhat/XRC20/contracts/XRC20.sol). But we will address all `Events`, `Methods` and `Constants` mentioned in the section [📰 About XRC20 Tokens](#-about-xrc20-tokens). +The source code for the XRC20 token used in this tutorial is available here: [XRC20 Contract Folder](../../how-to/XRC20/Hardhat/XRC20/contracts/XRC20.sol). But we will address all `Events`, `Methods` and `Constants` mentioned in the section [📰 About XRC20 Tokens](how-to-create-and-deploy-an-xrc20-token-using-hardhat.md#-about-xrc20-tokens). Start by creating the `XRC20.sol` file: -```sh +``` touch ./contracts/XRC20.sol ``` - Next, write the shell of our smart contract by writing: ```solidity @@ -237,7 +231,7 @@ contract XRC20Token { } ``` -## 💵 Constants +### 💵 Constants Inside our `contract XRC20Token`, you will instantiate `name`, `symbol` and `decimals` as public variables, a private `_totalSupply` that will be used on our `totalSupply()` method later on. You'll also instantiate two mapping variables, `balances` and `allowances`, that are key/value variables that maps user balances and approved spending allowances to other users: @@ -266,9 +260,9 @@ contract XRC20Token { } ``` -## 💵 Events +### 💵 Events -As mentioned in [📰 About XRC20 Tokens](#-about-xrc20-tokens). Events are very important part of a Smart Contract logic. Events have `indexed` variables that are variables that can be filtered by off-chain interfaces. You might be tempted to index all the variables that are tied to an on-chain event, but Solidity has a _maximum of 3 indexed variable_ limitation for events. You can write both `Approval` and `Transfer` events: +As mentioned in [📰 About XRC20 Tokens](how-to-create-and-deploy-an-xrc20-token-using-hardhat.md#-about-xrc20-tokens). Events are very important part of a Smart Contract logic. Events have `indexed` variables that are variables that can be filtered by off-chain interfaces. You might be tempted to index all the variables that are tied to an on-chain event, but Solidity has a _maximum of 3 indexed variable_ limitation for events. You can write both `Approval` and `Transfer` events: ```solidity // SPDX-License-Identifier: MIT @@ -301,9 +295,9 @@ contract XRC20Token { } ``` -## 💵 Methods +### 💵 Methods -You'll need to create the six methods mentioned in [📰 About XRC20 Tokens](#-about-xrc20-tokens) (`totalSupply`, `balanceOf`, `allowance`, `transfer`, `approve` and `transferFrom`) as well as a `constructor`. This is a function called only once when the contract is deployed, where you can attach information such as the token name, decimals and/or initial token supply: +You'll need to create the six methods mentioned in [📰 About XRC20 Tokens](how-to-create-and-deploy-an-xrc20-token-using-hardhat.md#-about-xrc20-tokens) (`totalSupply`, `balanceOf`, `allowance`, `transfer`, `approve` and `transferFrom`) as well as a `constructor`. This is a function called only once when the contract is deployed, where you can attach information such as the token name, decimals and/or initial token supply: ```solidity // SPDX-License-Identifier: MIT @@ -380,30 +374,28 @@ contract XRC20Token { Now you have implemented everything we needed to make our token compliant with the XRC20 Standard. Of course, there are more features we can implement to this contract, such as the [SafeMath](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/math/SafeMath.sol) library that replace naive mathematical operations for methods that will avoid `underflows` and `overflows`, and supply management methods such as `mint` and `burn`. -## 💵 Compiling and Deploying +### 💵 Compiling and Deploying You can now compile your `XRC20.sol` by running: -```sh +``` npx hardhat compile ``` If everything is correctly configured and there is no errors, you should see the following message on your console: -```sh +``` Downloading compiler 0.8.16 Compiled 1 Solidity files successfully ``` And your folder should look like this: -

- Folder 02 -

+![Folder 02](https://user-images.githubusercontent.com/78161484/191273560-8f666f6c-c7b9-4bad-8369-46337f6243b2.png) In order to deploy our newly compiled contract artifacts to the blockchain, you'll need to create a deployment script into the script folder: -```sh +``` touch ./scripts/deploy.js ``` @@ -431,81 +423,69 @@ main() If the deployment script have no errors, you can go ahead and run the command for deployment of the XDC Mainnet: -```sh +``` npx hardhat run scripts/deploy.js --network xinfin ``` Or this command for deployment on the XDC Apothem Testnet: -```sh +``` npx hardhat run scripts/deploy.js --network apothem ``` + In either case, you need to have enough funds to pay for gas fees on the address that is being used for development. If the deployment is sucessful, the console should log the following message after migrations complete processing: -```sh +``` Token Successfully Deployed! Token address: 0xbC5bA2B6e2f74EC1e8e5A310a42F65D185691Af2 ``` -# 🔍 Veryfing Contracts on the Block Explorer +## 🔍 Veryfing Contracts on the Block Explorer Once you have successfully deployed your smart contract to the blockchain, it might be interesting to verify you contract on [XinFin Block Explorer](https://explorer.xinfin.network/). Simply grab the `XRC20.sol` address from the previous step: this address is in the Ethereum standard but we can simply swap the `0x` prefix for `xdc` and search for our newly deployed contract on [XinFin Block Explorer](https://explorer.xinfin.network/): -

- Verify 01 -

+![Verify 01](https://user-images.githubusercontent.com/78161484/190875518-828c0061-71de-42c2-b222-0b8427852d01.png) Click on the `Verify And Publish` option. You will be redirected to the contract verification page where we need to fill out: -- Contract Name: XRC20Token -- Compiler: Check your `hardhat-config.js` file for Compiler Version -- Contract Code: Just paste everything from your `XRC20.sol` file +* Contract Name: _XRC20Token_ +* Compiler: _Check your_ `hardhat-config.js` _file for Compiler Version_ +* Contract Code: _Just paste everything from your_ `XRC20.sol` _file_ Once everything is filled out, press Submit! -

- Verify 02 -

+![Verify 02](https://user-images.githubusercontent.com/78161484/190875635-f6d3aa36-47b2-4b09-ad6a-fe6df3fb11f1.png) If everything is correctly filled out, your contract page on the block explorer should display a new tab called `Contract`: -

- Verify 03 -

+![Verify 03](https://user-images.githubusercontent.com/78161484/190875780-6223b4b0-fecc-4e79-83bc-c810c5b0351c.png) -## 🔍 Interacting with your contract on the Block Explorer +### 🔍 Interacting with your contract on the Block Explorer With your XDCPay wallet, it is possible to interact with verified Smart Contracts on the [XinFin Network Block Explorer](https://explorer.xinfin.network/). You can read from, write to, or simply read the information tied to your Smart Contract on the blockchain. Go to the `Contract` tab on the explorer, choose `Write Contract` and click in `Connect to Web3` to connect your XDCPay wallet. -

- Verify 04 -

+![Verify 04](https://user-images.githubusercontent.com/78161484/190876289-57de5994-809a-4307-b68d-6bb37e3601af.png) Next, try transfering `500 MTK` tokens that we have just created to a new wallet `xdc0431d52fe37f3839895018272dfa3ba189fce07e`. Fill out the `recipient` field with the new wallet address, and fill out the `amout` field with `500 * 10 ^ 18`. Remember that your token have 18 decimals, and we have to account for the decimals because the Virtual Machine does not understand floating numbers like we humans do: -

- Verify 05 -

+![Verify 05](https://user-images.githubusercontent.com/78161484/190876402-32e800d4-b456-499d-8255-ba10aa35c0af.png) After clicking in `Write`, you'll need to confirm the transaction on the XDCPay wallet: -

- Verify 05 -

+![Verify 05](https://user-images.githubusercontent.com/78161484/190876653-eb8e558b-2b09-4c0f-ad5f-a3d17a54bf30.png) You can check our successful transaction on the [Block Explorer!](https://explorer.xinfin.network/txs/0xa365a7edea3af9ed22c6dffb2f24987f1941f21dbd4d9bbb13b11022439de96a#overview) ---- - -For more information about Hardhat, Please Visit [Hardhat Documentation](https://hardhat.org/tutorial).
-For more information about XinFin Network, Please Visit [XDC Network Documentation on GitBook](https://docs.xdc.org/).
-Resources used during the deployment of the XRC20 Token can be found at [XRC20 Contract Folder](./XRC20). +*** +For more information about Hardhat, Please Visit [Hardhat Documentation](https://hardhat.org/tutorial).\ +For more information about XinFin Network, Please Visit [XDC Network Documentation on GitBook](https://docs.xdc.org/).\ +Resources used during the deployment of the XRC20 Token can be found at [XRC20 Contract Folder](XRC20/). diff --git a/learn/how-to-articles/how-to-create-and-deploy-an-xrc20-token-using-truffle.md b/learn/how-to-articles/how-to-create-and-deploy-an-xrc20-token-using-truffle.md index 24c23177..cb598a1f 100644 --- a/learn/how-to-articles/how-to-create-and-deploy-an-xrc20-token-using-truffle.md +++ b/learn/how-to-articles/how-to-create-and-deploy-an-xrc20-token-using-truffle.md @@ -1,82 +1,85 @@ --- id: xrc20-token-truffle title: XRC20 using Truffle -description: "Use Truffle to deploy an XRC20 Token." keywords: - docs - apothem - token - XRC20 - truffle +description: Use Truffle to deploy an XRC20 Token. --- -# 🧭 Table of contents - -- [🧭 Table of contents](#-table-of-contents) -- [📰 Overview](#-overview) - - [What you will learn](#what-you-will-learn) - - [What you will do](#what-you-will-do) - - [📰 About XRC20 Tokens](#-about-xrc20-tokens) -- [🚀 Setting up the development environment](#-setting-up-the-development-environment) - - [⚒ Starting a new Truffle Project](#-starting-a-new-truffle-project) - - [⚒ Configuring XDC Mainnet and Apothem Testnet on Truffle](#-configuring-xdc-mainnet-and-apothem-testnet-on-truffle) - - [⚒ Adding Testnet XDC to Development Wallet](#-adding-testnet-xdc-to-development-wallet) -- [💵 Writing your first XRC20 Token](#-writing-our-first-xrc20-token) - - [💵 Constants](#-constants) - - [💵 Events](#-events) - - [💵 Methods](#-methods) - - [💵 Compiling and Deploying](#-compiling-and-deploying) -- [🔍 Veryfing Contracts on the Block Explorer](#-veryfing-contracts-on-the-block-explorer) - - [🔍 Interacting with your contract on the Block Explorer](#-interacting-with-your-contract-on-the-block-explorer) - -# 📰 Overview +# How To Create and Deploy an XRC20 Token Using Truffle + +## 🧭 Table of contents + +* [🧭 Table of contents](how-to-create-and-deploy-an-xrc20-token-using-truffle.md#-table-of-contents) +* [📰 Overview](how-to-create-and-deploy-an-xrc20-token-using-truffle.md#-overview) + * [What you will learn](how-to-create-and-deploy-an-xrc20-token-using-truffle.md#what-you-will-learn) + * [What you will do](how-to-create-and-deploy-an-xrc20-token-using-truffle.md#what-you-will-do) + * [📰 About XRC20 Tokens](how-to-create-and-deploy-an-xrc20-token-using-truffle.md#-about-xrc20-tokens) +* [🚀 Setting up the development environment](how-to-create-and-deploy-an-xrc20-token-using-truffle.md#-setting-up-the-development-environment) + * [⚒ Starting a new Truffle Project](how-to-create-and-deploy-an-xrc20-token-using-truffle.md#-starting-a-new-truffle-project) + * [⚒ Configuring XDC Mainnet and Apothem Testnet on Truffle](how-to-create-and-deploy-an-xrc20-token-using-truffle.md#-configuring-xdc-mainnet-and-apothem-testnet-on-truffle) + * [⚒ Adding Testnet XDC to Development Wallet](how-to-create-and-deploy-an-xrc20-token-using-truffle.md#-adding-testnet-xdc-to-development-wallet) +* [💵 Writing your first XRC20 Token](how-to-create-and-deploy-an-xrc20-token-using-truffle.md#-writing-our-first-xrc20-token) + * [💵 Constants](how-to-create-and-deploy-an-xrc20-token-using-truffle.md#-constants) + * [💵 Events](how-to-create-and-deploy-an-xrc20-token-using-truffle.md#-events) + * [💵 Methods](how-to-create-and-deploy-an-xrc20-token-using-truffle.md#-methods) + * [💵 Compiling and Deploying](how-to-create-and-deploy-an-xrc20-token-using-truffle.md#-compiling-and-deploying) +* [🔍 Veryfing Contracts on the Block Explorer](how-to-create-and-deploy-an-xrc20-token-using-truffle.md#-veryfing-contracts-on-the-block-explorer) + * [🔍 Interacting with your contract on the Block Explorer](how-to-create-and-deploy-an-xrc20-token-using-truffle.md#-interacting-with-your-contract-on-the-block-explorer) + +## 📰 Overview + [Truffle](https://trufflesuite.com/) is a blockchain development environment that you can use to create and test smart contracts by levering an Ethereum Virtual Machine. -### What you will learn +#### What you will learn + In this tutorial, you will learn how to set up Truffle and use it to build, test, and deploy a XRC20 Token on both the XDC Network mainnet and XDC Apothem testnet. -### What you will do -- Install and setup Truffle -- Create an XRC20 token -- Compile the XRC20 token -- Deploy the XRC20 token -- Interact with the XRC20 token -- Check the deployment status on [xinfin.network](https://xinfin.network/#stats) +#### What you will do + +* Install and setup Truffle +* Create an XRC20 token +* Compile the XRC20 token +* Deploy the XRC20 token +* Interact with the XRC20 token +* Check the deployment status on [xinfin.network](https://xinfin.network/#stats) -## 📰 About XRC20 Tokens +### 📰 About XRC20 Tokens XRC20 is a set of rules to standardize assets on the XDC network. Every XRC20 token must be able to execute the following methods: -- `totalSupply()` -- `balanceOf(address account)` -- `allowance(address owner, address spender)` -- `transfer(address recipient, uint amount)` -- `approve(address spender, uint amount)` -- `transferFrom(address sender, address recipient, uint amount)` +* `totalSupply()` +* `balanceOf(address account)` +* `allowance(address owner, address spender)` +* `transfer(address recipient, uint amount)` +* `approve(address spender, uint amount)` +* `transferFrom(address sender, address recipient, uint amount)` These are the minimum required methods that allow an asset on the XDC Network to be called an XRC20 token. An XRC20 token must be able to emit the following `Events` on the blockchain: -- `Approval(address indexed tokenOwner, address indexed spender, - uint tokens)` - - `Transfer(address indexed from, address indexed to, - uint tokens)` - +* `Approval(address indexed tokenOwner, address indexed spender, uint tokens)` +* `Transfer(address indexed from, address indexed to, uint tokens)` + Events are help with the process of indexing state changes, and they are essential to allowing off-chain applications to find relevant data on the blockchain. By mapping all `Transfer` events, for example, we can fetch all the historic data on token transfers more easily. Several contract constants are public and very important to have: -- `name` -- `symbol` -- `decimals` +* `name` +* `symbol` +* `decimals` Without these public constants, it would be impossible to label tokens on block explorers, for example. In this tutorial, we will deploy a XRC20 token that have all the `Methods`, `Events` and `Constants` mentioned above. -# 🚀 Setting up the development environment +## 🚀 Setting up the development environment Here are several technical requirements before you get started. Please install the following: -- [Node.js v8+ LTS and npm](https://nodejs.org/en/) (comes with Node) -- [Git](https://git-scm.com/) +* [Node.js v8+ LTS and npm](https://nodejs.org/en/) (comes with Node) +* [Git](https://git-scm.com/) Once you have installed those, you only need one command to install Truffle: @@ -84,7 +87,7 @@ Once you have installed those, you only need one command to install Truffle: npm install -g truffle ``` -To verify that Truffle is installed properly, type **`truffle version`** on a terminal. You should see something like: +To verify that Truffle is installed properly, type **`truffle version`** on a terminal. You should see something like: ```bash Truffle v5.5.27 (core: 5.5.27) @@ -96,7 +99,7 @@ Web3.js v1.7.4 If you see an error instead, make sure that your npm modules are added to your path. -## ⚒ Starting a new Truffle Project +### ⚒ Starting a new Truffle Project Start by setting up our folder. As we are creating a project called `XRC20`, create a new `XRC20` folder by running on terminal: @@ -123,31 +126,29 @@ http://trufflesuite.com/docs Your folder files will look like this: -

- Step 01 -

- +![Step 01](https://user-images.githubusercontent.com/78161484/190839624-495ef863-e177-4c62-81ca-680e5e6a4cab.png) -## ⚒ Configuring XDC Mainnet and Apothem Testnet on Truffle +### ⚒ Configuring XDC Mainnet and Apothem Testnet on Truffle In order to get started deploying new contracts on the XDC Mainnet and/or Apothem, we need to install two new dependencies that will be used in the `truffle-config.js` file. These dependencies are `@truffle/hdwallet-provider` and `dotenv`. First choose your preferred package manager. In this example we are using `yarn` but you can also use `npm`. -If you never used `yarn` before, you will likely need to install it first.
‼️You can skip this step if you already have yarn installed‼️ +If you never used `yarn` before, you will likely need to install it first.\ +‼️You can skip this step if you already have yarn installed‼️ -```sh +``` npm install --global yarn ``` Initialize your package manager on your folder and install the required dependencies: -```sh +``` yarn init -y yarn add @truffle/hdwallet-provider dotenv ``` You will also need a **24-Word Mnemonic Phrase**. To configure your wallet, create a new `.env` file and write your mnemonic by running: -```sh +``` touch .env echo MNEMONIC=arm derive cupboard decade course garlic journey blast tribe describe curve obey >> .env ``` @@ -158,7 +159,6 @@ Remember to change the **24-Word Mnemonic** above for your own mnemonic. The con MNEMONIC=arm derive cupboard decade course garlic journey blast tribe describe curve obey ``` - 🚨 **Do not use the mnemonic in the example above in production or you can risk losing your assets and/or the ownership of your smart contracts!** 🚨 Finally, you can configure the `truffle-config.js` file for both Apothem and XinFin Networks by writting: @@ -202,17 +202,17 @@ module.exports = { }; ``` -## ⚒ Adding Testnet XDC to Development Wallet +### ⚒ Adding Testnet XDC to Development Wallet It is possible to list all XDC addresses bound to your mnemonic on truffle by accessing the truffle console: -```sh +``` truffle console --network xinfin ``` Once the truffle console CLI opens, you can run: -```sh +``` truffle(xinfin)> accounts ``` @@ -237,17 +237,15 @@ These accounts are on the Ethereum standard format starting with `0x`, but we ca With this account, you can head to the [Apothem Faucet](https://faucet.apothem.network/) and claim some TXDC for development purposes: -

- Step 02 -

+![Step 02](https://user-images.githubusercontent.com/78161484/189952656-eb7793cc-7dee-4307-88fc-7c351a75cec7.png) -# 💵 Writing our first XRC20 Token +## 💵 Writing our first XRC20 Token -The source code for the XRC20 Token used in this tutorial is available here: [XRC20 Contract Folder](./../../how-to/XRC20/Truffle/XRC20/contracts/MyToken.sol). But we will address all `Events`, `Methods` and `Constants` mentioned in the section [📰 About XRC20 Tokens](#-about-xrc20-tokens). +The source code for the XRC20 Token used in this tutorial is available here: [XRC20 Contract Folder](../../how-to/XRC20/Truffle/XRC20/contracts/MyToken.sol). But we will address all `Events`, `Methods` and `Constants` mentioned in the section [📰 About XRC20 Tokens](how-to-create-and-deploy-an-xrc20-token-using-truffle.md#-about-xrc20-tokens). You can start by creating the `XRC20.sol` file: -```sh +``` touch ./contracts/XRC20.sol ``` @@ -267,7 +265,7 @@ contract XRC20Token { } ``` -## 💵 Constants +### 💵 Constants Inside your `contract XRC20Token`, you will need to instantiate `name`, `symbol` and `decimals` as public variables as well as a private `_totalSupply` that will be used on our `totalSupply()` method later on. You'll also have two mapping variables, `balances` and `allowances`, that are key/value variables that maps user balances and approved spending allowances to other users: @@ -296,9 +294,9 @@ contract XRC20Token { } ``` -## 💵 Events +### 💵 Events -As mentioned in [📰 About XRC20 Tokens](#-about-xrc20-tokens), events are very important part of a smart contract logic. Events have `indexed` variables that are variables that can be filtered by off-chain interfaces. You might be tempted to index all the variables tied to an on-chain event, however Solidity has a _maximum of 3 indexed variable_ limitation for events. You should write both `Approval` and `Transfer` events: +As mentioned in [📰 About XRC20 Tokens](how-to-create-and-deploy-an-xrc20-token-using-truffle.md#-about-xrc20-tokens), events are very important part of a smart contract logic. Events have `indexed` variables that are variables that can be filtered by off-chain interfaces. You might be tempted to index all the variables tied to an on-chain event, however Solidity has a _maximum of 3 indexed variable_ limitation for events. You should write both `Approval` and `Transfer` events: ```solidity // SPDX-License-Identifier: MIT @@ -331,9 +329,9 @@ contract XRC20Token { } ``` -## 💵 Methods +### 💵 Methods -We need to create the six methods mentioned in [📰 About XRC20 Tokens](#-about-xrc20-tokens) (`totalSupply`, `balanceOf`, `allowance`, `transfer`, `approve` and `transferFrom`), as well as a `constructor` that is a function called only once when the contract is deployed. In the latter, we can attatch information such as the token name, decimals and/or initial token supply: +We need to create the six methods mentioned in [📰 About XRC20 Tokens](how-to-create-and-deploy-an-xrc20-token-using-truffle.md#-about-xrc20-tokens) (`totalSupply`, `balanceOf`, `allowance`, `transfer`, `approve` and `transferFrom`), as well as a `constructor` that is a function called only once when the contract is deployed. In the latter, we can attatch information such as the token name, decimals and/or initial token supply: ```solidity // SPDX-License-Identifier: MIT @@ -410,17 +408,17 @@ contract XRC20Token { Now you have implemented everything we needed to make our token compliant with the XRC20 standard. Of course there are more features we can implement to this contract, such as the [SafeMath](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/math/SafeMath.sol) library that replace naive mathematical operations for methods that will avoid `underflows` and `overflows`, and supply management methods such as `mint` and `burn`. -## 💵 Compiling and Deploying +### 💵 Compiling and Deploying We can compile our `MyToken.sol` by running: -```sh +``` truffle compile ``` If everything is correctly configured and there are no errors, you will see the following message on your console: -```sh +``` Compiling your contracts... =========================== > Compiling ./contracts/MyToken.sol @@ -431,13 +429,11 @@ Compiling your contracts... Your folder should look like this: -

- Step 03 -

+![Step 03](https://user-images.githubusercontent.com/78161484/190875030-27137576-84b6-45a1-be1d-f52f55d6488f.png) In order to deploy our newly compiled contract artifacts to the blockchain, you'll need to create a deployment script into the migrations folder: -```sh +``` touch ./migrations/1_token_migration.js ``` @@ -458,13 +454,13 @@ module.exports = function (deployer) { If the migration script have no errors, you can run the following command for deployment on the XDC mainnet: -```sh +``` truffle migrate --network xinfin ``` Or the following commard for deployment on the XDC Apothem Testnet: -```sh +``` truffle migrate --network apothem ``` @@ -472,7 +468,7 @@ In either case, you'll need to have enough funds to pay for gas fees on the addr If the deployment is sucessful, the console will log the following message after migrations complete processing: -```sh +``` 1_token_migration.js ==================== @@ -500,19 +496,19 @@ Summary > Final cost: 0.0002804765 ETH ``` -# 🔍 Veryfing Contracts on the Block Explorer +## 🔍 Veryfing Contracts on the Block Explorer Once you have successfully deployed your smart contract to the blockchain, it might be interesting to verify yout contract on [XinFin Block Explorer](https://explorer.xinfin.network/). You can check the address that your contract is deployed to by running: -```sh +``` truffle networks ``` If you have a contract deployed, the console should log something like this: -```sh +``` Network: apothem (id: 51) No contracts deployed. @@ -522,57 +518,44 @@ Network: xinfin (id: 50) In this example, we have a `XRC20Token` contract deployed on XDC Mainnet at the `0x53bA8Cb12EaF09E6B0b671F39ac4798A6DA7d660`. This address is in the Ethereum standard but we can simply swap the `0x` prefix for `xdc` and search for our newly deployed contract on [XinFin Block Explorer](https://explorer.xinfin.network/): -

- Verify 01 -

+![Verify 01](https://user-images.githubusercontent.com/78161484/190875518-828c0061-71de-42c2-b222-0b8427852d01.png) And click in the `Verify And Publish` Option. You will be redirected to the contract verification page where you have to fill out: -- Contract Name: XRC20Token -- Compiler: Check your `truffle-config.js` file for Compiler Version -- Contract Code: Just paste everything from your `MyToken.sol` file +* Contract Name: _XRC20Token_ +* Compiler: _Check your_ `truffle-config.js` _file for Compiler Version_ +* Contract Code: _Just paste everything from your_ `MyToken.sol` _file_ Once everything is filled out, press Submit! -

- Verify 02 -

+![Verify 02](https://user-images.githubusercontent.com/78161484/190875635-f6d3aa36-47b2-4b09-ad6a-fe6df3fb11f1.png) If everything is correctly filled out, your contract page on the block explorer will display a new tab called `Contract`: -

- Verify 03 -

+![Verify 03](https://user-images.githubusercontent.com/78161484/190875780-6223b4b0-fecc-4e79-83bc-c810c5b0351c.png) -## 🔍 Interacting with your contract on the Block Explorer +### 🔍 Interacting with your contract on the Block Explorer With your XDCPay wallet, it is possible to interact with verified smart sontracts on the [XinFin Network Block Explorer](https://explorer.xinfin.network/). You can read from, write to, or simply read the information tied to your smart contract on the blockchain. Lets head to the `Contract` tab on the explorer. Choose `Write Contract` and click in `Connect to Web3` to connect your XDCPay wallet. -

- Verify 04 -

+![Verify 04](https://user-images.githubusercontent.com/78161484/190876289-57de5994-809a-4307-b68d-6bb37e3601af.png) You can try transfering `500 MTK` tokens that we have just created to a new wallet `xdc0431d52fe37f3839895018272dfa3ba189fce07e`. Lets fill out the `recipient` field with the new wallet address, and fill out the `amout` field with `500 * 10^18`. Remember that our token has 18 decimals, and when you write numbers with decimals to the blockchain you must to account for the decimals as the virtual machine does not understand floating numbers like we humans do: -

- Verify 05 -

+![Verify 05](https://user-images.githubusercontent.com/78161484/190876402-32e800d4-b456-499d-8255-ba10aa35c0af.png) After clicking `Write`, you need to confirm the transaction on the XDCPay wallet: -

- Verify 05 -

+![Verify 05](https://user-images.githubusercontent.com/78161484/190876653-eb8e558b-2b09-4c0f-ad5f-a3d17a54bf30.png) You can check your successful transaction on the [Block Explorer!](https://explorer.xinfin.network/txs/0xa365a7edea3af9ed22c6dffb2f24987f1941f21dbd4d9bbb13b11022439de96a#overview) ---- - -For more information about Truffle Suite, Please Visit [Truffle Suite Documentation](https://trufflesuite.com/docs/truffle/).
-For more information about XinFin Network, Please Visit [XDC Network Documentation on GitBook](https://docs.xdc.org/).
-Resources used during the deployment of the XRC20 Token can be found at [XRC20 Contract Folder](./XRC20). +*** +For more information about Truffle Suite, Please Visit [Truffle Suite Documentation](https://trufflesuite.com/docs/truffle/).\ +For more information about XinFin Network, Please Visit [XDC Network Documentation on GitBook](https://docs.xdc.org/).\ +Resources used during the deployment of the XRC20 Token can be found at [XRC20 Contract Folder](XRC20/). diff --git a/learn/how-to-articles/how-to-create-and-deploy-an-xrc721-nft-using-hardhat.md b/learn/how-to-articles/how-to-create-and-deploy-an-xrc721-nft-using-hardhat.md index f0580304..ddf6bcdd 100644 --- a/learn/how-to-articles/how-to-create-and-deploy-an-xrc721-nft-using-hardhat.md +++ b/learn/how-to-articles/how-to-create-and-deploy-an-xrc721-nft-using-hardhat.md @@ -1,87 +1,89 @@ --- id: xrc721-token-hardhat title: XRC721 using Hardhat -description: "Use Hardhat to deploy an XRC721 Token." keywords: - docs - apothem - token - XRC721 - hardhat +description: Use Hardhat to deploy an XRC721 Token. --- -# 🧭 Table of contents - -- [🧭 Table of contents](#-table-of-contents) -- [📰 Overview](#-overview) - - [What you will learn](#what-you-will-learn) - - [What you will do](#what-you-will-do) - - [📰 About XRC721 Tokens](#-about-xrc721-tokens) -- [⚒ Starting a new Hardhat Project](#-starting-a-new-hardhat-project) - - [⚒ Configuring XDC Mainnet and Apothem Testnet on Hardhat](#-configuring-xdc-mainnet-and-apothem-testnet-on-hardhat) - - [⚒ Adding Testnet XDC to Development Wallet](#-adding-testnet-xdc-to-development-wallet) -- [💵 Writing your first XRC721 Token](#-writing-our-first-xrc721-token) - - [💵 Events](#-events) - - [💵 Methods](#-methods) - - [💵 XRC165](#-xrc165) - - [💵 Enabling minting](#-enabling-minting) - - [💵 Compiling and Deploying](#-compiling-and-deploying) -- [🔍 Veryfing Contracts on the Block Explorer](#-veryfing-contracts-on-the-block-explorer) - -# 📰 Overview - -

- hardhat -

+# How to Create and Deploy an XRC721 NFT Using Hardhat + +## 🧭 Table of contents + +* [🧭 Table of contents](how-to-create-and-deploy-an-xrc721-nft-using-hardhat.md#-table-of-contents) +* [📰 Overview](how-to-create-and-deploy-an-xrc721-nft-using-hardhat.md#-overview) + * [What you will learn](how-to-create-and-deploy-an-xrc721-nft-using-hardhat.md#what-you-will-learn) + * [What you will do](how-to-create-and-deploy-an-xrc721-nft-using-hardhat.md#what-you-will-do) + * [📰 About XRC721 Tokens](how-to-create-and-deploy-an-xrc721-nft-using-hardhat.md#-about-xrc721-tokens) +* [⚒ Starting a new Hardhat Project](how-to-create-and-deploy-an-xrc721-nft-using-hardhat.md#-starting-a-new-hardhat-project) + * [⚒ Configuring XDC Mainnet and Apothem Testnet on Hardhat](how-to-create-and-deploy-an-xrc721-nft-using-hardhat.md#-configuring-xdc-mainnet-and-apothem-testnet-on-hardhat) + * [⚒ Adding Testnet XDC to Development Wallet](how-to-create-and-deploy-an-xrc721-nft-using-hardhat.md#-adding-testnet-xdc-to-development-wallet) +* [💵 Writing your first XRC721 Token](how-to-create-and-deploy-an-xrc721-nft-using-hardhat.md#-writing-our-first-xrc721-token) + * [💵 Events](how-to-create-and-deploy-an-xrc721-nft-using-hardhat.md#-events) + * [💵 Methods](how-to-create-and-deploy-an-xrc721-nft-using-hardhat.md#-methods) + * [💵 XRC165](how-to-create-and-deploy-an-xrc721-nft-using-hardhat.md#-xrc165) + * [💵 Enabling minting](how-to-create-and-deploy-an-xrc721-nft-using-hardhat.md#-enabling-minting) + * [💵 Compiling and Deploying](how-to-create-and-deploy-an-xrc721-nft-using-hardhat.md#-compiling-and-deploying) +* [🔍 Veryfing Contracts on the Block Explorer](how-to-create-and-deploy-an-xrc721-nft-using-hardhat.md#-veryfing-contracts-on-the-block-explorer) + +## 📰 Overview + +![hardhat](https://raw.githubusercontent.com/menezesphill/application\_utils/main/hardhaticon.png) [Hardhat](https://hardhat.org/) is a development environment to compile, deploy, test, and debug your Ethereum software. Get Solidity stack traces & console.log. -### What you will learn +#### What you will learn + In this tutorial, you will learn how to set up Hardhat and use it to build, test, and deploy a XRC721 token on both the XDC Network mainnet and XDC Apothem testnet. -### What you will do -- Install and setup Hardhat -- Create an XRC721 token -- Compile the XRC721 token -- Deploy the XRC721 token -- Interact with the XRC721 token -- Check the deployment status on [xinfin.network](https://xinfin.network/#stats) +#### What you will do + +* Install and setup Hardhat +* Create an XRC721 token +* Compile the XRC721 token +* Deploy the XRC721 token +* Interact with the XRC721 token +* Check the deployment status on [xinfin.network](https://xinfin.network/#stats) -## 📰 About XRC721 Tokens +### 📰 About XRC721 Tokens XRC721 is an open standard that defines an interface for non-fungible tokens on XDC blockchain: -- `balanceOf(address _owner) external view returns (uint256)` -- `ownerOf(uint256 _tokenId) external view returns (address)` -- `safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes data) external payable` -- `safeTransferFrom(address _from, address _to, uint256 _tokenId) external payable` -- `transferFrom(address _from, address _to, uint256 _tokenId) external payable` -- `approve(address _approved, uint256 _tokenId) external payable` -- `setApprovalForAll(address _operator, bool _approved) external` -- `getApproved(uint256 _tokenId) external view returns (address)` -- `isApprovedForAll(address _owner, address _operator) external view returns (bool)` +* `balanceOf(address _owner) external view returns (uint256)` +* `ownerOf(uint256 _tokenId) external view returns (address)` +* `safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes data) external payable` +* `safeTransferFrom(address _from, address _to, uint256 _tokenId) external payable` +* `transferFrom(address _from, address _to, uint256 _tokenId) external payable` +* `approve(address _approved, uint256 _tokenId) external payable` +* `setApprovalForAll(address _operator, bool _approved) external` +* `getApproved(uint256 _tokenId) external view returns (address)` +* `isApprovedForAll(address _owner, address _operator) external view returns (bool)` These are the minimum required methods that allow an asset on the XDC network to be called an XRC721 token. Also, a XRC721 token must be able to emit the following `Events` on the blockchain: -- `Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId)` -- `Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId)` -- `ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved)` +* `Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId)` +* `Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId)` +* `ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved)` Events are helpers that come in handy in the exhaustive process of indexing state changes, and they are essential for off-chain applications to find relevant data on the blockchain. By mapping all `Transfer` events, for example, we can fetch all the historic data on token transfers more easily. -XRC721 also includes **optional** metadata parameters: +XRC721 also includes **optional** metadata parameters: -- `name` -- `symbol` +* `name` +* `symbol` This allows your smart contract to be interrogated for its name and for details about the assets that your NFTs represent. -# ⚒ Starting a new Hardhat Project +## ⚒ Starting a new Hardhat Project There are a few technical requirements before we start. Please install the following: -- [Node.js v8+ LTS and npm](https://nodejs.org/en/) (comes with Node) -- [Git](https://git-scm.com/) +* [Node.js v8+ LTS and npm](https://nodejs.org/en/) (comes with Node) +* [Git](https://git-scm.com/) Start by setting up tour folder. As we are creating a project called `XRC721`, create a new `XRC721` folder by running the following on terminal: @@ -105,14 +107,11 @@ Ok to proceed? (y) The following message should log on your console: - -

- hardhat config -

+![hardhat config](https://user-images.githubusercontent.com/78161484/191259993-b817901f-7df9-4df1-bb1c-c4805c416974.png) Press `ENTER` to get started with a new JavaScript Hardhat Project. Then you will be presented with the following options: -```sh +``` ? Hardhat project root: ‣ /home/taurinos/xdc_comm/docs/how-to/XRC721/Hardhat/XRC721 // Press ENTER or y @@ -125,17 +124,15 @@ Press `ENTER` to get started with a new JavaScript Hardhat Project. Then you wil The standard Hardhat project comes with a pre-created `Lock.sol` contract and `deploy.js` script. It's best to clean up your working environment before moving forward: -```sh +``` rm -rf ./contracts/Lock.sol ./scripts/deploy.js ./test/Lock.js ``` Your folder files will look like this: -

- hardhat folder -

+![hardhat folder](https://user-images.githubusercontent.com/78161484/191263408-af21bd08-98a8-440c-9270-7f9960bb531d.png) -## ⚒ Configuring XDC Mainnet and Apothem Testnet on Hardhat +### ⚒ Configuring XDC Mainnet and Apothem Testnet on Hardhat In order to get started deploying new contracts on XDC Mainnet and/or Apothem, you'll need to install a new dependency called `dotenv` that will be used in the `hardhat.config.js` file: @@ -156,6 +153,7 @@ XINFIN_NETWORK_URL=https://erpc.xinfin.network APOTHEM_NETWORK_URL=https://erpc.apothem.network PRIVATE_KEY=202e3c9d30bbeca38d6578659919d4c3dc989ae18c16756690877fdc4dfa607f ``` + 🚨 **Do not use the Private Key in the example above or you can risk losing your assets!** 🚨 Finally, you can configure the `hardhat.config.js` file for both Apothem and XinFin Networks by writing: @@ -179,16 +177,17 @@ module.exports = { }; ``` -## ⚒ Adding Testnet XDC to Development Wallet +### ⚒ Adding Testnet XDC to Development Wallet You should check your Signer's Address on Hardhat by accessing the Hardhat console: -```sh +``` npx hardhat console --network xinfin ``` + If you get an error that Hardhat is not installed locally, and you are using a Windows OS, you will need to execute: -```sh +``` npm install --save-dev @nomicfoundation/hardhat-toolbox ``` @@ -207,22 +206,21 @@ This account is on the Ethereum standard format starting with `0x`, but we can s With this account in hand, you can head to the [Apothem Faucet](https://faucet.apothem.network/) and claim some TXDC for development purposes: -

- Step 02 -

+![Step 02](https://user-images.githubusercontent.com/78161484/189952656-eb7793cc-7dee-4307-88fc-7c351a75cec7.png) -# 💵 Writing our first XRC721 Token +## 💵 Writing our first XRC721 Token -The source code for the XRC721 Token used in this tutorial is available here: [XRC721 Contract Folder](./XRC721/contracts/XRC721.sol). But we will address all `Events`, `Methods` and `Constants` mentioned in the section [📰 About XRC721 Tokens](#-about-xrc721-tokens). +The source code for the XRC721 Token used in this tutorial is available here: [XRC721 Contract Folder](XRC721/contracts/XRC721.sol). But we will address all `Events`, `Methods` and `Constants` mentioned in the section [📰 About XRC721 Tokens](how-to-create-and-deploy-an-xrc721-nft-using-hardhat.md#-about-xrc721-tokens). Start by creating the `XRC721.sol` file: -```sh +``` touch ./contracts/XRC721.sol ``` You will have to use OpenZeppelin contracts, so please make sure it is installed using the following command: -```sh + +``` npm install @openzeppelin/contracts ``` @@ -246,9 +244,9 @@ contract XRC721 is ERC721 { Thanks to OpenZeppelin, we don't have to implement all the code ourself. It's still a good excerize to go through the basic parts of XRC721 contract as explained below -## 💵 Events +### 💵 Events -As mentioned in [📰 About XRC721 Tokens](#-about-xrc721-tokens), events are an important part of a smart contract logic. Events have `indexed` variables that can be filtered by off-chain interfaces. We might be tempted to index all the variables that are tied to an on-chain event, however Solidity has a _maximum of 3 indexed variable_ limitation for events. XRC721 has three basic events: `Transfer`, `Approval` and `ApprovalForAll`. +As mentioned in [📰 About XRC721 Tokens](how-to-create-and-deploy-an-xrc721-nft-using-hardhat.md#-about-xrc721-tokens), events are an important part of a smart contract logic. Events have `indexed` variables that can be filtered by off-chain interfaces. We might be tempted to index all the variables that are tied to an on-chain event, however Solidity has a _maximum of 3 indexed variable_ limitation for events. XRC721 has three basic events: `Transfer`, `Approval` and `ApprovalForAll`. ```solidity interface XRC721 { @@ -269,9 +267,9 @@ interface XRC721 { } ``` -## 💵 Methods +### 💵 Methods -You must create the six methods mentioned in [📰 About XRC721 Tokens](#-about-xrc721-tokens) (`ownerOf`, `balanceOf`, `safeTransferFrom`, `transferFrom`, `approve`, `setApprovalForAll`, `isApprovedForAll` and `getApproved`) and a `constructor`. This function is only called once, when the contract is deployed, where it contains information such as the token name, decimals and/or initial token supply: +You must create the six methods mentioned in [📰 About XRC721 Tokens](how-to-create-and-deploy-an-xrc721-nft-using-hardhat.md#-about-xrc721-tokens) (`ownerOf`, `balanceOf`, `safeTransferFrom`, `transferFrom`, `approve`, `setApprovalForAll`, `isApprovedForAll` and `getApproved`) and a `constructor`. This function is only called once, when the contract is deployed, where it contains information such as the token name, decimals and/or initial token supply: ```solidity // SPDX-License-Identifier: MIT @@ -395,7 +393,7 @@ interface XRC721 { } ``` -## 💵 XRC165 +### 💵 XRC165 We didn't mention it before, but XRC721 also requires implimentation of a XRC165 standard. Thanks to OpenZeppelin we don't have to implement it, but it is really simple. There is only one method, `supportsInterface`, and it goes as follows: @@ -420,7 +418,7 @@ interface IXRC165 { } ``` -## 💵 Enabling minting +### 💵 Enabling minting Now that you have a XRC721 contract, how can you mint an NFT with it? With the `mintToken` method, that's how! Each time `mintToken` is called, it will create new unique token assign to `tokenOwner`. @@ -452,24 +450,24 @@ contract XRC721 is ERC721 { } ``` -## 💵 Compiling and Deploying +### 💵 Compiling and Deploying You can now compile your `XRC721.sol` by running: -```sh +``` npx hardhat compile ``` If everything is correctly configured and there are no errors, you should see the following message on your console: -```sh +``` Downloading compiler 0.8.16 Compiled 1 Solidity files successfully ``` In order to deploy our newly compiled contract artifacts to the blockchain, we need to create a deployment script into the script folder: -```sh +``` touch ./scripts/deploy.js ``` @@ -503,13 +501,13 @@ main() If the deployment script have no errors, you can run the following command for deployment on the XDC mainnet: -```sh +``` npx hardhat run scripts/deploy.js --network xinfin ``` Or this command, for deployment on the XDC Apothem Testnet: -```sh +``` npx hardhat run scripts/deploy.js --network apothem ``` @@ -517,48 +515,39 @@ In either case, you need to have enough funds to pay for gas fees on the address If the deployment is successful, the console will log the following message after migrations complete processing: -```sh +``` Token Successfully Deployed! Token address: 0xbC5bA2B6e2f74EC1e8e5A310a42F65D185691Af2 ``` Find out how your freshly minted NFT looks on [Apothem Block Explorer](https://explorer.apothem.network/) -![XRC721_0](https://user-images.githubusercontent.com/102393474/192279556-98d2fcb1-06aa-4b5b-8462-05a84489026b.png) -![xrc721_1](https://user-images.githubusercontent.com/102393474/192279202-f9204bec-48a8-4a0a-8d7f-cd2c93218a42.png) - +![XRC721\_0](https://user-images.githubusercontent.com/102393474/192279556-98d2fcb1-06aa-4b5b-8462-05a84489026b.png) ![xrc721\_1](https://user-images.githubusercontent.com/102393474/192279202-f9204bec-48a8-4a0a-8d7f-cd2c93218a42.png) -# 🔍 Veryfing Contracts on the Block Explorer +## 🔍 Veryfing Contracts on the Block Explorer Once you have successfully deployed your smart contract to the blockchain, it might be interesting to verify you contract on [XinFin Block Explorer](https://explorer.xinfin.network/). Simply grab the `XRC721.sol` address from the previous step: this address is in the Ethereum standard but we can simply swap the `0x` prefix for `xdc` and search for our newly deployed contract on [XinFin Block Explorer](https://explorer.xinfin.network/): -

- Verify 01 -

+![Verify 01](https://user-images.githubusercontent.com/78161484/190875518-828c0061-71de-42c2-b222-0b8427852d01.png) Click in the `Verify And Publish` Option. You will be redirected to the contract verification page where you will need to fill out: -- Contract Name: XRC721 -- Compiler: Check your `hardhat-config.js` file for Compiler Version -- Contract Code: Just paste everything from your `XRC721.sol` file +* Contract Name: _XRC721_ +* Compiler: _Check your_ `hardhat-config.js` _file for Compiler Version_ +* Contract Code: _Just paste everything from your_ `XRC721.sol` _file_ Once everything is filled out, press Submit! -

- Verify 02 -

+![Verify 02](https://user-images.githubusercontent.com/78161484/190875635-f6d3aa36-47b2-4b09-ad6a-fe6df3fb11f1.png) If everything is correctly filled out, your contract page on the block explorer will display a new tab called `Contract`: -

- Verify 03 -

- -For more information about Hardhat, Please Visit [Hardhat Documentation](https://hardhat.org/tutorial).
-For more information about the XDC Network, Please Visit [XDC Network Documentation on GitBook](https://docs.xdc.org/).
-Resources used during the deployment of the XRC721 Token can be found at [XRC721 Contract Folder](./XRC721). +![Verify 03](https://user-images.githubusercontent.com/78161484/190875780-6223b4b0-fecc-4e79-83bc-c810c5b0351c.png) +For more information about Hardhat, Please Visit [Hardhat Documentation](https://hardhat.org/tutorial).\ +For more information about the XDC Network, Please Visit [XDC Network Documentation on GitBook](https://docs.xdc.org/).\ +Resources used during the deployment of the XRC721 Token can be found at [XRC721 Contract Folder](XRC721/). diff --git a/learn/how-to-articles/how-to-deploy-your-first-smart-contract-on-the-xdc-network-using-truffle.md b/learn/how-to-articles/how-to-deploy-your-first-smart-contract-on-the-xdc-network-using-truffle.md index 301b6447..a9975f93 100644 --- a/learn/how-to-articles/how-to-deploy-your-first-smart-contract-on-the-xdc-network-using-truffle.md +++ b/learn/how-to-articles/how-to-deploy-your-first-smart-contract-on-the-xdc-network-using-truffle.md @@ -1,46 +1,51 @@ --- id: truffle-example title: Using Truffle Example -description: "Use Truffle to deploy a Smart Contract." keywords: - docs - apothem - smart - contract - truffle +description: Use Truffle to deploy a Smart Contract. --- -# 🧭 Table of contents - -- [🧭 Table of contents](#-table-of-contents) -- [📰 Overview](#-overview) -- [🚀 Setting up the development environment](#-setting-up-the-development-environment) - - [⚒️ Starting a new Truffle Project](#-starting-a-new-truffle-project) - - [⚒️ Configuring XDC Mainnet and Apothem Testnet on Truffle](#-configuring-xdc-mainnet-and-apothem-testnet-on-truffle) - - [⚒️ Adding Testnet XDC to Development Wallet](#-adding-testnet-xdc-to-development-wallet) -- [🍕 Writing your first Smart Contract](#-writing-our-first-smart-contract) - - [🍕 Compiling](#-compiling) - - [🍕 Deploying](#-deploying) - - [🍕 Interacting with your contract using Truffle Console](#-interacting-with-your-contract-using-truffle-console) -- [🔍 Veryfing Contracts on the Block Explorer](#-veryfing-contracts-on-the-block-explorer) - -# 📰 Overview +# How To deploy your first smart contract on the XDC Network using Truffle + +## 🧭 Table of contents + +* [🧭 Table of contents](how-to-deploy-your-first-smart-contract-on-the-xdc-network-using-truffle.md#-table-of-contents) +* [📰 Overview](how-to-deploy-your-first-smart-contract-on-the-xdc-network-using-truffle.md#-overview) +* [🚀 Setting up the development environment](how-to-deploy-your-first-smart-contract-on-the-xdc-network-using-truffle.md#-setting-up-the-development-environment) + * [⚒️ Starting a new Truffle Project](how-to-deploy-your-first-smart-contract-on-the-xdc-network-using-truffle.md#-starting-a-new-truffle-project) + * [⚒️ Configuring XDC Mainnet and Apothem Testnet on Truffle](how-to-deploy-your-first-smart-contract-on-the-xdc-network-using-truffle.md#-configuring-xdc-mainnet-and-apothem-testnet-on-truffle) + * [⚒️ Adding Testnet XDC to Development Wallet](how-to-deploy-your-first-smart-contract-on-the-xdc-network-using-truffle.md#-adding-testnet-xdc-to-development-wallet) +* [🍕 Writing your first Smart Contract](how-to-deploy-your-first-smart-contract-on-the-xdc-network-using-truffle.md#-writing-our-first-smart-contract) + * [🍕 Compiling](how-to-deploy-your-first-smart-contract-on-the-xdc-network-using-truffle.md#-compiling) + * [🍕 Deploying](how-to-deploy-your-first-smart-contract-on-the-xdc-network-using-truffle.md#-deploying) + * [🍕 Interacting with your contract using Truffle Console](how-to-deploy-your-first-smart-contract-on-the-xdc-network-using-truffle.md#-interacting-with-your-contract-using-truffle-console) +* [🔍 Veryfing Contracts on the Block Explorer](how-to-deploy-your-first-smart-contract-on-the-xdc-network-using-truffle.md#-veryfing-contracts-on-the-block-explorer) + +## 📰 Overview + [Truffle](https://trufflesuite.com/) is a blockchain development environment, which you can use to create and test smart contracts by leveraging an Ethereum Virtual Machine. -### What you will learn +#### What you will learn + This guide aims at teaching how to create a smart contract using Truffle and deploying it on the XDC Network. -### What you will do -- Install and set up Truffle -- Deploy a contract on the XDC Network -- Check the deployment status on [xinfin.network](https://xinfin.network/#stats). +#### What you will do + +* Install and set up Truffle +* Deploy a contract on the XDC Network +* Check the deployment status on [xinfin.network](https://xinfin.network/#stats). -# 🚀 Setting up the development environment +## 🚀 Setting up the development environment There are a few technical requirements before we start. Please install the following: -- [Node.js v8+ LTS and npm](https://nodejs.org/en/) (comes with Node) -- [Git](https://git-scm.com/) +* [Node.js v8+ LTS and npm](https://nodejs.org/en/) (comes with Node) +* [Git](https://git-scm.com/) Once you have installed those, you only need one command to install Truffle: @@ -48,7 +53,7 @@ Once you have installed those, you only need one command to install Truffle: npm install -g truffle ``` -To verify that Truffle is installed properly, type **`truffle version`** on a terminal. You should see something like: +To verify that Truffle is installed properly, type **`truffle version`** on a terminal. You should see something like: ```bash Truffle v5.5.27 (core: 5.5.27) @@ -60,7 +65,7 @@ Web3.js v1.7.4 If you see an error instead, make sure that your npm modules are added to your path. -## ⚒ Starting a new Truffle Project +### ⚒ Starting a new Truffle Project You can start by setting up your folder. In this example, we are creating a project called `Pizza`. Create your new `Pizza` folder by running the following on terminal: @@ -87,30 +92,28 @@ http://trufflesuite.com/docs Your folder files will look like this: -

- Step 01 -

+![Step 01](https://user-images.githubusercontent.com/78161484/189928139-f8448866-b691-486c-a300-2b7dd21f10c1.png) -## ⚒ Configuring XDC Mainnet and Apothem Testnet on Truffle +### ⚒ Configuring XDC Mainnet and Apothem Testnet on Truffle In order to get started deploying new contracts on the XDC Mainnet and/or Apothem, you will need to install two new dependencies that will be used in the `truffle-config.js` file. These dependencies are `@truffle/hdwallet-provider` and `dotenv`. First, choose your preferred package manager. In this example we are using `yarn` but you can also use `npm`. - If you never used `yarn` before, you might need to install it first. You can skip this step if you already have yarn installed. +If you never used `yarn` before, you might need to install it first. You can skip this step if you already have yarn installed. -```sh +``` npm install --global yarn ``` Initialize your package manager in your folder and install the required dependencies: -```sh +``` yarn init -y yarn add @truffle/hdwallet-provider dotenv ``` You will also need a **24-Word Mnemonic Phrase**. To configure your wallet, create a new `.env` file and write your mnemonic by running: -```sh +``` touch .env echo MNEMONIC=arm derive cupboard decade course garlic journey blast tribe describe curve obey >> .env ``` @@ -121,7 +124,6 @@ Remember to change the **24-Word Mnemonic** above for your own mnemonic. The con MNEMONIC=arm derive cupboard decade course garlic journey blast tribe describe curve obey ``` - 🚨 **Do not use the mnemonic in the example above in production or you can risk losing your assets and/or the ownership of your smart contracts!** 🚨 And finally, we can configure the `truffle-config.js` file for both Apothem and the XDC Network by writing: @@ -165,17 +167,17 @@ module.exports = { }; ``` -## ⚒ Adding Testnet XDC to Development Wallet +### ⚒ Adding Testnet XDC to Development Wallet It is possible to list all XDC addresses bound to your mnemonic on Truffle by accessing the Truffle console: -```sh +``` truffle console --network xinfin ``` Once the truffle console CLI opens, you can run: -```sh +``` truffle(xinfin)> accounts ``` @@ -200,21 +202,19 @@ These accounts are on the Ethereum standard format starting with `0x`, but we ca With this account, we can head to the [Apothem Faucet](https://faucet.apothem.network/) and claim some TXDC for development purposes: -

- Step 02 -

+![Step 02](https://user-images.githubusercontent.com/78161484/189952656-eb7793cc-7dee-4307-88fc-7c351a75cec7.png) -# 🍕 Writing our first Smart Contract +## 🍕 Writing our first Smart Contract Lets create a simple `Pizza.sol` contract on Solidity, the Pizza contract should have: - - a `constructor` where the deployer can define the pizza size, - - a `eatSlice` method to consume slices available, - - a `bakeNewPizza` method to refill all slices only if the previous pizza have been entirely eaten! 😋 +* a `constructor` where the deployer can define the pizza size, +* a `eatSlice` method to consume slices available, +* a `bakeNewPizza` method to refill all slices only if the previous pizza have been entirely eaten! 😋 You can start by creating the `Pizza.sol` file: -```sh +``` touch ./contracts/Pizza.sol ``` @@ -246,17 +246,17 @@ contract Pizza { } ``` -## 🍕 Compiling +### 🍕 Compiling Next, try compiling the `Pizza.sol` contract by running: -```sh +``` truffle compile ``` If everything is correctly configured and there are no errors, you will see the following message on your console: -```sh +``` Compiling your contracts... =========================== > Compiling ./contracts/Pizza.sol @@ -267,15 +267,13 @@ Compiling your contracts... And your folder should look like this: -

- Step 03 -

+![Step 03](https://user-images.githubusercontent.com/78161484/189987467-d1dc7cb8-623b-4e94-a4fa-f8732f46426d.png) -## 🍕 Deploying +### 🍕 Deploying In order to deploy our newly-compiled contract artifacts to the blockchain, we need to create a deployment script in the migrations folder. -```sh +``` touch ./migrations/1_pizza_migration.js ``` @@ -294,13 +292,13 @@ module.exports = function (deployer) { If the migration script has no errors, you can run the command: -```sh +``` truffle migrate --network xinfin ``` for deployment on XDC mainet. Or you can run: -```sh +``` truffle migrate --network apothem ``` @@ -308,7 +306,7 @@ for deployment on the XDC Apothem Testnet. In either case, you must have enough If the deployment is sucessful, the console should log the following message after migrations complete processing: -```sh +``` 1_pizza_migration.js ==================== @@ -336,13 +334,13 @@ Summary > Final cost: 0.0000880535 ETH ``` -## 🍕 Interacting with your contract using Truffle Console +### 🍕 Interacting with your contract using Truffle Console Another amazing tool that allow us to try out our contracts straight from our development environment is the `truffle console` CLI. To start interacting with you smart contracts you can run: -```sh +``` truffle console --network xinfin ``` @@ -368,7 +366,7 @@ truffle(xinfin)> instance.eatSlice() It should log a transaction confirmation (or rejection) object like this: -```sh +``` { tx: '0x0153f15932d79ad7ac0b26df299defa1b55aded33284928b3e441d9fea5c3de7', receipt: { @@ -392,19 +390,19 @@ It should log a transaction confirmation (or rejection) object like this: This transaction is immediately reflected in the corresponding block explorer, [as seen here!](https://explorer.xinfin.network/txs/0x0153f15932d79ad7ac0b26df299defa1b55aded33284928b3e441d9fea5c3de7) -# 🔍 Veryfing Contracts on the Block Explorer +## 🔍 Veryfing Contracts on the Block Explorer Once you have successfully deployed your smart contract to the blockchain, you may want to verify your contract on [XinFin Block Explorer](https://explorer.xinfin.network/). First lets check the address our contract is deployed to by running: -```sh +``` truffle networks ``` If you have a contract already deployed, the console should log something like this: -```sh +``` Network: apothem (id: 51) No contracts deployed. @@ -414,45 +412,30 @@ Network: xinfin (id: 50) If your `Pizza` contract is deployed on the XDC Mainnet at `0xF899E5C79ccfa144fc76261Ad9A9F0300708FF24`. You can search for our newly deployed contract on [XinFin Block Explorer](https://explorer.xinfin.network/): -

- Verify 01 -

+![Verify 01](https://user-images.githubusercontent.com/78161484/190028078-ebc0f083-28a5-4772-88c1-ef49e91681fa.png) -Click in the `Verify And Publish` option. +Click in the `Verify And Publish` option. You will be redirected to the contract verification page where we need to fill out: -- Contract Name: Pizza -- Compiler: Check your `truffle-config.js` file for Compiler Version -- Contract Code: Just paste everything from your `Pizza.sol` file +* Contract Name: _Pizza_ +* Compiler: _Check your_ `truffle-config.js` _file for Compiler Version_ +* Contract Code: _Just paste everything from your_ `Pizza.sol` _file_ Once everything is filled out, press Submit! -

- Verify 02 -

+![Verify 02](https://user-images.githubusercontent.com/78161484/190028508-003c942d-685a-4d14-9d93-264e7ff4a0b5.png) If everything is correctly filled out, your contract page on the block explorer should display a new tab called `Contract`: -

- Verify 03 -

+![Verify 03](https://user-images.githubusercontent.com/78161484/190029029-2547af3f-d32c-48d6-a785-e47b1f7a91c5.png) On this page you can read from, write to, or simply read the information tied to your smart contract on the blockchain: -

- Verify 03 -

- - ---- - -For more information about Truffle Suite, Please Visit [Truffle Suite Documentation](https://trufflesuite.com/docs/truffle/).
-For more information about XinFin Network, Please Visit [XDC Network Documentation on GitBook](https://docs.xdc.org/).
-Resources used during the deployment of the Pizza smart contract can be found at [The Pizza Contract Folder](./Pizza). - - - - +![Verify 03](https://user-images.githubusercontent.com/78161484/190030842-4ab30b85-f87b-43d1-a8b2-8d089abb1a34.png) +*** +For more information about Truffle Suite, Please Visit [Truffle Suite Documentation](https://trufflesuite.com/docs/truffle/).\ +For more information about XinFin Network, Please Visit [XDC Network Documentation on GitBook](https://docs.xdc.org/).\ +Resources used during the deployment of the Pizza smart contract can be found at [The Pizza Contract Folder](Pizza/). diff --git a/learn/how-to-articles/how-to-migrate-a-dapp-from-ethereum-to-the-xdc-network-using-truffle.md b/learn/how-to-articles/how-to-migrate-a-dapp-from-ethereum-to-the-xdc-network-using-truffle.md index 5d4ce87d..a585b34a 100644 --- a/learn/how-to-articles/how-to-migrate-a-dapp-from-ethereum-to-the-xdc-network-using-truffle.md +++ b/learn/how-to-articles/how-to-migrate-a-dapp-from-ethereum-to-the-xdc-network-using-truffle.md @@ -1,44 +1,45 @@ -# 🧭 Table of contents - -- [🧭 Table of contents](#-table-of-contents) -- [📰 Overview](#-overview) - - [What you will learn](#what-you-will-learn) - - [What you will do](#what-you-will-do) -- [🚀 Setting up the development environment](#-setting-up-the-development-environment) - - [⚒ Starting a new Truffle Project](#-starting-a-new-truffle-project) -- [📝 Writing your first Smart Contract](#-writing-our-first-smart-contract) - - [🍕 Compiling](#-compiling) - - [Creating a .env file](#creating-a-env-file) - - [🔀 Migrating from Ethereum to XDC network](#-migrating-from-ethereum-to-xdc-network) - - [🍕 Deploying](#-deploying) - - [🍕 Interacting with your contract using Truffle Console](#-interacting-with-your-contract-using-truffle-console) -- [🔍 Veryfing Contracts on the Block Explorer](#-veryfing-contracts-on-the-block-explorer) - - -# 📰 Overview +# How to Migrate a dApp from Ethereum to the XDC Network Using Truffle + +## 🧭 Table of contents + +* [🧭 Table of contents](how-to-migrate-a-dapp-from-ethereum-to-the-xdc-network-using-truffle.md#-table-of-contents) +* [📰 Overview](how-to-migrate-a-dapp-from-ethereum-to-the-xdc-network-using-truffle.md#-overview) + * [What you will learn](how-to-migrate-a-dapp-from-ethereum-to-the-xdc-network-using-truffle.md#what-you-will-learn) + * [What you will do](how-to-migrate-a-dapp-from-ethereum-to-the-xdc-network-using-truffle.md#what-you-will-do) +* [🚀 Setting up the development environment](how-to-migrate-a-dapp-from-ethereum-to-the-xdc-network-using-truffle.md#-setting-up-the-development-environment) + * [⚒ Starting a new Truffle Project](how-to-migrate-a-dapp-from-ethereum-to-the-xdc-network-using-truffle.md#-starting-a-new-truffle-project) +* [📝 Writing your first Smart Contract](how-to-migrate-a-dapp-from-ethereum-to-the-xdc-network-using-truffle.md#-writing-our-first-smart-contract) + * [🍕 Compiling](how-to-migrate-a-dapp-from-ethereum-to-the-xdc-network-using-truffle.md#-compiling) + * [Creating a .env file](how-to-migrate-a-dapp-from-ethereum-to-the-xdc-network-using-truffle.md#creating-a-env-file) + * [🔀 Migrating from Ethereum to XDC network](how-to-migrate-a-dapp-from-ethereum-to-the-xdc-network-using-truffle.md#-migrating-from-ethereum-to-xdc-network) + * [🍕 Deploying](how-to-migrate-a-dapp-from-ethereum-to-the-xdc-network-using-truffle.md#-deploying) + * [🍕 Interacting with your contract using Truffle Console](how-to-migrate-a-dapp-from-ethereum-to-the-xdc-network-using-truffle.md#-interacting-with-your-contract-using-truffle-console) +* [🔍 Veryfing Contracts on the Block Explorer](how-to-migrate-a-dapp-from-ethereum-to-the-xdc-network-using-truffle.md#-veryfing-contracts-on-the-block-explorer) + +## 📰 Overview [Truffle](https://trufflesuite.com/) is a blockchain development environment, which you can use to create and test smart contracts by leveraging an Ethereum Virtual Machine. dApps use truffle and hardhat to work with decentralized networks like Ethereum and XDC. -### What you will learn +#### What you will learn This guide aims at teaching on how to migrate a dApp from ethereum to the XDC network using truffle. -### What you will do +#### What you will do -- Install and set up Truffle -- Create a Truffle project -- Write a smart contract -- Compile and migrate the smart contract from the Ethereum Network to the XDC Network -- Check the deployment status on [xinfin.network](https://xinfin.network/#stats). +* Install and set up Truffle +* Create a Truffle project +* Write a smart contract +* Compile and migrate the smart contract from the Ethereum Network to the XDC Network +* Check the deployment status on [xinfin.network](https://xinfin.network/#stats). -# 🚀 Setting up the development environment +## 🚀 Setting up the development environment There are a few technical requirements before you start. Please install the following: -- [Node.js v8+ LTS and npm](https://nodejs.org/en/) (comes with Node) -- [Git](https://git-scm.com/) +* [Node.js v8+ LTS and npm](https://nodejs.org/en/) (comes with Node) +* [Git](https://git-scm.com/) Once you have those installed, you only need one command to install Truffle: @@ -46,7 +47,7 @@ Once you have those installed, you only need one command to install Truffle: npm install -g truffle ``` -To verify that Truffle is installed properly, type **`truffle version`** on a terminal. You should see something like: +To verify that Truffle is installed properly, type **`truffle version`** on a terminal. You should see something like: ```bash Truffle v5.5.27 (core: 5.5.27) @@ -58,7 +59,7 @@ Web3.js v1.7.4 If you see an error instead, make sure that your npm modules are added to your path. -## ⚒ Starting a new Truffle Project +### ⚒ Starting a new Truffle Project Start by setting up your folder. As we are creating a project called `Pizza`, create a new `Pizza` folder by running this on terminal: @@ -85,18 +86,15 @@ http://trufflesuite.com/docs And your folder files will look like this: -

- Screenshot 2022-09-29 at 1 01 13 PM +![Screenshot 2022-09-29 at 1 01 13 PM](https://user-images.githubusercontent.com/35517007/192987763-26cd7979-0e21-4804-b3c3-75ba66a8e1b0.png) -

- -# 📝 Writing our first Smart Contract +## 📝 Writing our first Smart Contract Lets create a simple `Pizza.sol` in the `contracts folder`. The Pizza contract should have: -- a `constructor` where the deployer can define the pizza size, -- a `eatSlice` method to consume slices available, -- a `bakeNewPizza` method to refill all slices only if the previous pizza have been entirely eaten! 😋 +* a `constructor` where the deployer can define the pizza size, +* a `eatSlice` method to consume slices available, +* a `bakeNewPizza` method to refill all slices only if the previous pizza have been entirely eaten! 😋 Write the following code to `Pizza.sol`: @@ -126,17 +124,17 @@ contract Pizza { } ``` -## 🍕 Compiling +### 🍕 Compiling Now try compiling the `Pizza.sol` contract by running: -```sh +``` truffle compile ``` If everything is correctly configured and there are no errors, you should see the following message on your console: -```sh +``` Compiling your contracts... =========================== > Compiling ./contracts/Pizza.sol @@ -147,10 +145,7 @@ Compiling your contracts... Your folder should look like this: -

- Screenshot 2022-09-29 at 1 03 39 PM -

- +![Screenshot 2022-09-29 at 1 03 39 PM](https://user-images.githubusercontent.com/35517007/192988098-11f5f626-6623-421b-8e9d-255c2cd3b3f5.png) > If you see an error while compiling on a Mac, you can use `sudo truffle compile` @@ -158,15 +153,15 @@ In order to get started deploying new contracts on XDC Mainnet and/or Apothem(te If you never used `yarn` before, you might need to install it first. ‼️You can skip this step if you already have yarn installed‼️. -```sh +``` npm install --global yarn ``` -## Creating a .env file +### Creating a .env file Initialize your package manager on your folder and install the required dependencies through your terminal: -```sh +``` npm init -y npm add @truffle/hdwallet-provider dotenv ``` @@ -181,7 +176,7 @@ MNEMONIC=arm derive cupboard decade course garlic journey blast tribe describe c 🚨 **Do not use the mnemonic in the example above in production or you can risk losing your assets and/or the ownership of your smart contracts!** 🚨 -## 🔀 Migrating from Ethereum to XDC network +### 🔀 Migrating from Ethereum to XDC network For this step we need to change the `truffle-config.js` file. @@ -270,7 +265,7 @@ module.exports = { }; ``` -## 🍕 Deploying +### 🍕 Deploying In order to deploy our newly compiled contract artifacts to the blockchain, you'll have to create a deployment script in the migrations folder. @@ -293,13 +288,13 @@ If the migration script have no errors, we can go ahead and run the command. For deployment on XDC testnet: -```sh +``` truffle migrate --network xinfin ``` For deployment on XDC testnet: -```sh +``` truffle migrate --network apothem ``` @@ -307,7 +302,7 @@ For deployment on the XDC Apothem Testnet. In either case, you need to have enou If the deployment is sucessful, the console should log the following message after migrations complete processing: -```sh +``` 1_pizza_migration.js ==================== @@ -335,13 +330,13 @@ Summary > Final cost: 0.0000881365 ETH ``` -## 🍕 Interacting with your contract using Truffle Console +### 🍕 Interacting with your contract using Truffle Console -The `truffle console` CLI is another amazing tool that allows us to try out our contracts straight from our development environment. +The `truffle console` CLI is another amazing tool that allows us to try out our contracts straight from our development environment. To start interacting with you smart contracts you can start running: -```sh +``` truffle console --network xinfin ``` @@ -367,7 +362,7 @@ truffle(xinfin) > instance.eatSlice(); It should log a transaction confirmation (Or rejection) object like the following: -```sh +``` { tx: '0x27ee33417f2f471bda1beaaaff57c5c71ce3edcbacec99de677b04e0863a0f29', receipt: { @@ -391,19 +386,19 @@ It should log a transaction confirmation (Or rejection) object like the followin This transaction is immediately reflected in the corresponding block explorer, [as seen here!](https://explorer.xinfin.network/txs/0x27ee33417f2f471bda1beaaaff57c5c71ce3edcbacec99de677b04e0863a0f29#overview) -# 🔍 Veryfing Contracts on the Block Explorer +## 🔍 Veryfing Contracts on the Block Explorer Once you have successfully deployed your smart contract to the blockchain, may find it interesting to verify your contract on [XinFin Block Explorer](https://explorer.xinfin.network/). First lets check the address our contract is deployed to by running: -```sh +``` truffle networks ``` If you have a contract already deployed, the console should log something like this: -```sh +``` Network: apothem (id: 51) No contracts deployed. @@ -413,44 +408,30 @@ Network: xinfin (id: 50) There is a `Pizza` contract deployed on XDC Mainnet at the `0x4FA229354CdF9c49FD2752e3869150C24c6A80c7`. You can search for this newly deployed contract on [XinFin Block Explorer](https://explorer.xinfin.network/): -

- - Screenshot 2022-09-29 at 1 23 00 PM - -

+![Screenshot 2022-09-29 at 1 23 00 PM](https://user-images.githubusercontent.com/35517007/192988503-29ea1b20-fd9d-4ca7-beb8-0f79d65b9678.png) Click in the `Verify And Publish` Option. We will be redirected to the Contract verification page where we need to fill out: -- Contract Name: Pizza -- Compiler: Check your `truffle-config.js` file for Compiler Version -- Contract Code: Just paste everything from your `Pizza.sol` file +* Contract Name: _Pizza_ +* Compiler: _Check your_ `truffle-config.js` _file for Compiler Version_ +* Contract Code: _Just paste everything from your_ `Pizza.sol` _file_ Once everything is filled out, press Submit! -

- Screenshot 2022-09-29 at 1 23 14 PM - -

+![Screenshot 2022-09-29 at 1 23 14 PM](https://user-images.githubusercontent.com/35517007/192988653-f5987b54-df83-4464-a96a-2d71e2002905.png) If everything is correctly filled out, your contract page on the block explorer should display a new tab called `Contract`: -

- Screenshot 2022-09-29 at 1 23 24 PM - -

+![Screenshot 2022-09-29 at 1 23 24 PM](https://user-images.githubusercontent.com/35517007/192988808-72505e63-7810-402d-a61f-cf59defb15e3.png) In this page you can read from, write to, or simply read the information tied to your smart contract on the blockchain: -

- - Screenshot 2022-09-29 at 1 23 40 PM - -

+![Screenshot 2022-09-29 at 1 23 40 PM](https://user-images.githubusercontent.com/35517007/192988899-eb41c2ae-c4b9-4bab-89e8-227d42bfe2b3.png) ---- +*** -For more information about Truffle Suite, Please Visit [Truffle Suite Documentation](https://trufflesuite.com/docs/truffle/).
-For more information about XDC Network, Please Visit [XDC Network Documentation on GitBook](https://docs.xdc.community/).
+For more information about Truffle Suite, Please Visit [Truffle Suite Documentation](https://trufflesuite.com/docs/truffle/).\ +For more information about XDC Network, Please Visit [XDC Network Documentation on GitBook](https://docs.xdc.community/).\ Resources used during the deployment of the Pizza Smart Contract can be found at [The Pizza Contract Folder](https://github.com/XDC-Community/docs/tree/main/how-to/Pizza). diff --git a/learn/how-to-articles/how-to-send-an-xrc20-transaction-on-the-xdc-network-using-ethers.js.md b/learn/how-to-articles/how-to-send-an-xrc20-transaction-on-the-xdc-network-using-ethers.js.md index a1abb05b..4f47c6a4 100644 --- a/learn/how-to-articles/how-to-send-an-xrc20-transaction-on-the-xdc-network-using-ethers.js.md +++ b/learn/how-to-articles/how-to-send-an-xrc20-transaction-on-the-xdc-network-using-ethers.js.md @@ -1,78 +1,81 @@ --- id: xrc20-token-ethers.js title: Sending XRC20 Tokens on the XDC Network Using Ethers.js -description: "Use Ethers.js to send XRC20 tokens over the XDC network" keywords: - docs - apothem - token - XRC20 - ethers.js +description: Use Ethers.js to send XRC20 tokens over the XDC network --- -# 🧭 Table of contents - -- [🧭 Table of contents](#-table-of-contents) -- [📰 Overview](#-overview) - - [What you will learn](#what-you-will-learn) - - [What you will do](#what-you-will-do) - - [📰 About XRC20 Tokens](#-about-xrc20-tokens) -- [🚀 Setting up the development environment](#-setting-up-the-development-environment) - - [⚒ Starting a new NPM Project and Installing Dependencies](#-starting-a-new-npm-project-and-installing-dependencies) - - [💵 Transacting an XRC20 token contract on the XDC Network with ethers](#-transacting-an-xrc20-token-contract-on-the-xdc-network-with-ethers) - - [💵 Add funds to wallet using Apothem Faucet](#-add-funds-to-wallet-using-apothem-faucet) - - [💵 What is an XDC transaction](#-what-is-an-xdc-transaction) - - [💵 Setting up env file](#-setting-up-env-file) - - [💵 Using ethers to transact XRC20](#-using-ethers-to-transact-xrc20) - - [🔍 Verifying transaction via Apothem network explorer](#-verifying-transaction-via-apothem-network-explorer) - -# 📰 Overview +# How to Send an XRC20 Transaction on the XDC Network Using ethers.js + +## 🧭 Table of contents + +* [🧭 Table of contents](how-to-send-an-xrc20-transaction-on-the-xdc-network-using-ethers.js.md#-table-of-contents) +* [📰 Overview](how-to-send-an-xrc20-transaction-on-the-xdc-network-using-ethers.js.md#-overview) + * [What you will learn](how-to-send-an-xrc20-transaction-on-the-xdc-network-using-ethers.js.md#what-you-will-learn) + * [What you will do](how-to-send-an-xrc20-transaction-on-the-xdc-network-using-ethers.js.md#what-you-will-do) + * [📰 About XRC20 Tokens](how-to-send-an-xrc20-transaction-on-the-xdc-network-using-ethers.js.md#-about-xrc20-tokens) +* [🚀 Setting up the development environment](how-to-send-an-xrc20-transaction-on-the-xdc-network-using-ethers.js.md#-setting-up-the-development-environment) + * [⚒ Starting a new NPM Project and Installing Dependencies](how-to-send-an-xrc20-transaction-on-the-xdc-network-using-ethers.js.md#-starting-a-new-npm-project-and-installing-dependencies) + * [💵 Transacting an XRC20 token contract on the XDC Network with ethers](how-to-send-an-xrc20-transaction-on-the-xdc-network-using-ethers.js.md#-transacting-an-xrc20-token-contract-on-the-xdc-network-with-ethers) + * [💵 Add funds to wallet using Apothem Faucet](how-to-send-an-xrc20-transaction-on-the-xdc-network-using-ethers.js.md#-add-funds-to-wallet-using-apothem-faucet) + * [💵 What is an XDC transaction](how-to-send-an-xrc20-transaction-on-the-xdc-network-using-ethers.js.md#-what-is-an-xdc-transaction) + * [💵 Setting up env file](how-to-send-an-xrc20-transaction-on-the-xdc-network-using-ethers.js.md#-setting-up-env-file) + * [💵 Using ethers to transact XRC20](how-to-send-an-xrc20-transaction-on-the-xdc-network-using-ethers.js.md#-using-ethers-to-transact-xrc20) + * [🔍 Verifying transaction via Apothem network explorer](how-to-send-an-xrc20-transaction-on-the-xdc-network-using-ethers.js.md#-verifying-transaction-via-apothem-network-explorer) + +## 📰 Overview + [Ethers.js](https://github.com/ethers-io/ethers.js/) is a library written in Javascript which simplifies blockchain interactions. -### What you will learn +#### What you will learn + In this tutorial, you will learn how to import ethers.js, transact an XRC20 token, and set gas prices appropriately. -### What you will do -- Import ethers.js -- Transfer an XRC20 token -- Verify Transaction +#### What you will do + +* Import ethers.js +* Transfer an XRC20 token +* Verify Transaction -## 📰 About XRC20 Tokens +### 📰 About XRC20 Tokens XRC20 is a set of rules to standardize assets on the XDC network. Every XRC20 Token must be able to execute the following methods: -- `totalSupply()` -- `balanceOf(address account)` -- `allowance(address owner, address spender)` -- `transfer(address recipient, uint amount)` -- `approve(address spender, uint amount)` -- `transferFrom(address sender, address recipient, uint amount)` +* `totalSupply()` +* `balanceOf(address account)` +* `allowance(address owner, address spender)` +* `transfer(address recipient, uint amount)` +* `approve(address spender, uint amount)` +* `transferFrom(address sender, address recipient, uint amount)` These are the minimum required methods that allow an asset on the XDC network to be called an XRC20 token. Also, a XRC20 token must be able to emit the following `Events` on the blockchain: -- `Approval(address indexed tokenOwner, address indexed spender, - uint tokens)` - - `Transfer(address indexed from, address indexed to, - uint tokens)` - +* `Approval(address indexed tokenOwner, address indexed spender, uint tokens)` +* `Transfer(address indexed from, address indexed to, uint tokens)` + Events are helpers that come in handy in the exhaustive labor of indexing state changes, and they are essential to off-chain applications to find relevant data on the blockchain. By mapping all `Transfer` events, for example, we can fetch all the historic data on token transfers more easily. Last but not least, a few contract constants that are public that are also very important to have are: -- `name` -- `symbol` -- `decimals` +* `name` +* `symbol` +* `decimals` Without these public constants, it would be impossible to label tokens on block explorers, for example. In this tutorial we will deploy a XRC20 token that have all the `Methods`, `Events` and `Constants` mentioned above. -# 🚀 Setting up the development environment +## 🚀 Setting up the development environment There are a few technical requirements before you start. Please install the following: -- [Node.js v8+ LTS and npm](https://nodejs.org/en/) (comes with Node) -- [Git](https://git-scm.com/) +* [Node.js v8+ LTS and npm](https://nodejs.org/en/) (comes with Node) +* [Git](https://git-scm.com/) -## ⚒ Starting a new NPM Project and Installing Dependencies +### ⚒ Starting a new NPM Project and Installing Dependencies Start by setting up your folder. As we are creating a project called `XRC20`, you should create a new `XRC20` folder by running on terminal. @@ -81,34 +84,38 @@ mkdir XRC20 && cd XRC20 ``` Initialize the new project in that folder: -```sh + +``` npm init ``` + > Tip: to generate project without any questions you can use `npm init -y` Install the necessary dependencies: -```sh + +``` npm install ethers dotenv ``` -## 💵 Transacting an XRC20 token contract on the XDC Network with ethers + +### 💵 Transacting an XRC20 token contract on the XDC Network with ethers Before sending actual transactions, we have to do some preparations. -## 💵 Add funds to wallet using Apothem Faucet -Go to https://faucet.apothem.network/ and paste your address and press `Request 1000 XDC` -![faucet](https://user-images.githubusercontent.com/102393474/191441945-6eee9b64-acef-4901-bf22-62becd342f93.png) +### 💵 Add funds to wallet using Apothem Faucet + +Go to https://faucet.apothem.network/ and paste your address and press `Request 1000 XDC` ![faucet](https://user-images.githubusercontent.com/102393474/191441945-6eee9b64-acef-4901-bf22-62becd342f93.png) If you don't have an XDC address yet, you can create new wallet using [XDCPay](https://chrome.google.com/webstore/detail/xdcpay/bocpokimicclpaiekenaeelehdjllofo) -## 💵 What is an XDC transaction +### 💵 What is an XDC transaction An XDC transaction is a set of instructions one account sends to another. Transactions can be used to transfer native XDC token or for interactions with smart contracts. -## 💵 Setting up env file +### 💵 Setting up env file You can use `.env.example` as a template. -Your `.env` file should look like this: +Your `.env` file should look like this: ``` XINFIN_NETWORK_URL=https://erpc.xinfin.network @@ -120,22 +127,17 @@ XRC20_TOKEN_ADDRESS=0xyourtokenaddress > Tip: never commit files containing your seed phrase or private key to a git -❕ Keep in mind that you need to replace `xdc` prefix in your token address with `0x`. -So token address `xdcfc1b5137a6c8dffcf816857463afbb4672d462f3` will become `0xfc1b5137a6c8dffcf816857463afbb4672d462f3`. +❕ Keep in mind that you need to replace `xdc` prefix in your token address with `0x`. So token address `xdcfc1b5137a6c8dffcf816857463afbb4672d462f3` will become `0xfc1b5137a6c8dffcf816857463afbb4672d462f3`. If you don't have any XRC20 tokens, you can follow one of those tutorials to create one: -- [Create XRC20 token using Hardhat](https://github.com/XDC-Community/docs/blob/main/how-to/XRC20/Hardhat/how-to.md) -- [Create XRC20 token using Remix](https://github.com/XDC-Community/docs/blob/main/how-to/XRC20/Remix/how-to.md) -- [Create XRC20 token using Truffle](https://github.com/XDC-Community/docs/blob/main/how-to/XRC20/Truffle/how-to.md) +* [Create XRC20 token using Hardhat](../../how-to/XRC20/Hardhat/how-to.md) +* [Create XRC20 token using Remix](../../how-to/XRC20/Remix/how-to.md) +* [Create XRC20 token using Truffle](../../how-to/XRC20/Truffle/how-to.md) -If you don't know what private key is or how to get it, this is how you can copy your private key from XDCPay -![stage0](https://user-images.githubusercontent.com/102393474/191442289-32269ab1-5b5a-4a94-b4a1-00a1d35a6358.png) -![stage1](https://user-images.githubusercontent.com/102393474/191442300-45cc3af3-674c-4fcd-9310-e8ae1daa731f.png) -![stage2](https://user-images.githubusercontent.com/102393474/191442310-4ada2b4f-43d0-4bd0-88f9-991e3a9cf9f4.png) -![stage3](https://user-images.githubusercontent.com/102393474/191442321-10a88d6b-664e-453b-a653-e938fc3c63b9.png) +If you don't know what private key is or how to get it, this is how you can copy your private key from XDCPay ![stage0](https://user-images.githubusercontent.com/102393474/191442289-32269ab1-5b5a-4a94-b4a1-00a1d35a6358.png) ![stage1](https://user-images.githubusercontent.com/102393474/191442300-45cc3af3-674c-4fcd-9310-e8ae1daa731f.png) ![stage2](https://user-images.githubusercontent.com/102393474/191442310-4ada2b4f-43d0-4bd0-88f9-991e3a9cf9f4.png) ![stage3](https://user-images.githubusercontent.com/102393474/191442321-10a88d6b-664e-453b-a653-e938fc3c63b9.png) -## 💵 Using ethers to transact XRC20 +### 💵 Using ethers to transact XRC20 Create a file named `send_token.js` in your project with following content: @@ -174,7 +176,7 @@ Now lets go through each line: const XRC20ABI = require('./XRC20.json') ``` -In order to interact with the contract, you need to provide an `ABI` or application binary interface. This is basically just list of functions and events which explains how to interact with smart contract. You can copy `ABI` from here [XRC20 ABI](./example-xrc20-transfer/XRC20.json) +In order to interact with the contract, you need to provide an `ABI` or application binary interface. This is basically just list of functions and events which explains how to interact with smart contract. You can copy `ABI` from here [XRC20 ABI](example-xrc20-transfer/XRC20.json) ```javascript const testnetProvider = new ethers.providers.JsonRpcProvider(process.env.APOTHEM_NETWORK_URL) @@ -224,7 +226,7 @@ console.log(receipt.hash) Now lets run it! -```sh +``` node send_token.js ``` @@ -234,25 +236,20 @@ Next, wait few seconds and you should see something like this: 0xabf5957a25f943dfb1b71c6d9fc041c7c419b6440af4661f8aab21fc185bd134 ``` -## 🔍 Verifying transaction via Apothem network explorer +### 🔍 Verifying transaction via Apothem network explorer -After running our script, you should have received a transaction hash. You can use this hash to check transaction on a blockchain. -To do this, go to https://explorer.apothem.network and paste your transaction hash in search field. +After running our script, you should have received a transaction hash. You can use this hash to check transaction on a blockchain. To do this, go to https://explorer.apothem.network and paste your transaction hash in search field. -You should see the following: -![txinfo](https://user-images.githubusercontent.com/102393474/191441715-334960ee-4b40-455a-a14a-2e1b49e60609.png) +You should see the following: ![txinfo](https://user-images.githubusercontent.com/102393474/191441715-334960ee-4b40-455a-a14a-2e1b49e60609.png) -Here, you can see that your transaction ended with success: -![txstatus](https://user-images.githubusercontent.com/102393474/191441672-128fd5f5-a394-497c-8bea-27528901635f.png) +Here, you can see that your transaction ended with success: ![txstatus](https://user-images.githubusercontent.com/102393474/191441672-128fd5f5-a394-497c-8bea-27528901635f.png) -This is how much you ended up paying for our transaction: -![txprice](https://user-images.githubusercontent.com/102393474/191441705-df45c604-86aa-4e07-9680-5ae530be7cbb.png) +This is how much you ended up paying for our transaction: ![txprice](https://user-images.githubusercontent.com/102393474/191441705-df45c604-86aa-4e07-9680-5ae530be7cbb.png) -And here is how much tokens we sent: -![tokenamount](https://user-images.githubusercontent.com/102393474/191441729-eeb9d535-dd31-4cac-8aaa-fe19b7b2dce9.png) +And here is how much tokens we sent: ![tokenamount](https://user-images.githubusercontent.com/102393474/191441729-eeb9d535-dd31-4cac-8aaa-fe19b7b2dce9.png) ---- +*** -For more information about ether.js check out [ethers.js github repo](https://github.com/ethers-io/ethers.js/) and [ethers.js documentation website](https://docs.ethers.io/v5/).
-For more information about the XDC Network, Please Visit [XDC Network Documentation on GitBook](https://docs.xdc.org/).
-You can find resources used for this tutorial here [example-xrc20-transfer](./example-xrc20-transfer). +For more information about ether.js check out [ethers.js github repo](https://github.com/ethers-io/ethers.js/) and [ethers.js documentation website](https://docs.ethers.io/v5/).\ +For more information about the XDC Network, Please Visit [XDC Network Documentation on GitBook](https://docs.xdc.org/).\ +You can find resources used for this tutorial here [example-xrc20-transfer](example-xrc20-transfer/). diff --git a/learn/how-to-articles/how-to-use-truffle-and-ganache-to-create-defi-app.md b/learn/how-to-articles/how-to-use-truffle-and-ganache-to-create-defi-app.md index b5fc022c..2616c516 100644 --- a/learn/how-to-articles/how-to-use-truffle-and-ganache-to-create-defi-app.md +++ b/learn/how-to-articles/how-to-use-truffle-and-ganache-to-create-defi-app.md @@ -1,59 +1,63 @@ --- id: defi-app-truffle title: DeFi App using Truffle and Ganache -description: "Use Truffle and Ganache to create DeFi App" keywords: - docs - apothem - token - DeFi - truffle +description: Use Truffle and Ganache to create DeFi App --- -# 🧭 Table of contents - -- [🧭 Table of contents](#-table-of-contents) -- [📰 Overview](#-overview) - - [What you will learn](#what-you-will-learn) - - [What you will do](#what-you-will-do) - - [📰 About DeFi](#-about-defi) -- [🚀 Setting up the development environment](#-setting-up-the-development-environment) - - [⚒ Starting a new Truffle Project](#-starting-a-new-truffle-project) - - [⚒ Configuring XDC Mainnet and Apothem Testnet on Truffle](#-configuring-xdc-mainnet-and-apothem-testnet-on-truffle) - - [⚒ Adding Testnet XDC to Development Wallet](#-adding-testnet-xdc-to-development-wallet) -- [💵 Creating your first DeFi App](#-creating-our-first-defi-app) - - [💵 Create and Deploy XRC20 Token](#-create-and-deploy-xrc20-token) - - [💵 Create FarmToken contract](#-create-farmtoken-contract) - - [💵 Compiling and Deploying](#-compiling-and-deploying) - - [💵 Testing FarmToken contract](#-testing-farmtoken-contract) - - [💵 Deploying on a live network](#-deploying-on-a-live-network) -- [🔍 Veryfing Contracts on the Block Explorer](#-veryfing-contracts-on-the-block-explorer) - -# 📰 Overview +# How To Use Truffle and Ganache to Create DeFi App + +## 🧭 Table of contents + +* [🧭 Table of contents](how-to-use-truffle-and-ganache-to-create-defi-app.md#-table-of-contents) +* [📰 Overview](how-to-use-truffle-and-ganache-to-create-defi-app.md#-overview) + * [What you will learn](how-to-use-truffle-and-ganache-to-create-defi-app.md#what-you-will-learn) + * [What you will do](how-to-use-truffle-and-ganache-to-create-defi-app.md#what-you-will-do) + * [📰 About DeFi](how-to-use-truffle-and-ganache-to-create-defi-app.md#-about-defi) +* [🚀 Setting up the development environment](how-to-use-truffle-and-ganache-to-create-defi-app.md#-setting-up-the-development-environment) + * [⚒ Starting a new Truffle Project](how-to-use-truffle-and-ganache-to-create-defi-app.md#-starting-a-new-truffle-project) + * [⚒ Configuring XDC Mainnet and Apothem Testnet on Truffle](how-to-use-truffle-and-ganache-to-create-defi-app.md#-configuring-xdc-mainnet-and-apothem-testnet-on-truffle) + * [⚒ Adding Testnet XDC to Development Wallet](how-to-use-truffle-and-ganache-to-create-defi-app.md#-adding-testnet-xdc-to-development-wallet) +* [💵 Creating your first DeFi App](how-to-use-truffle-and-ganache-to-create-defi-app.md#-creating-our-first-defi-app) + * [💵 Create and Deploy XRC20 Token](how-to-use-truffle-and-ganache-to-create-defi-app.md#-create-and-deploy-xrc20-token) + * [💵 Create FarmToken contract](how-to-use-truffle-and-ganache-to-create-defi-app.md#-create-farmtoken-contract) + * [💵 Compiling and Deploying](how-to-use-truffle-and-ganache-to-create-defi-app.md#-compiling-and-deploying) + * [💵 Testing FarmToken contract](how-to-use-truffle-and-ganache-to-create-defi-app.md#-testing-farmtoken-contract) + * [💵 Deploying on a live network](how-to-use-truffle-and-ganache-to-create-defi-app.md#-deploying-on-a-live-network) +* [🔍 Veryfing Contracts on the Block Explorer](how-to-use-truffle-and-ganache-to-create-defi-app.md#-veryfing-contracts-on-the-block-explorer) + +## 📰 Overview + [Truffle](https://trufflesuite.com/) is a blockchain development environment, which you can use to create and test smart contracts by leveraging an Ethereum Virtual Machine. [Ganache](https://trufflesuite.com/ganache/) is a tool to create a local blockchain for testing your smart contracts. It simulates all the features of a real blockchain network but costs you nothing to deploy and test your code. -### What you will learn +#### What you will learn + In this tutorial, we will build a DeFi Application with Solidity where users can deposit an XRC20 token to the smart contract and it will mint and transfer Farm Tokens to them. The users can later withdraw their XRC20 tokens by burning their Farm Token with a smart contract, and the XRC20 tokens will be transferred back to them. -### What you will do +#### What you will do -- Install and setup Truffle and Ganache -- Create a Truffle project -- Create an XRC20 Token -- Compile an XRC20 Token -- Deploy an XRC20 Token -- Create FarmToken Smart Contract +* Install and setup Truffle and Ganache +* Create a Truffle project +* Create an XRC20 Token +* Compile an XRC20 Token +* Deploy an XRC20 Token +* Create FarmToken Smart Contract -## 📰 About DeFi +### 📰 About DeFi Decentralized finance, or **DeFi**, is a term which describes blockchain-based financial services. DeFi provides virtually any financial service on a blockchain in a permissionless way. You can borrow, lend, stake, trade, and more using DeFi services. -# 🚀 Setting up the development environment +## 🚀 Setting up the development environment There are a few technical requirements before we start. Please install the following: -- [Node.js v8+ LTS and npm](https://nodejs.org/en/) (comes with Node) -- [Git](https://git-scm.com/) +* [Node.js v8+ LTS and npm](https://nodejs.org/en/) (comes with Node) +* [Git](https://git-scm.com/) Once we have those installed, we only need one command to install Truffle: @@ -61,7 +65,7 @@ Once we have those installed, we only need one command to install Truffle: npm install -g truffle ``` -To verify that Truffle is installed properly, type **`truffle version`** on a terminal. You should see something like: +To verify that Truffle is installed properly, type **`truffle version`** on a terminal. You should see something like: ```bash Truffle v5.5.27 (core: 5.5.27) @@ -73,7 +77,7 @@ Web3.js v1.7.4 If you see an error instead, make sure that your npm modules are added to your path. -## ⚒ Starting a new Truffle Project +### ⚒ Starting a new Truffle Project You will start by setting up tour folder. In this example, we are creating a project called `FarmToken`. You can create a new `FarmToken` folder by running on the following on terminal: @@ -100,31 +104,29 @@ http://trufflesuite.com/docs Your folder files will look like this: -

- Step 01 -

+![Step 01](https://user-images.githubusercontent.com/78161484/190839624-495ef863-e177-4c62-81ca-680e5e6a4cab.png) - -## ⚒ Configuring XDC Mainnet and Apothem Testnet on Truffle +### ⚒ Configuring XDC Mainnet and Apothem Testnet on Truffle In order to get started deploying new contracts on XDC Mainnet and/or Apothem, you'll need to install two new dependencies that will be used in the `truffle-config.js` file. These dependencies are `@truffle/hdwallet-provider` and `dotenv`. First, choose your preferred package manager. In this example we are using `yarn` but you can also use `npm`. - If you never used `yarn` before, you might need to install it first.
‼️You can skip this step if you already have yarn installed‼️ +If you never used `yarn` before, you might need to install it first.\ +‼️You can skip this step if you already have yarn installed‼️ -```sh +``` npm install --global yarn ``` Initialize your package manager on your folder and install the required dependencies: -```sh +``` yarn init -y yarn add @truffle/hdwallet-provider dotenv ``` You will also need a **24-Word Mnemonic Phrase**. To configure your wallet, create a new `.env` file and write your mnemonic by running: -```sh +``` touch .env echo MNEMONIC=arm derive cupboard decade course garlic journey blast tribe describe curve obey >> .env ``` @@ -135,7 +137,6 @@ Remember to change the **24-Word Mnemonic** above for your own mnemonic. The con MNEMONIC=arm derive cupboard decade course garlic journey blast tribe describe curve obey ``` - 🚨 **Do not use the mnemonic in the example above in production or you can risk losing your assets and/or the ownership of your smart contracts!** 🚨 Lastly, you can configure the `truffle-config.js` file for both Apothem and XinFin Networks by writting: @@ -179,17 +180,17 @@ module.exports = { }; ``` -## ⚒ Adding Testnet XDC to Development Wallet +### ⚒ Adding Testnet XDC to Development Wallet It is possible to list all XDC addresses bound to your mnemonic on truffle by accessing the truffle console: -```sh +``` truffle console --network xinfin ``` Once the truffle console CLI opens, you can run: -```sh +``` truffle(xinfin)> accounts ``` @@ -214,31 +215,29 @@ These accounts use the Ethereum standard format starting with `0x`, but we can s With this account in hand, you can head to the [Apothem Faucet](https://faucet.apothem.network/) and claim some TXDC for development purposes: -

- Step 02 -

+![Step 02](https://user-images.githubusercontent.com/78161484/189952656-eb7793cc-7dee-4307-88fc-7c351a75cec7.png) -# 💵 Creating our first DeFi App +## 💵 Creating our first DeFi App -The source code for the DeFi App used in this tutorial is available here: [FarmToken Contract](https://github.com/XDC-Community/docs/blob/main/how-to/DeFi/Truffle/FarmToken/contracts/FarmToken.sol) and [MyToken Contract](https://github.com/XDC-Community/docs/blob/main/how-to/DeFi/Truffle/FarmToken/contracts/MyToken.sol). +The source code for the DeFi App used in this tutorial is available here: [FarmToken Contract](../../how-to/DeFi/Truffle/FarmToken/contracts/FarmToken.sol) and [MyToken Contract](../../how-to/DeFi/Truffle/FarmToken/contracts/MyToken.sol). -## 💵 Create and Deploy XRC20 Token +### 💵 Create and Deploy XRC20 Token Before creating FarmToken contract, you should first create a new XRC20 token. This is going to be a quick guide, but if you want an in-depth understanding of the `XRC20` standard, please visit the following tutorials: -- [Create XRC20 token using Hardhat](https://docs.xdc.community/learn/how-to-articles/how-to-create-and-deploy-an-xrc20-token-using-hardhat) -- [Create XRC20 token using Remix](https://docs.xdc.community/learn/how-to-articles/how-to-create-and-deploy-an-xrc20-token-using-remix) -- [Create XRC20 token using Truffle](https://docs.xdc.community/learn/how-to-articles/how-to-create-and-deploy-an-xrc20-token-using-truffle) +* [Create XRC20 token using Hardhat](https://docs.xdc.community/learn/how-to-articles/how-to-create-and-deploy-an-xrc20-token-using-hardhat) +* [Create XRC20 token using Remix](https://docs.xdc.community/learn/how-to-articles/how-to-create-and-deploy-an-xrc20-token-using-remix) +* [Create XRC20 token using Truffle](https://docs.xdc.community/learn/how-to-articles/how-to-create-and-deploy-an-xrc20-token-using-truffle) We will need to install OpenZeppelin in order to not writing all code by ourself -```sh +``` yarn add @openzeppelin/contracts ``` or using `npm` -```sh +``` npm install @openzeppelin/contracts ``` @@ -256,7 +255,7 @@ contract XRC20Token is ERC20 { } ``` -## 💵 Create FarmToken contract +### 💵 Create FarmToken contract Create another smart contract called `FarmToken.sol`. @@ -307,17 +306,17 @@ contract FarmToken is ERC20 { `FarmToken` is a XRC20 token, but with 3 custom commands. `balance` shows how much of `MyToken` our `FarmToken` holds. `deposit` transfers `MyToken` from our account to `FarmToken` and gives us respective amount of `FarmToken`. `withdraw` burns our `FarmToken` and returns back `MyToken` to us. The latter prevents you from having both same amounts of `FarmToken` and `MyToken`, as you can hold only one of them. -## 💵 Compiling and Deploying +### 💵 Compiling and Deploying We can compile our smart contracts (`FarmToken.sol` and `MyToken.sol`) by running: -```sh +``` truffle compile ``` If everything is correctly configured and there are no errors, you should see the following message on your console: -```sh +``` Compiling your contracts... =========================== > Compiling ./contracts/FarmToken.sol @@ -335,11 +334,11 @@ Compiling your contracts... And your folder should look like this: -![folder_struct](https://user-images.githubusercontent.com/102393474/192887344-772b3e7a-a43a-47b1-a255-3a6f04f11ba5.png) +![folder\_struct](https://user-images.githubusercontent.com/102393474/192887344-772b3e7a-a43a-47b1-a255-3a6f04f11ba5.png) In order to deploy our newly-compiled contract artifacts to the blockchain, you'll need to create a deployment script into the migrations folder: -```sh +``` touch ./migrations/1_defi_migration.js ``` @@ -365,19 +364,19 @@ module.exports = async function (deployer) { } ``` -Now, you can run it on a ganache local network. First, open the Ganache app and choose the `Quickstart` option to start your local blockchain network. +Now, you can run it on a ganache local network. First, open the Ganache app and choose the `Quickstart` option to start your local blockchain network. -![ganache_home](https://user-images.githubusercontent.com/102393474/192887131-53f9bcec-9843-4027-8ec1-8b442c2d2bb7.png) +![ganache\_home](https://user-images.githubusercontent.com/102393474/192887131-53f9bcec-9843-4027-8ec1-8b442c2d2bb7.png) Next, deploy contracts by running: -```sh +``` truffle migrate ``` If everything is fine, you'll have an output like this: -```sh +``` Starting migrations... ====================== > Network name: 'ganache' @@ -428,21 +427,20 @@ Summary > Final cost: 0.06297366 ETH ``` -This is what you will see from Ganache app. -![ganache_0](https://user-images.githubusercontent.com/102393474/192887165-4e766c71-5167-4ef7-9e00-2568ece97580.png) +This is what you will see from Ganache app. ![ganache\_0](https://user-images.githubusercontent.com/102393474/192887165-4e766c71-5167-4ef7-9e00-2568ece97580.png) -![ganache_1](https://user-images.githubusercontent.com/102393474/192887171-6ba7b46d-80d4-4d0b-96a5-092cca193a30.png) - - -## 💵 Testing FarmToken contract +![ganache\_1](https://user-images.githubusercontent.com/102393474/192887171-6ba7b46d-80d4-4d0b-96a5-092cca193a30.png) +### 💵 Testing FarmToken contract Create a `scripts` folder where we will put our files for testing. + ```bash mkdir scripts ``` Next, you can create your first script to check balance of `FarmToken`. Create file `getMyTokenBalance.js` and paste: + ```javascript const MyToken = artifacts.require("XRC20Token") const FarmToken = artifacts.require("FarmToken") @@ -458,13 +456,14 @@ module.exports = async function (callback) { After that, you can run a script to check our `FarmToken` balance: `truffle exec ./scripts/getMyTokenBalance.js` -```sh +``` Using network 'ganache'. 0 ``` We now need a script to deposit our tokens in the `FarmToken` contract. Create a file `depositMyToken.js` + ```javascript const MyToken = artifacts.require("XRC20Token") const FarmToken = artifacts.require("FarmToken") @@ -555,11 +554,11 @@ module.exports = async function (callback) { It's time to deposit some tokens. -```sh +``` truffle exec ./scripts/depositMyToken.js ``` -```sh +``` Using network 'ganache'. Amount of MyToken FarmToken is allowed to transfer on our behalf Before: 0 @@ -581,7 +580,7 @@ Balance FarmToken After TokenFarm 0 Check your balance again using `truffle exec ./scripts/getMyTokenBalance.js` -```sh +``` Using network 'ganache'. 100 @@ -590,6 +589,7 @@ Using network 'ganache'. Everything should be working as intended. Finally, you can check if we can withdraw your tokens by creating a file called `withdrawMyToken.js`: + ```javascript const MyToken = artifacts.require("XRC20Token") const FarmToken = artifacts.require("FarmToken") @@ -659,11 +659,11 @@ module.exports = async function (callback) { Now, you can run it: -```sh +``` truffle exec ./scripts/withdrawMyToken.js ``` -```sh +``` Using network 'ganache'. *** My Token *** @@ -681,21 +681,21 @@ Balance FarmToken After accounts[0] 0 Balance FarmToken After TokenFarm 0 ``` -## 💵 Deploying on a live network +### 💵 Deploying on a live network Finally, you can deploy everything on a XDC Apothem Testnet. -```sh +``` truffle migrate --network apothem ``` If you want to deploy it on XDC mainet, change network to `xinfin`. -```sh +``` truffle migrate --network xinfin ``` -# 🔍 Veryfing Contracts on the Block Explorer +## 🔍 Veryfing Contracts on the Block Explorer Once you have successfully deployed your smart contract to the blockchain, you might want to verify your contract on [XinFin Block Explorer](https://explorer.xinfin.network/). @@ -721,35 +721,28 @@ Next, open `MyToken_flat.sol` and remove every line which starts with `// SPDX-L Now, lets grab the `MyToken.sol` address from the deploying step: this address is in the Ethereum standard but we can simply swap the `0x` prefix for `xdc` and search for our newly deployed contract on [XinFin Block Explorer](https://explorer.xinfin.network/): -

- Verify 01 -

+![Verify 01](https://user-images.githubusercontent.com/78161484/190875518-828c0061-71de-42c2-b222-0b8427852d01.png) Click on the `Verify And Publish` Option. You will be redirected to the contract verification page where we need to fill out: -- Contract Name: XRC20Token -- Compiler: Check your `truffle-config.js` file for Compiler Version -- Contract Code: Just paste everything from your `MyToken_flat.sol` file +* Contract Name: _XRC20Token_ +* Compiler: _Check your_ `truffle-config.js` _file for Compiler Version_ +* Contract Code: _Just paste everything from your_ `MyToken_flat.sol` _file_ Once everything is filled out, press Submit! -

- Verify 02 -

+![Verify 02](https://user-images.githubusercontent.com/78161484/190875635-f6d3aa36-47b2-4b09-ad6a-fe6df3fb11f1.png) If everything was filled out correctly, your contract page on the block explorer should display a new tab called `Contract`: -

- Verify 03 -

+![Verify 03](https://user-images.githubusercontent.com/78161484/190875780-6223b4b0-fecc-4e79-83bc-c810c5b0351c.png) Repeat those steps if you want to verify `FarmToken.sol`, except this time `Contract Name` will be `FarmToken` and source code will be from `FarmToken_flat.sol` ---- +*** -For more information about Truffle Suite, Please Visit [Truffle Suite Documentation](https://trufflesuite.com/docs/truffle/).
-For more information about XDC Network, Please Visit [XDC Community Documentation on GitBook](https://docs.xdc.community/).
+For more information about Truffle Suite, Please Visit [Truffle Suite Documentation](https://trufflesuite.com/docs/truffle/).\ +For more information about XDC Network, Please Visit [XDC Community Documentation on GitBook](https://docs.xdc.community/).\ Resources used during the deployment of the DeFi App can be found at [FarmToken Contract Folder](https://github.com/XDC-Community/docs/tree/main/how-to/DeFi/Truffle/FarmToken/contracts). - diff --git a/run-a-node/masternode/one-click-installer-masternode-macos.md b/run-a-node/masternode/one-click-installer-masternode-macos.md index 3fce1c9d..ce6d309d 100644 --- a/run-a-node/masternode/one-click-installer-masternode-macos.md +++ b/run-a-node/masternode/one-click-installer-masternode-macos.md @@ -40,7 +40,7 @@ If the lock at the bottom left is locked
+
7\. Once it starts syncing, you will notice the "Peers" number going up and "Blocks" going up. If prompted by your MacOS to "allow incoming connections to XinFin Network" click "Allow." You will see the application generate your account. diff --git a/subnets/README.md b/subnets/README.md new file mode 100644 index 00000000..1eb666f7 --- /dev/null +++ b/subnets/README.md @@ -0,0 +1,174 @@ +--- +description: >- + subnets allow for applications to run local versions of their application for + privacy or compliance needs while also maintaining an internal means of + decentralization, and high availability. +--- + +# Subnets + +### XinFin DPoS + +#### Build a XDC01 DPoS Based BlockChain network in few steps...! + +Here’s how you built a XDC01 blockchain network, in this repository you will get a step-by-step guidance on setting up a hassle free XDC01 blockchain without knowing blockchain knowledge. + +## Description + +XDC subnets allowf for applications to run local along side the public main network + + + + + + + + + +**Prerequisite** + +**Operating System**: Ubuntu 16.04 64-bit or higher + +**Hardware**: + +| Hardware | Minimum | Desired | +| ------------ | ------- | ------- | +| **CPU's**: | 2 | 4 | +| **Memory**: | 4 GB | 16 GB | +| **Storage**: | 100 GB | 500 GB | + +### Network Ports + +Following network ports need to be open for the nodes to communicate + +| Port | Type | Definition | +| :----------: | :-----: | ---------- | +| 30301-3030\* | TCP/UDP | XDC Enode | +| 8545-854\* | TCP | RPC | +| 9545-954\* | TCP | WebSocket | + +**Delete Old Data** + +``` + bash reset.sh +``` + +## Set up script + +For managing a multi server node set up you will need to modify Local\_DPoS\_Stup/run.sh file to allow for the encode bootkey provided by each othe bootnodes and list them in order separated by a comma consisting of these attributes + + 1\. local the run.sh script to modify deployment details + +```bash +cd Local_DPoS_Stup/run.sh +``` + +2. add each Enode bootkey broadcasting on port: 3030\* each on a different port acending from port 30301 +3. assign the modifires to the suffix of the command + +```bash +${PROJECT_DIR}/build/bin/$Bin_NAME --bootnodes +"snode://" + --syncmode "full" + --datadir ./nodes/1 + --networkid "${networkid}" + --port 30303 + --rpc + --rpccorsdomain "*" + --ws + --wsaddr="0.0.0.0" + --wsorigins "*" + --wsport 8555 + --rpcaddr 0.0.0.0 + --rpcport 8545 + --rpcvhosts "*" + --unlock "${wallet1}" + --password ./.pwd + --mine + --gasprice "${GASPRICE}" + --targetgaslimit "420000000" + --verbosity ${VERBOSITY} + --rpcapi admin,db,eth,debug,miner,net,shh,txpool,personal,web3,XDPoS + --ethstats "XinFin-MasterNode-01:xinfin_xdpos_hybrid_network_stats@stats.xinfin.network:3000" & + +``` + +## Full command + +{% code overflow="wrap" %} +```bash +${PROJECT_DIR}/build/bin/$Bin_NAME --bootnodes "enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@78.129.229.96:30301,enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@5.152.223.199:30301,enode://d757f1a21828c9c426e26df39176053302209e3dd05e7a6c0e0eae57739e233c0fa970c9b98e010cee4817e6233c3ad3eef461cef3e731c485ed4bc08de7d0ac@37.58.56.228:30303 --syncmode "full" --datadir ./nodes/1 --networkid "${networkid}" --port 30303 --rpc --rpccorsdomain "*" --ws --wsaddr="0.0.0.0" --wsorigins "*" --wsport 8555 --rpcaddr 0.0.0.0 --rpcport 8545 --rpcvhosts "*" --unlock "${wallet1}" --password ./.pwd --mine --gasprice "${GASPRICE}" --targetgaslimit "420000000" --verbosity ${VERBOSITY} --rpcapi admin,db,eth,debug,miner,net,shh,txpool,personal,web3,XDPoS --ethstats "XinFin-MasterNode-01:xinfin_xdpos_hybrid_network_stats@stats.xinfin.network:3000" & +``` +{% endcode %} + +## run.sh + +{% code lineNumbers="true" %} +```bash +// Local_DPoS_Stup/run.sh +#!/bin/bash +_interupt() { + echo "Shutdown $child_proc" + kill -TERM $child_proc + exit +} + +trap _interupt INT TERM + +touch .pwd +export $(cat .env | xargs) +Bin_NAME=XDC + +WORK_DIR=$PWD +PROJECT_DIR="/root/XinFin/XDPoSChain" +cd $PROJECT_DIR && make XDC +cd $WORK_DIR + +if [ ! -d ./nodes/1/$Bin_NAME/chaindata ] +then + wallet1=$(${PROJECT_DIR}/build/bin/$Bin_NAME account import --password .pwd --datadir ./nodes/1 <(echo ${PRIVATE_KEY_1}) | awk -v FS="({|})" '{print $2}') + wallet2=$(${PROJECT_DIR}/build/bin/$Bin_NAME account import --password .pwd --datadir ./nodes/2 <(echo ${PRIVATE_KEY_2}) | awk -v FS="({|})" '{print $2}') + wallet3=$(${PROJECT_DIR}/build/bin/$Bin_NAME account import --password .pwd --datadir ./nodes/3 <(echo ${PRIVATE_KEY_3}) | awk -v FS="({|})" '{print $2}') + ${PROJECT_DIR}/build/bin/$Bin_NAME --datadir ./nodes/1 init ./genesis/genesis.json + ${PROJECT_DIR}/build/bin/$Bin_NAME --datadir ./nodes/2 init ./genesis/genesis.json + ${PROJECT_DIR}/build/bin/$Bin_NAME --datadir ./nodes/3 init ./genesis/genesis.json +else + wallet1=$(${PROJECT_DIR}/build/bin/$Bin_NAME account list --datadir ./nodes/1 | head -n 1 | awk -v FS="({|})" '{print $2}') + wallet2=$(${PROJECT_DIR}/build/bin/$Bin_NAME account list --datadir ./nodes/2 | head -n 1 | awk -v FS="({|})" '{print $2}') + wallet3=$(${PROJECT_DIR}/build/bin/$Bin_NAME account list --datadir ./nodes/3 | head -n 1 | awk -v FS="({|})" '{print $2}') +fi + +VERBOSITY=3 +GASPRICE="1" +networkid=50 + + +echo Starting the bootnode ... +${PROJECT_DIR}/build/bin/bootnode -nodekey ./bootnode.key --addr 0.0.0.0:30301 & +child_proc=$! + +echo Starting the nodes ... +${PROJECT_DIR}/build/bin/$Bin_NAME --bootnodes "enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@78.129.229.96:30301,enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@5.152.223.199:30301,enode://d757f1a21828c9c426e26df39176053302209e3dd05e7a6c0e0eae57739e233c0fa970c9b98e010cee4817e6233c3ad3eef461cef3e731c485ed4bc08de7d0ac@37.58.56.228:30303,enode://d757f1a21828c9c426e26df39176053302209e3dd05e7a6c0e0eae57739e233c0fa970c9b98e010cee4817e6233c3ad3eef461cef3e731c485ed4bc08de7d0ac@37.58.56.228:30304,enode://ef4d512152b875de3fc3990e3e124ae55adea35c49c5df40d0c4bea9327116fcfba70b920a7c164e08f425876025cbcf2519ad5238e57c10ea205e7897926a35@45.76.113.250:30303,enode://bcda483330dc0845f521ad611bcdc8cb147a7a8008c022dba20da2ab52ae46fd6d04f3cb9b7da4e94cf81d2c61065e008a13b5f05f3b69795b0dbdd2a14bb48d@209.222.30.63:30303,enode://2edc16258f6f2e18b105362df5af89889b5dbb7b098f266c39ba1b6200e9dfa76b8fd3bc0cdefce089d9e285772ae69d549e6807b23341ac975d0c085b936f1b@139.180.131.100:30303,enode://95fc2505216570bce1f75de47289d5cdcd35eba61a3e2d89fe1690dbdc60e22d8a12fe12c54c77d87f7b56035aa9ef2021387906ac3f5b3814cd90267b64f02e@149.28.135.114:30303,enode://5fcb6aa25e9e4184f278f842581507e4180851e861a59e1a02cf62f2927ee073ba921b5cba10301043f41ed494860f0ccc7508f1058c25f8ebcd56e9f8da018b@149.28.140.203:30303,enode://3a792327abf09be1b78db697c33de653d21bb702eaf6e292899c31a59f0b9535753a34d41f088416bc3f90d25c35ecd6b79d0015c36cf10f9a27c89ecd1f7fa4@149.28.140.232:30303,enode://26def7887241597a30314a77b1a32f156bdcc92eee198b086ae7c4dc26b986a9be6d078b09e93a1f963b083885020e1edfbf6b053dcebbdd090f6dfb289b59f0@149.28.142.223:30303,enode://f35e4ff8bfca2b37297dae0524146c2e4ef20c5d95be48cabe0072334bcf77a9385bad27b9630ee5ba4de451076c2123ad06113f21e3f78387a0e6fde7ec1b0b@45.77.183.160:30303,enode://44f8256e0285d1a94a73187116772522dcf53ef3affcac171cf01ffb00ec613ba1960f1309cc9353207a8f1211e645016c6e30b9669190aac8386c78545b84b1@198.13.34.190:30303,enode://95fc2505216570bce1f75de47289d5cdcd35eba61a3e2d89fe1690dbdc60e22d8a12fe12c54c77d87f7b56035aa9ef2021387906ac3f5b3814cd90267b64f02e@139.180.218.68:30303,enode://5701cfd1d03a04a3a17076e50983397ff634ff7f00693f62f6d4d94107796b74b8e10b8ad6efbf1499ae0c6263e84594d30986c79242a37b1c9d27cddb57cdc5@207.148.71.42:30303,enode://b0bd514f1b0892ab26c1d8be59510406f7d700c74cd3cd03d3f8d0fc21b784bb2fb7bde3afacf435928ca9506decf73bd15af5a64bd5dd113b26fc91605ce397@45.77.181.79:30303,enode://95fc2505216570bce1f75de47289d5cdcd35eba61a3e2d89fe1690dbdc60e22d8a12fe12c54c77d87f7b56035aa9ef2021387906ac3f5b3814cd90267b64f02e@139.180.135.153:30303,enode://297167bcccf50a94fd2b9a1f1a372228526a95066030295ee8842e0bcaf798da751974a8b08caa9fb9764d2b2d50e64ec5a90a8b942a2a9d6b1db9d5995de3ff@139.180.143.152:30303,enode://95fc2505216570bce1f75de47289d5cdcd35eba61a3e2d89fe1690dbdc60e22d8a12fe12c54c77d87f7b56035aa9ef2021387906ac3f5b3814cd90267b64f02e@45.77.244.187:30303,enode://95fc2505216570bce1f75de47289d5cdcd35eba61a3e2d89fe1690dbdc60e22d8a12fe12c54c77d87f7b56035aa9ef2021387906ac3f5b3814cd90267b64f02e@45.76.153.161:30303,enode://3a914391c6f6ff0af000b5e614df1074c2a2db2575d6c4d02c3d96bc00ed52ba4281df45b065cbc253c2a02d0bc34272520e772ee9880b28ef107e91b86166d8@109.169.55.28:30303,enode://2953c5ea2a2829a242123e14538b137be858602da1e68beb8c7f7ec797d9d42cf4f0c76b62e98c4d5578e0eeefa42a501fdfec7079e8db206d89d037a09cde3a@109.169.55.28:30304,enode://80dee88ded07fcb0ed1f4a9db4c60c0bd0592d44656571822b479047653b0c30d84e68c83057db048d2120cd7d504fd6a70a89161c31aaf98e65cfba4a77a528@109.169.55.28:30305,enode://7e495d7e1be1fc47d62f8510249435fb3b6f279880704896cbd78e05027298ed133979a388cc0ecf51fb014a8c68438b45e4a2d82ab1ed9cf86a31e87fed32c5@78.129.229.96:30303,enode://02c155fe4b34293b50d70a10889a57d9f2434fefdf142c6d24d73df9ccff19994cb243b55e87a9349a8f87d827363f74b0b40f44d96925aaaedadb456e38c0c0@78.129.229.96:30304,enode://bc2a722d080b008132ef395763d87f491fb6adc34b5d34b698cfeeadced2d4468ee5dc09f39956b4686c88af9bf26e39bc050feb52c0976238645a0343e6049f@78.129.229.96:30305,enode://560113969268e30a430991e36fcb1a6ea8a2bc16f23bc1dabffd6f8c17649237d58d8cf554e9ce882184abdc9b3a607230123e2bcf819d4ed01ec02acee1c4c2@78.159.100.155:30303,enode://a86d3268c060323572bfeb6df76081e4668ec44cc60ff028c1685a9a683c5d6497c987b5dfade81323d08875066218a1877484396e11f400ce1c2c9bd343c935@78.159.100.155:30304,enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@127.0.0.1:30301,enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@78.129.229.96:30301,enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@5.152.223.199:30301" --syncmode "full" --datadir ./nodes/1 --networkid "${networkid}" --port 30303 --rpc --rpccorsdomain "*" --ws --wsaddr="0.0.0.0" --wsorigins "*" --wsport 8555 --rpcaddr 0.0.0.0 --rpcport 8545 --rpcvhosts "*" --unlock "${wallet1}" --password ./.pwd --mine --gasprice "${GASPRICE}" --targetgaslimit "420000000" --verbosity ${VERBOSITY} --rpcapi admin,db,eth,debug,miner,net,shh,txpool,personal,web3,XDPoS --ethstats "XinFin-MasterNode-01:xinfin_xdpos_hybrid_network_stats@stats.xinfin.network:3000" & +child_proc="$child_proc $!" +${PROJECT_DIR}/build/bin/$Bin_NAME --bootnodes "enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@78.129.229.96:30301,enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@5.152.223.199:30301,enode://d757f1a21828c9c426e26df39176053302209e3dd05e7a6c0e0eae57739e233c0fa970c9b98e010cee4817e6233c3ad3eef461cef3e731c485ed4bc08de7d0ac@37.58.56.228:30303,enode://d757f1a21828c9c426e26df39176053302209e3dd05e7a6c0e0eae57739e233c0fa970c9b98e010cee4817e6233c3ad3eef461cef3e731c485ed4bc08de7d0ac@37.58.56.228:30304,enode://ef4d512152b875de3fc3990e3e124ae55adea35c49c5df40d0c4bea9327116fcfba70b920a7c164e08f425876025cbcf2519ad5238e57c10ea205e7897926a35@45.76.113.250:30303,enode://bcda483330dc0845f521ad611bcdc8cb147a7a8008c022dba20da2ab52ae46fd6d04f3cb9b7da4e94cf81d2c61065e008a13b5f05f3b69795b0dbdd2a14bb48d@209.222.30.63:30303,enode://2edc16258f6f2e18b105362df5af89889b5dbb7b098f266c39ba1b6200e9dfa76b8fd3bc0cdefce089d9e285772ae69d549e6807b23341ac975d0c085b936f1b@139.180.131.100:30303,enode://95fc2505216570bce1f75de47289d5cdcd35eba61a3e2d89fe1690dbdc60e22d8a12fe12c54c77d87f7b56035aa9ef2021387906ac3f5b3814cd90267b64f02e@149.28.135.114:30303,enode://5fcb6aa25e9e4184f278f842581507e4180851e861a59e1a02cf62f2927ee073ba921b5cba10301043f41ed494860f0ccc7508f1058c25f8ebcd56e9f8da018b@149.28.140.203:30303,enode://3a792327abf09be1b78db697c33de653d21bb702eaf6e292899c31a59f0b9535753a34d41f088416bc3f90d25c35ecd6b79d0015c36cf10f9a27c89ecd1f7fa4@149.28.140.232:30303,enode://26def7887241597a30314a77b1a32f156bdcc92eee198b086ae7c4dc26b986a9be6d078b09e93a1f963b083885020e1edfbf6b053dcebbdd090f6dfb289b59f0@149.28.142.223:30303,enode://f35e4ff8bfca2b37297dae0524146c2e4ef20c5d95be48cabe0072334bcf77a9385bad27b9630ee5ba4de451076c2123ad06113f21e3f78387a0e6fde7ec1b0b@45.77.183.160:30303,enode://44f8256e0285d1a94a73187116772522dcf53ef3affcac171cf01ffb00ec613ba1960f1309cc9353207a8f1211e645016c6e30b9669190aac8386c78545b84b1@198.13.34.190:30303,enode://95fc2505216570bce1f75de47289d5cdcd35eba61a3e2d89fe1690dbdc60e22d8a12fe12c54c77d87f7b56035aa9ef2021387906ac3f5b3814cd90267b64f02e@139.180.218.68:30303,enode://5701cfd1d03a04a3a17076e50983397ff634ff7f00693f62f6d4d94107796b74b8e10b8ad6efbf1499ae0c6263e84594d30986c79242a37b1c9d27cddb57cdc5@207.148.71.42:30303,enode://b0bd514f1b0892ab26c1d8be59510406f7d700c74cd3cd03d3f8d0fc21b784bb2fb7bde3afacf435928ca9506decf73bd15af5a64bd5dd113b26fc91605ce397@45.77.181.79:30303,enode://95fc2505216570bce1f75de47289d5cdcd35eba61a3e2d89fe1690dbdc60e22d8a12fe12c54c77d87f7b56035aa9ef2021387906ac3f5b3814cd90267b64f02e@139.180.135.153:30303,enode://297167bcccf50a94fd2b9a1f1a372228526a95066030295ee8842e0bcaf798da751974a8b08caa9fb9764d2b2d50e64ec5a90a8b942a2a9d6b1db9d5995de3ff@139.180.143.152:30303,enode://95fc2505216570bce1f75de47289d5cdcd35eba61a3e2d89fe1690dbdc60e22d8a12fe12c54c77d87f7b56035aa9ef2021387906ac3f5b3814cd90267b64f02e@45.77.244.187:30303,enode://95fc2505216570bce1f75de47289d5cdcd35eba61a3e2d89fe1690dbdc60e22d8a12fe12c54c77d87f7b56035aa9ef2021387906ac3f5b3814cd90267b64f02e@45.76.153.161:30303,enode://3a914391c6f6ff0af000b5e614df1074c2a2db2575d6c4d02c3d96bc00ed52ba4281df45b065cbc253c2a02d0bc34272520e772ee9880b28ef107e91b86166d8@109.169.55.28:30303,enode://2953c5ea2a2829a242123e14538b137be858602da1e68beb8c7f7ec797d9d42cf4f0c76b62e98c4d5578e0eeefa42a501fdfec7079e8db206d89d037a09cde3a@109.169.55.28:30304,enode://80dee88ded07fcb0ed1f4a9db4c60c0bd0592d44656571822b479047653b0c30d84e68c83057db048d2120cd7d504fd6a70a89161c31aaf98e65cfba4a77a528@109.169.55.28:30305,enode://7e495d7e1be1fc47d62f8510249435fb3b6f279880704896cbd78e05027298ed133979a388cc0ecf51fb014a8c68438b45e4a2d82ab1ed9cf86a31e87fed32c5@78.129.229.96:30303,enode://02c155fe4b34293b50d70a10889a57d9f2434fefdf142c6d24d73df9ccff19994cb243b55e87a9349a8f87d827363f74b0b40f44d96925aaaedadb456e38c0c0@78.129.229.96:30304,enode://bc2a722d080b008132ef395763d87f491fb6adc34b5d34b698cfeeadced2d4468ee5dc09f39956b4686c88af9bf26e39bc050feb52c0976238645a0343e6049f@78.129.229.96:30305,enode://560113969268e30a430991e36fcb1a6ea8a2bc16f23bc1dabffd6f8c17649237d58d8cf554e9ce882184abdc9b3a607230123e2bcf819d4ed01ec02acee1c4c2@78.159.100.155:30303,enode://a86d3268c060323572bfeb6df76081e4668ec44cc60ff028c1685a9a683c5d6497c987b5dfade81323d08875066218a1877484396e11f400ce1c2c9bd343c935@78.159.100.155:30304,enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@127.0.0.1:30301,enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@78.129.229.96:30301,enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@5.152.223.199:30301" --syncmode "full" --datadir ./nodes/2 --networkid "${networkid}" --port 30304 --rpc --rpccorsdomain "*" --ws --wsaddr="0.0.0.0" --wsorigins "*" --wsport 8556 --rpcaddr 0.0.0.0 --rpcport 8546 --rpcvhosts "*" --unlock "${wallet2}" --password ./.pwd --mine --gasprice "${GASPRICE}" --targetgaslimit "420000000" --verbosity ${VERBOSITY} --rpcapi admin,db,eth,debug,miner,net,shh,txpool,personal,web3,XDPoS --ethstats "XinFin-MasterNode-02:xinfin_xdpos_hybrid_network_stats@stats.xinfin.network:3000" & +child_proc="$child_proc $!" +${PROJECT_DIR}/build/bin/$Bin_NAME --bootnodes "enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@78.129.229.96:30301,enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@5.152.223.199:30301,enode://d757f1a21828c9c426e26df39176053302209e3dd05e7a6c0e0eae57739e233c0fa970c9b98e010cee4817e6233c3ad3eef461cef3e731c485ed4bc08de7d0ac@37.58.56.228:30303,enode://d757f1a21828c9c426e26df39176053302209e3dd05e7a6c0e0eae57739e233c0fa970c9b98e010cee4817e6233c3ad3eef461cef3e731c485ed4bc08de7d0ac@37.58.56.228:30304,enode://ef4d512152b875de3fc3990e3e124ae55adea35c49c5df40d0c4bea9327116fcfba70b920a7c164e08f425876025cbcf2519ad5238e57c10ea205e7897926a35@45.76.113.250:30303,enode://bcda483330dc0845f521ad611bcdc8cb147a7a8008c022dba20da2ab52ae46fd6d04f3cb9b7da4e94cf81d2c61065e008a13b5f05f3b69795b0dbdd2a14bb48d@209.222.30.63:30303,enode://2edc16258f6f2e18b105362df5af89889b5dbb7b098f266c39ba1b6200e9dfa76b8fd3bc0cdefce089d9e285772ae69d549e6807b23341ac975d0c085b936f1b@139.180.131.100:30303,enode://95fc2505216570bce1f75de47289d5cdcd35eba61a3e2d89fe1690dbdc60e22d8a12fe12c54c77d87f7b56035aa9ef2021387906ac3f5b3814cd90267b64f02e@149.28.135.114:30303,enode://5fcb6aa25e9e4184f278f842581507e4180851e861a59e1a02cf62f2927ee073ba921b5cba10301043f41ed494860f0ccc7508f1058c25f8ebcd56e9f8da018b@149.28.140.203:30303,enode://3a792327abf09be1b78db697c33de653d21bb702eaf6e292899c31a59f0b9535753a34d41f088416bc3f90d25c35ecd6b79d0015c36cf10f9a27c89ecd1f7fa4@149.28.140.232:30303,enode://26def7887241597a30314a77b1a32f156bdcc92eee198b086ae7c4dc26b986a9be6d078b09e93a1f963b083885020e1edfbf6b053dcebbdd090f6dfb289b59f0@149.28.142.223:30303,enode://f35e4ff8bfca2b37297dae0524146c2e4ef20c5d95be48cabe0072334bcf77a9385bad27b9630ee5ba4de451076c2123ad06113f21e3f78387a0e6fde7ec1b0b@45.77.183.160:30303,enode://44f8256e0285d1a94a73187116772522dcf53ef3affcac171cf01ffb00ec613ba1960f1309cc9353207a8f1211e645016c6e30b9669190aac8386c78545b84b1@198.13.34.190:30303,enode://95fc2505216570bce1f75de47289d5cdcd35eba61a3e2d89fe1690dbdc60e22d8a12fe12c54c77d87f7b56035aa9ef2021387906ac3f5b3814cd90267b64f02e@139.180.218.68:30303,enode://5701cfd1d03a04a3a17076e50983397ff634ff7f00693f62f6d4d94107796b74b8e10b8ad6efbf1499ae0c6263e84594d30986c79242a37b1c9d27cddb57cdc5@207.148.71.42:30303,enode://b0bd514f1b0892ab26c1d8be59510406f7d700c74cd3cd03d3f8d0fc21b784bb2fb7bde3afacf435928ca9506decf73bd15af5a64bd5dd113b26fc91605ce397@45.77.181.79:30303,enode://95fc2505216570bce1f75de47289d5cdcd35eba61a3e2d89fe1690dbdc60e22d8a12fe12c54c77d87f7b56035aa9ef2021387906ac3f5b3814cd90267b64f02e@139.180.135.153:30303,enode://297167bcccf50a94fd2b9a1f1a372228526a95066030295ee8842e0bcaf798da751974a8b08caa9fb9764d2b2d50e64ec5a90a8b942a2a9d6b1db9d5995de3ff@139.180.143.152:30303,enode://95fc2505216570bce1f75de47289d5cdcd35eba61a3e2d89fe1690dbdc60e22d8a12fe12c54c77d87f7b56035aa9ef2021387906ac3f5b3814cd90267b64f02e@45.77.244.187:30303,enode://95fc2505216570bce1f75de47289d5cdcd35eba61a3e2d89fe1690dbdc60e22d8a12fe12c54c77d87f7b56035aa9ef2021387906ac3f5b3814cd90267b64f02e@45.76.153.161:30303,enode://3a914391c6f6ff0af000b5e614df1074c2a2db2575d6c4d02c3d96bc00ed52ba4281df45b065cbc253c2a02d0bc34272520e772ee9880b28ef107e91b86166d8@109.169.55.28:30303,enode://2953c5ea2a2829a242123e14538b137be858602da1e68beb8c7f7ec797d9d42cf4f0c76b62e98c4d5578e0eeefa42a501fdfec7079e8db206d89d037a09cde3a@109.169.55.28:30304,enode://80dee88ded07fcb0ed1f4a9db4c60c0bd0592d44656571822b479047653b0c30d84e68c83057db048d2120cd7d504fd6a70a89161c31aaf98e65cfba4a77a528@109.169.55.28:30305,enode://7e495d7e1be1fc47d62f8510249435fb3b6f279880704896cbd78e05027298ed133979a388cc0ecf51fb014a8c68438b45e4a2d82ab1ed9cf86a31e87fed32c5@78.129.229.96:30303,enode://02c155fe4b34293b50d70a10889a57d9f2434fefdf142c6d24d73df9ccff19994cb243b55e87a9349a8f87d827363f74b0b40f44d96925aaaedadb456e38c0c0@78.129.229.96:30304,enode://bc2a722d080b008132ef395763d87f491fb6adc34b5d34b698cfeeadced2d4468ee5dc09f39956b4686c88af9bf26e39bc050feb52c0976238645a0343e6049f@78.129.229.96:30305,enode://560113969268e30a430991e36fcb1a6ea8a2bc16f23bc1dabffd6f8c17649237d58d8cf554e9ce882184abdc9b3a607230123e2bcf819d4ed01ec02acee1c4c2@78.159.100.155:30303,enode://a86d3268c060323572bfeb6df76081e4668ec44cc60ff028c1685a9a683c5d6497c987b5dfade81323d08875066218a1877484396e11f400ce1c2c9bd343c935@78.159.100.155:30304,enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@127.0.0.1:30301,enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@78.129.229.96:30301,enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@5.152.223.199:30301" --syncmode "full" --datadir ./nodes/3 --networkid "${networkid}" --port 30305 --rpc --rpccorsdomain "*" --ws --wsaddr="0.0.0.0" --wsorigins "*" --wsport 8557 --rpcaddr 0.0.0.0 --rpcport 8547 --rpcvhosts "*" --unlock "${wallet3}" --password ./.pwd --mine --gasprice "${GASPRICE}" --targetgaslimit "420000000" --verbosity ${VERBOSITY} --rpcapi admin,db,eth,debug,miner,net,shh,txpool,personal,web3,XDPoS --ethstats "XinFin-MasterNode-03:xinfin_xdpos_hybrid_network_stats@stats.xinfin.network:3000" +``` +{% endcode %} + + + +**Launch the setup script** + +``` + bash run.sh +``` + + + + + + + + + diff --git a/subnets/deploy-a-subnet.md b/subnets/deploy-a-subnet.md new file mode 100644 index 00000000..d7910e15 --- /dev/null +++ b/subnets/deploy-a-subnet.md @@ -0,0 +1,3 @@ +# Deploy a subnet + +#### diff --git a/subnets/requirements.md b/subnets/requirements.md new file mode 100644 index 00000000..c4a55bf4 --- /dev/null +++ b/subnets/requirements.md @@ -0,0 +1,2 @@ +# Requirements + From e978e60c7a241e7721a88ff53977a7902d5a046c Mon Sep 17 00:00:00 2001 From: Salomon Morales Date: Sun, 12 Feb 2023 21:51:43 +0000 Subject: [PATCH 012/115] GITBOOK-142: No subject --- .gitbook/assets/Node1.JPG | Bin 0 -> 116663 bytes .gitbook/assets/node1.JPG | Bin 0 -> 88371 bytes .gitbook/assets/node2.JPG | Bin 0 -> 77706 bytes .gitbook/assets/node3.JPG | Bin 0 -> 106036 bytes .gitbook/assets/node4.JPG | Bin 0 -> 33755 bytes .gitbook/assets/node5.JPG | Bin 0 -> 31910 bytes SUMMARY.md | 1 + how-to-stake-an-xdc-masternode.md | 38 ++++++++++++++++++++++++++++++ 8 files changed, 39 insertions(+) create mode 100644 .gitbook/assets/Node1.JPG create mode 100644 .gitbook/assets/node1.JPG create mode 100644 .gitbook/assets/node2.JPG create mode 100644 .gitbook/assets/node3.JPG create mode 100644 .gitbook/assets/node4.JPG create mode 100644 .gitbook/assets/node5.JPG create mode 100644 how-to-stake-an-xdc-masternode.md diff --git a/.gitbook/assets/Node1.JPG b/.gitbook/assets/Node1.JPG new file mode 100644 index 0000000000000000000000000000000000000000..2b425dfc360baae0089d351adafda59d0bb34e95 GIT binary patch literal 116663 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 literal 0 HcmV?d00001 diff --git a/.gitbook/assets/node1.JPG b/.gitbook/assets/node1.JPG new file mode 100644 index 0000000000000000000000000000000000000000..170850c6720632eff8021da0479c8f0deef34fdb GIT binary patch literal 88371 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 literal 0 HcmV?d00001 diff --git a/.gitbook/assets/node2.JPG b/.gitbook/assets/node2.JPG new file mode 100644 index 0000000000000000000000000000000000000000..4abb0c075cc41b7aa583c765dc20af26c7aab49e GIT binary patch literal 77706 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 z

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 M(|>XYV4My8Kl;`*-~a#s literal 0 HcmV?d00001 diff --git a/.gitbook/assets/node3.JPG b/.gitbook/assets/node3.JPG new file mode 100644 index 0000000000000000000000000000000000000000..11b820e0e66879fd05548ec9cb3d35ec7884cea6 GIT binary patch literal 106036 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%0A3CLS%0K|hvy@SyygA{BF%zM0;?6f1N{whrFQVB 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 Dvj+yq literal 0 HcmV?d00001 diff --git a/.gitbook/assets/node4.JPG b/.gitbook/assets/node4.JPG new file mode 100644 index 0000000000000000000000000000000000000000..cf4b9b594b27c0735246c3dca92968989a58b5e5 GIT binary patch literal 33755 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 NO8%MG2m5OL{{UX+-!}jN literal 0 HcmV?d00001 diff --git a/.gitbook/assets/node5.JPG b/.gitbook/assets/node5.JPG new file mode 100644 index 0000000000000000000000000000000000000000..7287bcc10fc8e36b8a7cec1f5ea0144edc30ce7c GIT binary patch literal 31910 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 literal 0 HcmV?d00001 diff --git a/SUMMARY.md b/SUMMARY.md index 1b7b499c..e11c301d 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -76,6 +76,7 @@ * [Full Node (Docker version)](run-a-node/masternode/full-node.md) * [One-Click-Installer Masternode (Windows OS)](run-a-node/masternode/standby-node.md) * [One-Click-Installer Masternode (macOS)](run-a-node/masternode/one-click-installer-masternode-macos.md) +* [How to Stake an XDC Masternode](how-to-stake-an-xdc-masternode.md) * [Subnets](subnets/README.md) * [Requirements](subnets/requirements.md) * [Deploy a subnet](subnets/deploy-a-subnet.md) diff --git a/how-to-stake-an-xdc-masternode.md b/how-to-stake-an-xdc-masternode.md new file mode 100644 index 00000000..a5cd0b65 --- /dev/null +++ b/how-to-stake-an-xdc-masternode.md @@ -0,0 +1,38 @@ +--- +description: >- + Note: You do not need 10,000,000 XDC to run a node for RPC or just querying + live data from the chain. +--- + +# How to Stake an XDC Masternode + +As an XDC masternode candidate, you are going to need the following: + +1. XDCPay or XinFin web wallet or a hardware wallet (Trezor ) +2. 10,000,000 XDC (mainnet) or test XDC (Apothem testnet) +3. Your coinbase address (you can log in to your node and retrieve it from there) + +Follow these steps to stake your node. + +{% embed url="https://youtu.be/ilhZRBbyfU8" %} + +1. Go to [https://www.xinfin.network/#masternode](https://www.xinfin.network/#masternode) and switch to either mainnet or Apothem: +2. Click on login + +

+3. You will be presented with the following options to log in. We will be using XDCPay for this tutorial: + +
+ +4. Once logged in, click on "Become a candidate" and you will see the following screen: + +

If you dont have your KYC document ready. You can download a copy via the highlighted links on this image.

+ +5. Once the file has been uploaded, you will see that KYC shows "True." At this point, your node is now staked with 10,000,000 XDC. + +
+ +6. You can also verify the transaction if you open your wallet, click on "Transactions" and click on the "Propose" event. +7. + +
From 50d4438e5671efc8289a5cd82fb1ba76b6124510 Mon Sep 17 00:00:00 2001 From: Salomon Morales Date: Sun, 12 Feb 2023 22:05:20 +0000 Subject: [PATCH 013/115] GITBOOK-143: No subject --- .gitbook/assets/node6.JPG | Bin 0 -> 58280 bytes .gitbook/assets/node7.JPG | Bin 0 -> 78844 bytes .gitbook/assets/node8.JPG | Bin 0 -> 31574 bytes how-to-stake-an-xdc-masternode.md | 17 ++++++++++++++--- 4 files changed, 14 insertions(+), 3 deletions(-) create mode 100644 .gitbook/assets/node6.JPG create mode 100644 .gitbook/assets/node7.JPG create mode 100644 .gitbook/assets/node8.JPG diff --git a/.gitbook/assets/node6.JPG b/.gitbook/assets/node6.JPG new file mode 100644 index 0000000000000000000000000000000000000000..1552507e8557065f397e7f4c5853d789aa7249c0 GIT binary patch literal 58280 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

kI4?!pXrm0TR%9FmN7#X1$ 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 literal 0 HcmV?d00001 diff --git a/.gitbook/assets/node7.JPG b/.gitbook/assets/node7.JPG new file mode 100644 index 0000000000000000000000000000000000000000..04eef9bd94ab5d0191811982577f9abc64295386 GIT binary patch literal 78844 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

If you dont have your KYC document ready. You can download a copy via the highlighted links on this image.

-5. Once the file has been uploaded, you will see that KYC shows "True." At this point, your node is now staked with 10,000,000 XDC. +5. Once the file has been uploaded, you will see that KYC shows "True."
-6. You can also verify the transaction if you open your wallet, click on "Transactions" and click on the "Propose" event. +6. Click on "Become a candidate" and input your coinbase address from your node and hit apply. 7. -
+
+8. Once you click apply, your wallet will prompt you to sign the transaction. Click "Confirm" on your wallet. +9. + +
+10. Once the transaction executes successfully, you will get a notification at the bottom right side of the screen as shown below. +11. + +
+12. You can also verify the transaction if you open your wallet, click on "Transactions" and click on the "Propose" event. + +
From 23b1b47d89a448524a98082bc0b0ca4052fd0557 Mon Sep 17 00:00:00 2001 From: Salomon Morales Date: Sun, 12 Feb 2023 22:06:52 +0000 Subject: [PATCH 014/115] GITBOOK-144: No subject --- how-to-stake-an-xdc-masternode.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/how-to-stake-an-xdc-masternode.md b/how-to-stake-an-xdc-masternode.md index fd18b4c5..3379c942 100644 --- a/how-to-stake-an-xdc-masternode.md +++ b/how-to-stake-an-xdc-masternode.md @@ -33,17 +33,17 @@ Follow these steps to stake your node.
6. Click on "Become a candidate" and input your coinbase address from your node and hit apply. -7. -
-8. Once you click apply, your wallet will prompt you to sign the transaction. Click "Confirm" on your wallet. -9. +
-
-10. Once the transaction executes successfully, you will get a notification at the bottom right side of the screen as shown below. -11. +7. Once you click apply, your wallet will prompt you to sign the transaction. Click "Confirm" on your wallet. -
-12. You can also verify the transaction if you open your wallet, click on "Transactions" and click on the "Propose" event. +
+ +8. Once the transaction executes successfully, you will get a notification at the bottom right side of the screen as shown below. + +
+ +9. You can also verify the transaction if you open your wallet, click on "Transactions" and click on the "Propose" event.
From 17ef18b057dd0a37d3a184de76c7c0ec402d1165 Mon Sep 17 00:00:00 2001 From: Quincy Jones Date: Wed, 15 Feb 2023 22:23:04 +0000 Subject: [PATCH 015/115] GITBOOK-146: No subject --- subnets/README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/subnets/README.md b/subnets/README.md index 1eb666f7..7cf8956b 100644 --- a/subnets/README.md +++ b/subnets/README.md @@ -15,7 +15,9 @@ Here’s how you built a XDC01 blockchain network, in this repository you will g ## Description -XDC subnets allowf for applications to run local along side the public main network +XDC subnets allow for private applications to run locally along side the public main network + +This allows for Developers to store data privately off chain on thier own local networks to manage user data privately From 52a3593d86f320fdc9f12d4c64cfa69c70120822 Mon Sep 17 00:00:00 2001 From: Quincy Jones Date: Wed, 15 Feb 2023 22:28:38 +0000 Subject: [PATCH 016/115] GITBOOK-147: No subject --- subnets/README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/subnets/README.md b/subnets/README.md index 7cf8956b..0f590c23 100644 --- a/subnets/README.md +++ b/subnets/README.md @@ -17,7 +17,9 @@ Here’s how you built a XDC01 blockchain network, in this repository you will g XDC subnets allow for private applications to run locally along side the public main network -This allows for Developers to store data privately off chain on thier own local networks to manage user data privately +This allows for Developers to store data privately off chain on thier own local networks to manage users data privately + +subnets can allow for applications to abide by the compliance & regulations needed when handeling sensitive userdata while still leveraging the main network for value transfers and public data transactions From 8d41b33be4c094b098e67f3869f4d7fc0e0de8d9 Mon Sep 17 00:00:00 2001 From: Quincy Jones Date: Wed, 15 Feb 2023 23:13:45 +0000 Subject: [PATCH 017/115] GITBOOK-149: No subject --- subnets/README.md | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/subnets/README.md b/subnets/README.md index 0f590c23..9d3b0987 100644 --- a/subnets/README.md +++ b/subnets/README.md @@ -15,16 +15,6 @@ Here’s how you built a XDC01 blockchain network, in this repository you will g ## Description -XDC subnets allow for private applications to run locally along side the public main network - -This allows for Developers to store data privately off chain on thier own local networks to manage users data privately - -subnets can allow for applications to abide by the compliance & regulations needed when handeling sensitive userdata while still leveraging the main network for value transfers and public data transactions - - - - - From 84ad49d880b596a7bacc2b31b092082db5112177 Mon Sep 17 00:00:00 2001 From: Quincy Jones Date: Thu, 16 Feb 2023 00:38:23 +0000 Subject: [PATCH 018/115] GITBOOK-150: No subject --- SUMMARY.md | 3 +- subnets/README.md | 152 +++++++------------------------------ subnets/deploy-a-subnet.md | 3 - subnets/requirements.md | 2 - subnets/xdc-relayer.md | 100 ++++++++++++++++++++++++ 5 files changed, 129 insertions(+), 131 deletions(-) delete mode 100644 subnets/deploy-a-subnet.md delete mode 100644 subnets/requirements.md create mode 100644 subnets/xdc-relayer.md diff --git a/SUMMARY.md b/SUMMARY.md index e11c301d..3139ea4b 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -78,8 +78,7 @@ * [One-Click-Installer Masternode (macOS)](run-a-node/masternode/one-click-installer-masternode-macos.md) * [How to Stake an XDC Masternode](how-to-stake-an-xdc-masternode.md) * [Subnets](subnets/README.md) - * [Requirements](subnets/requirements.md) - * [Deploy a subnet](subnets/deploy-a-subnet.md) + * [XDC Relayer](subnets/xdc-relayer.md) ## Learn diff --git a/subnets/README.md b/subnets/README.md index 9d3b0987..e638f1c1 100644 --- a/subnets/README.md +++ b/subnets/README.md @@ -7,156 +7,60 @@ description: >- # Subnets -### XinFin DPoS -#### Build a XDC01 DPoS Based BlockChain network in few steps...! - -Here’s how you built a XDC01 blockchain network, in this repository you will get a step-by-step guidance on setting up a hassle free XDC01 blockchain without knowing blockchain knowledge. ## Description +## XDPoSChain + +### XinFin Hybrid Blockchain +XinFin Hybrid Blockchain is an Enterprise ready Blockchain for global trade and finance -**Prerequisite** +Visit: [XinFin.org](https://xinfin.org/) Contribute: [Developer Docs](https://docs.xinfin.org/) -**Operating System**: Ubuntu 16.04 64-bit or higher +### XinFin Network XDPoS is community driven project to achieve the following -**Hardware**: +* XinFin DPOS (XDPoS) consensus that selects 108 set of Masternodes to achieve a high throughput Energy efficient consensus with instant block finality +* KYC Enforcement on Masternodes for Enterprise Adoption and compliance +* Ability to port/relay limited set of data and transactions from privacy channels to public channel +* Interoperability between applications hosted on Private Blockchains like Corda, Hyperledger, Quorum(JP Morgan) using relayers to XinFin Network +* Customer Centric and consortium driven Governance to equally benefit the validators as well as providing comfort for large scale enterprise applications to be hosted on the Network. This achieves + * Rapid Upgradability + * DApps Standardisation for rapid commercialisation + * Compliance with major global jurisdictions. -| Hardware | Minimum | Desired | -| ------------ | ------- | ------- | -| **CPU's**: | 2 | 4 | -| **Memory**: | 4 GB | 16 GB | -| **Storage**: | 100 GB | 500 GB | - -### Network Ports +#### KYC for masternodes -Following network ports need to be open for the nodes to communicate - -| Port | Type | Definition | -| :----------: | :-----: | ---------- | -| 30301-3030\* | TCP/UDP | XDC Enode | -| 8545-854\* | TCP | RPC | -| 9545-954\* | TCP | WebSocket | +**OVERVIEW** -**Delete Old Data** +To add a layer of KYC for masternodes in the current system and a sense of ownership amongst the masternodes hence tying such a cluster of masternodes to physical entity which can held accountable for its actions. -``` - bash reset.sh -``` - -## Set up script - -For managing a multi server node set up you will need to modify Local\_DPoS\_Stup/run.sh file to allow for the encode bootkey provided by each othe bootnodes and list them in order separated by a comma consisting of these attributes +**Design** - 1\. local the run.sh script to modify deployment details +We established a bidirectional connection between a candidate and its owner inorder to retrieve a candidate belonging to a specific owner & vice versa. -```bash -cd Local_DPoS_Stup/run.sh -``` +All the masternodes are recognized by the KYC of their owners and hence are considered as a single verified entity ( for eg. while voting for invalid KYC, only one vote is considered per such cluster ) -2. add each Enode bootkey broadcasting on port: 3030\* each on a different port acending from port 30301 -3. assign the modifires to the suffix of the command +The contract is very strict in handing out penalty for invalid KYC, it results loss of all funds invested in all of its candidates. -```bash -${PROJECT_DIR}/build/bin/$Bin_NAME --bootnodes -"snode://" - --syncmode "full" - --datadir ./nodes/1 - --networkid "${networkid}" - --port 30303 - --rpc - --rpccorsdomain "*" - --ws - --wsaddr="0.0.0.0" - --wsorigins "*" - --wsport 8555 - --rpcaddr 0.0.0.0 - --rpcport 8545 - --rpcvhosts "*" - --unlock "${wallet1}" - --password ./.pwd - --mine - --gasprice "${GASPRICE}" - --targetgaslimit "420000000" - --verbosity ${VERBOSITY} - --rpcapi admin,db,eth,debug,miner,net,shh,txpool,personal,web3,XDPoS - --ethstats "XinFin-MasterNode-01:xinfin_xdpos_hybrid_network_stats@stats.xinfin.network:3000" & +For eg. say A proposes condidates B,C,D by paying for its proposal cost. If at a later stage if some predecided amount of owners ( investors ) vote that a KYC for a A is invalid then A & all of its candidates (B,C,D) will lose their position & all their funds will be lost ( will remain with contract wallet ). -``` +#### For developers -## Full command +**Continues integration & delivery** -{% code overflow="wrap" %} -```bash -${PROJECT_DIR}/build/bin/$Bin_NAME --bootnodes "enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@78.129.229.96:30301,enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@5.152.223.199:30301,enode://d757f1a21828c9c426e26df39176053302209e3dd05e7a6c0e0eae57739e233c0fa970c9b98e010cee4817e6233c3ad3eef461cef3e731c485ed4bc08de7d0ac@37.58.56.228:30303 --syncmode "full" --datadir ./nodes/1 --networkid "${networkid}" --port 30303 --rpc --rpccorsdomain "*" --ws --wsaddr="0.0.0.0" --wsorigins "*" --wsport 8555 --rpcaddr 0.0.0.0 --rpcport 8545 --rpcvhosts "*" --unlock "${wallet1}" --password ./.pwd --mine --gasprice "${GASPRICE}" --targetgaslimit "420000000" --verbosity ${VERBOSITY} --rpcapi admin,db,eth,debug,miner,net,shh,txpool,personal,web3,XDPoS --ethstats "XinFin-MasterNode-01:xinfin_xdpos_hybrid_network_stats@stats.xinfin.network:3000" & -``` -{% endcode %} +See [https://github.com/XinFinOrg/XDPoSChain/tree/dev-upgrade/cicd](https://github.com/XinFinOrg/XDPoSChain/tree/dev-upgrade/cicd) -## run.sh +#### To contribute -{% code lineNumbers="true" %} -```bash -// Local_DPoS_Stup/run.sh -#!/bin/bash -_interupt() { - echo "Shutdown $child_proc" - kill -TERM $child_proc - exit -} +Simple create a pull request along with proper reasoning, we'll get back to you. -trap _interupt INT TERM +Our Channels : [Telegram Developer Group](https://t.me/XinFinDevelopers) or [Public Slack Group](https://launchpass.com/xinfin-public)33 -touch .pwd -export $(cat .env | xargs) -Bin_NAME=XDC -WORK_DIR=$PWD -PROJECT_DIR="/root/XinFin/XDPoSChain" -cd $PROJECT_DIR && make XDC -cd $WORK_DIR - -if [ ! -d ./nodes/1/$Bin_NAME/chaindata ] -then - wallet1=$(${PROJECT_DIR}/build/bin/$Bin_NAME account import --password .pwd --datadir ./nodes/1 <(echo ${PRIVATE_KEY_1}) | awk -v FS="({|})" '{print $2}') - wallet2=$(${PROJECT_DIR}/build/bin/$Bin_NAME account import --password .pwd --datadir ./nodes/2 <(echo ${PRIVATE_KEY_2}) | awk -v FS="({|})" '{print $2}') - wallet3=$(${PROJECT_DIR}/build/bin/$Bin_NAME account import --password .pwd --datadir ./nodes/3 <(echo ${PRIVATE_KEY_3}) | awk -v FS="({|})" '{print $2}') - ${PROJECT_DIR}/build/bin/$Bin_NAME --datadir ./nodes/1 init ./genesis/genesis.json - ${PROJECT_DIR}/build/bin/$Bin_NAME --datadir ./nodes/2 init ./genesis/genesis.json - ${PROJECT_DIR}/build/bin/$Bin_NAME --datadir ./nodes/3 init ./genesis/genesis.json -else - wallet1=$(${PROJECT_DIR}/build/bin/$Bin_NAME account list --datadir ./nodes/1 | head -n 1 | awk -v FS="({|})" '{print $2}') - wallet2=$(${PROJECT_DIR}/build/bin/$Bin_NAME account list --datadir ./nodes/2 | head -n 1 | awk -v FS="({|})" '{print $2}') - wallet3=$(${PROJECT_DIR}/build/bin/$Bin_NAME account list --datadir ./nodes/3 | head -n 1 | awk -v FS="({|})" '{print $2}') -fi - -VERBOSITY=3 -GASPRICE="1" -networkid=50 - - -echo Starting the bootnode ... -${PROJECT_DIR}/build/bin/bootnode -nodekey ./bootnode.key --addr 0.0.0.0:30301 & -child_proc=$! - -echo Starting the nodes ... -${PROJECT_DIR}/build/bin/$Bin_NAME --bootnodes "enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@78.129.229.96:30301,enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@5.152.223.199:30301,enode://d757f1a21828c9c426e26df39176053302209e3dd05e7a6c0e0eae57739e233c0fa970c9b98e010cee4817e6233c3ad3eef461cef3e731c485ed4bc08de7d0ac@37.58.56.228:30303,enode://d757f1a21828c9c426e26df39176053302209e3dd05e7a6c0e0eae57739e233c0fa970c9b98e010cee4817e6233c3ad3eef461cef3e731c485ed4bc08de7d0ac@37.58.56.228:30304,enode://ef4d512152b875de3fc3990e3e124ae55adea35c49c5df40d0c4bea9327116fcfba70b920a7c164e08f425876025cbcf2519ad5238e57c10ea205e7897926a35@45.76.113.250:30303,enode://bcda483330dc0845f521ad611bcdc8cb147a7a8008c022dba20da2ab52ae46fd6d04f3cb9b7da4e94cf81d2c61065e008a13b5f05f3b69795b0dbdd2a14bb48d@209.222.30.63:30303,enode://2edc16258f6f2e18b105362df5af89889b5dbb7b098f266c39ba1b6200e9dfa76b8fd3bc0cdefce089d9e285772ae69d549e6807b23341ac975d0c085b936f1b@139.180.131.100:30303,enode://95fc2505216570bce1f75de47289d5cdcd35eba61a3e2d89fe1690dbdc60e22d8a12fe12c54c77d87f7b56035aa9ef2021387906ac3f5b3814cd90267b64f02e@149.28.135.114:30303,enode://5fcb6aa25e9e4184f278f842581507e4180851e861a59e1a02cf62f2927ee073ba921b5cba10301043f41ed494860f0ccc7508f1058c25f8ebcd56e9f8da018b@149.28.140.203:30303,enode://3a792327abf09be1b78db697c33de653d21bb702eaf6e292899c31a59f0b9535753a34d41f088416bc3f90d25c35ecd6b79d0015c36cf10f9a27c89ecd1f7fa4@149.28.140.232:30303,enode://26def7887241597a30314a77b1a32f156bdcc92eee198b086ae7c4dc26b986a9be6d078b09e93a1f963b083885020e1edfbf6b053dcebbdd090f6dfb289b59f0@149.28.142.223:30303,enode://f35e4ff8bfca2b37297dae0524146c2e4ef20c5d95be48cabe0072334bcf77a9385bad27b9630ee5ba4de451076c2123ad06113f21e3f78387a0e6fde7ec1b0b@45.77.183.160:30303,enode://44f8256e0285d1a94a73187116772522dcf53ef3affcac171cf01ffb00ec613ba1960f1309cc9353207a8f1211e645016c6e30b9669190aac8386c78545b84b1@198.13.34.190:30303,enode://95fc2505216570bce1f75de47289d5cdcd35eba61a3e2d89fe1690dbdc60e22d8a12fe12c54c77d87f7b56035aa9ef2021387906ac3f5b3814cd90267b64f02e@139.180.218.68:30303,enode://5701cfd1d03a04a3a17076e50983397ff634ff7f00693f62f6d4d94107796b74b8e10b8ad6efbf1499ae0c6263e84594d30986c79242a37b1c9d27cddb57cdc5@207.148.71.42:30303,enode://b0bd514f1b0892ab26c1d8be59510406f7d700c74cd3cd03d3f8d0fc21b784bb2fb7bde3afacf435928ca9506decf73bd15af5a64bd5dd113b26fc91605ce397@45.77.181.79:30303,enode://95fc2505216570bce1f75de47289d5cdcd35eba61a3e2d89fe1690dbdc60e22d8a12fe12c54c77d87f7b56035aa9ef2021387906ac3f5b3814cd90267b64f02e@139.180.135.153:30303,enode://297167bcccf50a94fd2b9a1f1a372228526a95066030295ee8842e0bcaf798da751974a8b08caa9fb9764d2b2d50e64ec5a90a8b942a2a9d6b1db9d5995de3ff@139.180.143.152:30303,enode://95fc2505216570bce1f75de47289d5cdcd35eba61a3e2d89fe1690dbdc60e22d8a12fe12c54c77d87f7b56035aa9ef2021387906ac3f5b3814cd90267b64f02e@45.77.244.187:30303,enode://95fc2505216570bce1f75de47289d5cdcd35eba61a3e2d89fe1690dbdc60e22d8a12fe12c54c77d87f7b56035aa9ef2021387906ac3f5b3814cd90267b64f02e@45.76.153.161:30303,enode://3a914391c6f6ff0af000b5e614df1074c2a2db2575d6c4d02c3d96bc00ed52ba4281df45b065cbc253c2a02d0bc34272520e772ee9880b28ef107e91b86166d8@109.169.55.28:30303,enode://2953c5ea2a2829a242123e14538b137be858602da1e68beb8c7f7ec797d9d42cf4f0c76b62e98c4d5578e0eeefa42a501fdfec7079e8db206d89d037a09cde3a@109.169.55.28:30304,enode://80dee88ded07fcb0ed1f4a9db4c60c0bd0592d44656571822b479047653b0c30d84e68c83057db048d2120cd7d504fd6a70a89161c31aaf98e65cfba4a77a528@109.169.55.28:30305,enode://7e495d7e1be1fc47d62f8510249435fb3b6f279880704896cbd78e05027298ed133979a388cc0ecf51fb014a8c68438b45e4a2d82ab1ed9cf86a31e87fed32c5@78.129.229.96:30303,enode://02c155fe4b34293b50d70a10889a57d9f2434fefdf142c6d24d73df9ccff19994cb243b55e87a9349a8f87d827363f74b0b40f44d96925aaaedadb456e38c0c0@78.129.229.96:30304,enode://bc2a722d080b008132ef395763d87f491fb6adc34b5d34b698cfeeadced2d4468ee5dc09f39956b4686c88af9bf26e39bc050feb52c0976238645a0343e6049f@78.129.229.96:30305,enode://560113969268e30a430991e36fcb1a6ea8a2bc16f23bc1dabffd6f8c17649237d58d8cf554e9ce882184abdc9b3a607230123e2bcf819d4ed01ec02acee1c4c2@78.159.100.155:30303,enode://a86d3268c060323572bfeb6df76081e4668ec44cc60ff028c1685a9a683c5d6497c987b5dfade81323d08875066218a1877484396e11f400ce1c2c9bd343c935@78.159.100.155:30304,enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@127.0.0.1:30301,enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@78.129.229.96:30301,enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@5.152.223.199:30301" --syncmode "full" --datadir ./nodes/1 --networkid "${networkid}" --port 30303 --rpc --rpccorsdomain "*" --ws --wsaddr="0.0.0.0" --wsorigins "*" --wsport 8555 --rpcaddr 0.0.0.0 --rpcport 8545 --rpcvhosts "*" --unlock "${wallet1}" --password ./.pwd --mine --gasprice "${GASPRICE}" --targetgaslimit "420000000" --verbosity ${VERBOSITY} --rpcapi admin,db,eth,debug,miner,net,shh,txpool,personal,web3,XDPoS --ethstats "XinFin-MasterNode-01:xinfin_xdpos_hybrid_network_stats@stats.xinfin.network:3000" & -child_proc="$child_proc $!" -${PROJECT_DIR}/build/bin/$Bin_NAME --bootnodes "enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@78.129.229.96:30301,enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@5.152.223.199:30301,enode://d757f1a21828c9c426e26df39176053302209e3dd05e7a6c0e0eae57739e233c0fa970c9b98e010cee4817e6233c3ad3eef461cef3e731c485ed4bc08de7d0ac@37.58.56.228:30303,enode://d757f1a21828c9c426e26df39176053302209e3dd05e7a6c0e0eae57739e233c0fa970c9b98e010cee4817e6233c3ad3eef461cef3e731c485ed4bc08de7d0ac@37.58.56.228:30304,enode://ef4d512152b875de3fc3990e3e124ae55adea35c49c5df40d0c4bea9327116fcfba70b920a7c164e08f425876025cbcf2519ad5238e57c10ea205e7897926a35@45.76.113.250:30303,enode://bcda483330dc0845f521ad611bcdc8cb147a7a8008c022dba20da2ab52ae46fd6d04f3cb9b7da4e94cf81d2c61065e008a13b5f05f3b69795b0dbdd2a14bb48d@209.222.30.63:30303,enode://2edc16258f6f2e18b105362df5af89889b5dbb7b098f266c39ba1b6200e9dfa76b8fd3bc0cdefce089d9e285772ae69d549e6807b23341ac975d0c085b936f1b@139.180.131.100:30303,enode://95fc2505216570bce1f75de47289d5cdcd35eba61a3e2d89fe1690dbdc60e22d8a12fe12c54c77d87f7b56035aa9ef2021387906ac3f5b3814cd90267b64f02e@149.28.135.114:30303,enode://5fcb6aa25e9e4184f278f842581507e4180851e861a59e1a02cf62f2927ee073ba921b5cba10301043f41ed494860f0ccc7508f1058c25f8ebcd56e9f8da018b@149.28.140.203:30303,enode://3a792327abf09be1b78db697c33de653d21bb702eaf6e292899c31a59f0b9535753a34d41f088416bc3f90d25c35ecd6b79d0015c36cf10f9a27c89ecd1f7fa4@149.28.140.232:30303,enode://26def7887241597a30314a77b1a32f156bdcc92eee198b086ae7c4dc26b986a9be6d078b09e93a1f963b083885020e1edfbf6b053dcebbdd090f6dfb289b59f0@149.28.142.223:30303,enode://f35e4ff8bfca2b37297dae0524146c2e4ef20c5d95be48cabe0072334bcf77a9385bad27b9630ee5ba4de451076c2123ad06113f21e3f78387a0e6fde7ec1b0b@45.77.183.160:30303,enode://44f8256e0285d1a94a73187116772522dcf53ef3affcac171cf01ffb00ec613ba1960f1309cc9353207a8f1211e645016c6e30b9669190aac8386c78545b84b1@198.13.34.190:30303,enode://95fc2505216570bce1f75de47289d5cdcd35eba61a3e2d89fe1690dbdc60e22d8a12fe12c54c77d87f7b56035aa9ef2021387906ac3f5b3814cd90267b64f02e@139.180.218.68:30303,enode://5701cfd1d03a04a3a17076e50983397ff634ff7f00693f62f6d4d94107796b74b8e10b8ad6efbf1499ae0c6263e84594d30986c79242a37b1c9d27cddb57cdc5@207.148.71.42:30303,enode://b0bd514f1b0892ab26c1d8be59510406f7d700c74cd3cd03d3f8d0fc21b784bb2fb7bde3afacf435928ca9506decf73bd15af5a64bd5dd113b26fc91605ce397@45.77.181.79:30303,enode://95fc2505216570bce1f75de47289d5cdcd35eba61a3e2d89fe1690dbdc60e22d8a12fe12c54c77d87f7b56035aa9ef2021387906ac3f5b3814cd90267b64f02e@139.180.135.153:30303,enode://297167bcccf50a94fd2b9a1f1a372228526a95066030295ee8842e0bcaf798da751974a8b08caa9fb9764d2b2d50e64ec5a90a8b942a2a9d6b1db9d5995de3ff@139.180.143.152:30303,enode://95fc2505216570bce1f75de47289d5cdcd35eba61a3e2d89fe1690dbdc60e22d8a12fe12c54c77d87f7b56035aa9ef2021387906ac3f5b3814cd90267b64f02e@45.77.244.187:30303,enode://95fc2505216570bce1f75de47289d5cdcd35eba61a3e2d89fe1690dbdc60e22d8a12fe12c54c77d87f7b56035aa9ef2021387906ac3f5b3814cd90267b64f02e@45.76.153.161:30303,enode://3a914391c6f6ff0af000b5e614df1074c2a2db2575d6c4d02c3d96bc00ed52ba4281df45b065cbc253c2a02d0bc34272520e772ee9880b28ef107e91b86166d8@109.169.55.28:30303,enode://2953c5ea2a2829a242123e14538b137be858602da1e68beb8c7f7ec797d9d42cf4f0c76b62e98c4d5578e0eeefa42a501fdfec7079e8db206d89d037a09cde3a@109.169.55.28:30304,enode://80dee88ded07fcb0ed1f4a9db4c60c0bd0592d44656571822b479047653b0c30d84e68c83057db048d2120cd7d504fd6a70a89161c31aaf98e65cfba4a77a528@109.169.55.28:30305,enode://7e495d7e1be1fc47d62f8510249435fb3b6f279880704896cbd78e05027298ed133979a388cc0ecf51fb014a8c68438b45e4a2d82ab1ed9cf86a31e87fed32c5@78.129.229.96:30303,enode://02c155fe4b34293b50d70a10889a57d9f2434fefdf142c6d24d73df9ccff19994cb243b55e87a9349a8f87d827363f74b0b40f44d96925aaaedadb456e38c0c0@78.129.229.96:30304,enode://bc2a722d080b008132ef395763d87f491fb6adc34b5d34b698cfeeadced2d4468ee5dc09f39956b4686c88af9bf26e39bc050feb52c0976238645a0343e6049f@78.129.229.96:30305,enode://560113969268e30a430991e36fcb1a6ea8a2bc16f23bc1dabffd6f8c17649237d58d8cf554e9ce882184abdc9b3a607230123e2bcf819d4ed01ec02acee1c4c2@78.159.100.155:30303,enode://a86d3268c060323572bfeb6df76081e4668ec44cc60ff028c1685a9a683c5d6497c987b5dfade81323d08875066218a1877484396e11f400ce1c2c9bd343c935@78.159.100.155:30304,enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@127.0.0.1:30301,enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@78.129.229.96:30301,enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@5.152.223.199:30301" --syncmode "full" --datadir ./nodes/2 --networkid "${networkid}" --port 30304 --rpc --rpccorsdomain "*" --ws --wsaddr="0.0.0.0" --wsorigins "*" --wsport 8556 --rpcaddr 0.0.0.0 --rpcport 8546 --rpcvhosts "*" --unlock "${wallet2}" --password ./.pwd --mine --gasprice "${GASPRICE}" --targetgaslimit "420000000" --verbosity ${VERBOSITY} --rpcapi admin,db,eth,debug,miner,net,shh,txpool,personal,web3,XDPoS --ethstats "XinFin-MasterNode-02:xinfin_xdpos_hybrid_network_stats@stats.xinfin.network:3000" & -child_proc="$child_proc $!" -${PROJECT_DIR}/build/bin/$Bin_NAME --bootnodes "enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@78.129.229.96:30301,enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@5.152.223.199:30301,enode://d757f1a21828c9c426e26df39176053302209e3dd05e7a6c0e0eae57739e233c0fa970c9b98e010cee4817e6233c3ad3eef461cef3e731c485ed4bc08de7d0ac@37.58.56.228:30303,enode://d757f1a21828c9c426e26df39176053302209e3dd05e7a6c0e0eae57739e233c0fa970c9b98e010cee4817e6233c3ad3eef461cef3e731c485ed4bc08de7d0ac@37.58.56.228:30304,enode://ef4d512152b875de3fc3990e3e124ae55adea35c49c5df40d0c4bea9327116fcfba70b920a7c164e08f425876025cbcf2519ad5238e57c10ea205e7897926a35@45.76.113.250:30303,enode://bcda483330dc0845f521ad611bcdc8cb147a7a8008c022dba20da2ab52ae46fd6d04f3cb9b7da4e94cf81d2c61065e008a13b5f05f3b69795b0dbdd2a14bb48d@209.222.30.63:30303,enode://2edc16258f6f2e18b105362df5af89889b5dbb7b098f266c39ba1b6200e9dfa76b8fd3bc0cdefce089d9e285772ae69d549e6807b23341ac975d0c085b936f1b@139.180.131.100:30303,enode://95fc2505216570bce1f75de47289d5cdcd35eba61a3e2d89fe1690dbdc60e22d8a12fe12c54c77d87f7b56035aa9ef2021387906ac3f5b3814cd90267b64f02e@149.28.135.114:30303,enode://5fcb6aa25e9e4184f278f842581507e4180851e861a59e1a02cf62f2927ee073ba921b5cba10301043f41ed494860f0ccc7508f1058c25f8ebcd56e9f8da018b@149.28.140.203:30303,enode://3a792327abf09be1b78db697c33de653d21bb702eaf6e292899c31a59f0b9535753a34d41f088416bc3f90d25c35ecd6b79d0015c36cf10f9a27c89ecd1f7fa4@149.28.140.232:30303,enode://26def7887241597a30314a77b1a32f156bdcc92eee198b086ae7c4dc26b986a9be6d078b09e93a1f963b083885020e1edfbf6b053dcebbdd090f6dfb289b59f0@149.28.142.223:30303,enode://f35e4ff8bfca2b37297dae0524146c2e4ef20c5d95be48cabe0072334bcf77a9385bad27b9630ee5ba4de451076c2123ad06113f21e3f78387a0e6fde7ec1b0b@45.77.183.160:30303,enode://44f8256e0285d1a94a73187116772522dcf53ef3affcac171cf01ffb00ec613ba1960f1309cc9353207a8f1211e645016c6e30b9669190aac8386c78545b84b1@198.13.34.190:30303,enode://95fc2505216570bce1f75de47289d5cdcd35eba61a3e2d89fe1690dbdc60e22d8a12fe12c54c77d87f7b56035aa9ef2021387906ac3f5b3814cd90267b64f02e@139.180.218.68:30303,enode://5701cfd1d03a04a3a17076e50983397ff634ff7f00693f62f6d4d94107796b74b8e10b8ad6efbf1499ae0c6263e84594d30986c79242a37b1c9d27cddb57cdc5@207.148.71.42:30303,enode://b0bd514f1b0892ab26c1d8be59510406f7d700c74cd3cd03d3f8d0fc21b784bb2fb7bde3afacf435928ca9506decf73bd15af5a64bd5dd113b26fc91605ce397@45.77.181.79:30303,enode://95fc2505216570bce1f75de47289d5cdcd35eba61a3e2d89fe1690dbdc60e22d8a12fe12c54c77d87f7b56035aa9ef2021387906ac3f5b3814cd90267b64f02e@139.180.135.153:30303,enode://297167bcccf50a94fd2b9a1f1a372228526a95066030295ee8842e0bcaf798da751974a8b08caa9fb9764d2b2d50e64ec5a90a8b942a2a9d6b1db9d5995de3ff@139.180.143.152:30303,enode://95fc2505216570bce1f75de47289d5cdcd35eba61a3e2d89fe1690dbdc60e22d8a12fe12c54c77d87f7b56035aa9ef2021387906ac3f5b3814cd90267b64f02e@45.77.244.187:30303,enode://95fc2505216570bce1f75de47289d5cdcd35eba61a3e2d89fe1690dbdc60e22d8a12fe12c54c77d87f7b56035aa9ef2021387906ac3f5b3814cd90267b64f02e@45.76.153.161:30303,enode://3a914391c6f6ff0af000b5e614df1074c2a2db2575d6c4d02c3d96bc00ed52ba4281df45b065cbc253c2a02d0bc34272520e772ee9880b28ef107e91b86166d8@109.169.55.28:30303,enode://2953c5ea2a2829a242123e14538b137be858602da1e68beb8c7f7ec797d9d42cf4f0c76b62e98c4d5578e0eeefa42a501fdfec7079e8db206d89d037a09cde3a@109.169.55.28:30304,enode://80dee88ded07fcb0ed1f4a9db4c60c0bd0592d44656571822b479047653b0c30d84e68c83057db048d2120cd7d504fd6a70a89161c31aaf98e65cfba4a77a528@109.169.55.28:30305,enode://7e495d7e1be1fc47d62f8510249435fb3b6f279880704896cbd78e05027298ed133979a388cc0ecf51fb014a8c68438b45e4a2d82ab1ed9cf86a31e87fed32c5@78.129.229.96:30303,enode://02c155fe4b34293b50d70a10889a57d9f2434fefdf142c6d24d73df9ccff19994cb243b55e87a9349a8f87d827363f74b0b40f44d96925aaaedadb456e38c0c0@78.129.229.96:30304,enode://bc2a722d080b008132ef395763d87f491fb6adc34b5d34b698cfeeadced2d4468ee5dc09f39956b4686c88af9bf26e39bc050feb52c0976238645a0343e6049f@78.129.229.96:30305,enode://560113969268e30a430991e36fcb1a6ea8a2bc16f23bc1dabffd6f8c17649237d58d8cf554e9ce882184abdc9b3a607230123e2bcf819d4ed01ec02acee1c4c2@78.159.100.155:30303,enode://a86d3268c060323572bfeb6df76081e4668ec44cc60ff028c1685a9a683c5d6497c987b5dfade81323d08875066218a1877484396e11f400ce1c2c9bd343c935@78.159.100.155:30304,enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@127.0.0.1:30301,enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@78.129.229.96:30301,enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@5.152.223.199:30301" --syncmode "full" --datadir ./nodes/3 --networkid "${networkid}" --port 30305 --rpc --rpccorsdomain "*" --ws --wsaddr="0.0.0.0" --wsorigins "*" --wsport 8557 --rpcaddr 0.0.0.0 --rpcport 8547 --rpcvhosts "*" --unlock "${wallet3}" --password ./.pwd --mine --gasprice "${GASPRICE}" --targetgaslimit "420000000" --verbosity ${VERBOSITY} --rpcapi admin,db,eth,debug,miner,net,shh,txpool,personal,web3,XDPoS --ethstats "XinFin-MasterNode-03:xinfin_xdpos_hybrid_network_stats@stats.xinfin.network:3000" -``` -{% endcode %} - - - -**Launch the setup script** - -``` - bash run.sh -``` diff --git a/subnets/deploy-a-subnet.md b/subnets/deploy-a-subnet.md deleted file mode 100644 index d7910e15..00000000 --- a/subnets/deploy-a-subnet.md +++ /dev/null @@ -1,3 +0,0 @@ -# Deploy a subnet - -#### diff --git a/subnets/requirements.md b/subnets/requirements.md deleted file mode 100644 index c4a55bf4..00000000 --- a/subnets/requirements.md +++ /dev/null @@ -1,2 +0,0 @@ -# Requirements - diff --git a/subnets/xdc-relayer.md b/subnets/xdc-relayer.md new file mode 100644 index 00000000..076edb78 --- /dev/null +++ b/subnets/xdc-relayer.md @@ -0,0 +1,100 @@ +# XDC Relayer + +## XDC Relayer + +Relayer is a communication bridge between XDC mainnet and its subnet. It provides synchronisation feature to make sure subnet chain is audited on mainnet securely. + +### Pre-reqs + +To build and run this app locally you will need: + +* Install [Node.js](https://nodejs.org/en/). Note, we use node 14 + +## Getting Started + +* Install dependencies + +``` +npm install +``` + +* Set up .env Copy over the .example.env file and override the values to appropriate ones The new file name shall be `.env` +* Run the project directly in TS (dev mode) + +``` +npm run start:dev +``` + +* Build and run the project in JS + +``` +npm run build +npm run start +``` + +* Run unit tests + +``` +npm run test +``` + +* Run unit tests with coverage + +``` +npm run test:coverage +``` + +* Run unit tests on Jest watch mode + +``` +npm run test:watch +``` + +### Environment variables + +Create a .env file (or just rename the .example.env) containing all the env variables you want to set, dotenv library will take care of setting them. This project is using three variables at the moment: + +* PORT -> port where the server will be started on +* NODE\_ENV -> environment, development value will set the logger as debug level, also important for CI. + +### Getting TypeScript + +TypeScript itself is simple to add to any project with `npm`. + +``` +npm install -D typescript +``` + +If you're using VS Code then you're good to go! VS Code will detect and use the TypeScript version you have installed in your `node_modules` folder. For other editors, make sure you have the corresponding [TypeScript plugin](http://www.typescriptlang.org/index.html#download-links). + +### Configuring TypeScript compilation + +TypeScript uses the file `tsconfig.json` to adjust project compile options. Let's dissect this project's `tsconfig.json`, starting with the `compilerOptions` which details how your project is compiled. + +``` + "compilerOptions": { + "module": "commonjs", + "target": "es2017", + "lib": ["es6"], + "noImplicitAny": true, + "strictPropertyInitialization": false, + "moduleResolution": "node", + "sourceMap": true, + "outDir": "dist", + "baseUrl": ".", + "experimentalDecorators": true, + "emitDecoratorMetadata": true, + } + }, +``` + +### Running ESLint + +Like the rest of our build steps, we use npm scripts to invoke ESLint. To run ESLint you can call the main build script or just the ESLint task. + +``` +npm run build // runs full build including ESLint format check +npm run lint // runs ESLint check + fix +``` + +Notice that ESLint is not a part of the main watch task. It can be annoying for ESLint to clutter the output window while in the middle of writing a function, so I elected to only run it only during the full build. If you are interested in seeing ESLint feedback as soon as possible, I strongly recommend the [ESLint extension in VS Code](https://github.com/Microsoft/vscode-eslint.git). From 6d44b3fd88d488188ff3e781b5804a176c92b97e Mon Sep 17 00:00:00 2001 From: Quincy Jones Date: Thu, 16 Feb 2023 02:18:37 +0000 Subject: [PATCH 019/115] GITBOOK-151: No subject --- SUMMARY.md | 2 +- subnets/README.md | 2 ++ subnets/{xdc-relayer.md => requirements.md} | 0 3 files changed, 3 insertions(+), 1 deletion(-) rename subnets/{xdc-relayer.md => requirements.md} (100%) diff --git a/SUMMARY.md b/SUMMARY.md index 3139ea4b..b02e6f87 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -78,7 +78,7 @@ * [One-Click-Installer Masternode (macOS)](run-a-node/masternode/one-click-installer-masternode-macos.md) * [How to Stake an XDC Masternode](how-to-stake-an-xdc-masternode.md) * [Subnets](subnets/README.md) - * [XDC Relayer](subnets/xdc-relayer.md) + * [XDC Relayer](subnets/requirements.md) ## Learn diff --git a/subnets/README.md b/subnets/README.md index e638f1c1..587a0fc8 100644 --- a/subnets/README.md +++ b/subnets/README.md @@ -11,7 +11,9 @@ description: >- ## Description +XDC subnets allow for applications to run local along side the public main network +These applications can run private data and private functionality which can ive more versitality to the functionality of blockchain reasources as well as allow for internal redundancy of network resorces in the event of a local outage ## XDPoSChain diff --git a/subnets/xdc-relayer.md b/subnets/requirements.md similarity index 100% rename from subnets/xdc-relayer.md rename to subnets/requirements.md From dd25921fbe12551c9b4f46964451db5baffc642a Mon Sep 17 00:00:00 2001 From: Jon McBee Date: Thu, 16 Feb 2023 03:07:01 +0000 Subject: [PATCH 020/115] GITBOOK-152: Removing Subnet section until after XDC 2.0 is live --- SUMMARY.md | 2 - subnets/README.md | 74 ----------------------------- subnets/requirements.md | 100 ---------------------------------------- 3 files changed, 176 deletions(-) delete mode 100644 subnets/README.md delete mode 100644 subnets/requirements.md diff --git a/SUMMARY.md b/SUMMARY.md index b02e6f87..7524a44a 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -77,8 +77,6 @@ * [One-Click-Installer Masternode (Windows OS)](run-a-node/masternode/standby-node.md) * [One-Click-Installer Masternode (macOS)](run-a-node/masternode/one-click-installer-masternode-macos.md) * [How to Stake an XDC Masternode](how-to-stake-an-xdc-masternode.md) -* [Subnets](subnets/README.md) - * [XDC Relayer](subnets/requirements.md) ## Learn diff --git a/subnets/README.md b/subnets/README.md deleted file mode 100644 index 587a0fc8..00000000 --- a/subnets/README.md +++ /dev/null @@ -1,74 +0,0 @@ ---- -description: >- - subnets allow for applications to run local versions of their application for - privacy or compliance needs while also maintaining an internal means of - decentralization, and high availability. ---- - -# Subnets - - - -## Description - -XDC subnets allow for applications to run local along side the public main network - -These applications can run private data and private functionality which can ive more versitality to the functionality of blockchain reasources as well as allow for internal redundancy of network resorces in the event of a local outage - -## XDPoSChain - -### XinFin Hybrid Blockchain - -XinFin Hybrid Blockchain is an Enterprise ready Blockchain for global trade and finance - -Visit: [XinFin.org](https://xinfin.org/) Contribute: [Developer Docs](https://docs.xinfin.org/) - -### XinFin Network XDPoS is community driven project to achieve the following - -* XinFin DPOS (XDPoS) consensus that selects 108 set of Masternodes to achieve a high throughput Energy efficient consensus with instant block finality -* KYC Enforcement on Masternodes for Enterprise Adoption and compliance -* Ability to port/relay limited set of data and transactions from privacy channels to public channel -* Interoperability between applications hosted on Private Blockchains like Corda, Hyperledger, Quorum(JP Morgan) using relayers to XinFin Network -* Customer Centric and consortium driven Governance to equally benefit the validators as well as providing comfort for large scale enterprise applications to be hosted on the Network. This achieves - * Rapid Upgradability - * DApps Standardisation for rapid commercialisation - * Compliance with major global jurisdictions. - -#### KYC for masternodes - -**OVERVIEW** - -To add a layer of KYC for masternodes in the current system and a sense of ownership amongst the masternodes hence tying such a cluster of masternodes to physical entity which can held accountable for its actions. - -**Design** - -We established a bidirectional connection between a candidate and its owner inorder to retrieve a candidate belonging to a specific owner & vice versa. - -All the masternodes are recognized by the KYC of their owners and hence are considered as a single verified entity ( for eg. while voting for invalid KYC, only one vote is considered per such cluster ) - -The contract is very strict in handing out penalty for invalid KYC, it results loss of all funds invested in all of its candidates. - -For eg. say A proposes condidates B,C,D by paying for its proposal cost. If at a later stage if some predecided amount of owners ( investors ) vote that a KYC for a A is invalid then A & all of its candidates (B,C,D) will lose their position & all their funds will be lost ( will remain with contract wallet ). - -#### For developers - -**Continues integration & delivery** - -See [https://github.com/XinFinOrg/XDPoSChain/tree/dev-upgrade/cicd](https://github.com/XinFinOrg/XDPoSChain/tree/dev-upgrade/cicd) - -#### To contribute - -Simple create a pull request along with proper reasoning, we'll get back to you. - -Our Channels : [Telegram Developer Group](https://t.me/XinFinDevelopers) or [Public Slack Group](https://launchpass.com/xinfin-public)33 - - - - - - - - - - - diff --git a/subnets/requirements.md b/subnets/requirements.md deleted file mode 100644 index 076edb78..00000000 --- a/subnets/requirements.md +++ /dev/null @@ -1,100 +0,0 @@ -# XDC Relayer - -## XDC Relayer - -Relayer is a communication bridge between XDC mainnet and its subnet. It provides synchronisation feature to make sure subnet chain is audited on mainnet securely. - -### Pre-reqs - -To build and run this app locally you will need: - -* Install [Node.js](https://nodejs.org/en/). Note, we use node 14 - -## Getting Started - -* Install dependencies - -``` -npm install -``` - -* Set up .env Copy over the .example.env file and override the values to appropriate ones The new file name shall be `.env` -* Run the project directly in TS (dev mode) - -``` -npm run start:dev -``` - -* Build and run the project in JS - -``` -npm run build -npm run start -``` - -* Run unit tests - -``` -npm run test -``` - -* Run unit tests with coverage - -``` -npm run test:coverage -``` - -* Run unit tests on Jest watch mode - -``` -npm run test:watch -``` - -### Environment variables - -Create a .env file (or just rename the .example.env) containing all the env variables you want to set, dotenv library will take care of setting them. This project is using three variables at the moment: - -* PORT -> port where the server will be started on -* NODE\_ENV -> environment, development value will set the logger as debug level, also important for CI. - -### Getting TypeScript - -TypeScript itself is simple to add to any project with `npm`. - -``` -npm install -D typescript -``` - -If you're using VS Code then you're good to go! VS Code will detect and use the TypeScript version you have installed in your `node_modules` folder. For other editors, make sure you have the corresponding [TypeScript plugin](http://www.typescriptlang.org/index.html#download-links). - -### Configuring TypeScript compilation - -TypeScript uses the file `tsconfig.json` to adjust project compile options. Let's dissect this project's `tsconfig.json`, starting with the `compilerOptions` which details how your project is compiled. - -``` - "compilerOptions": { - "module": "commonjs", - "target": "es2017", - "lib": ["es6"], - "noImplicitAny": true, - "strictPropertyInitialization": false, - "moduleResolution": "node", - "sourceMap": true, - "outDir": "dist", - "baseUrl": ".", - "experimentalDecorators": true, - "emitDecoratorMetadata": true, - } - }, -``` - -### Running ESLint - -Like the rest of our build steps, we use npm scripts to invoke ESLint. To run ESLint you can call the main build script or just the ESLint task. - -``` -npm run build // runs full build including ESLint format check -npm run lint // runs ESLint check + fix -``` - -Notice that ESLint is not a part of the main watch task. It can be annoying for ESLint to clutter the output window while in the middle of writing a function, so I elected to only run it only during the full build. If you are interested in seeing ESLint feedback as soon as possible, I strongly recommend the [ESLint extension in VS Code](https://github.com/Microsoft/vscode-eslint.git). From 0f629f2f65160494341754dd5c812a6a3b7f490c Mon Sep 17 00:00:00 2001 From: Salomon Morales Date: Thu, 16 Feb 2023 14:55:59 +0000 Subject: [PATCH 021/115] GITBOOK-153: No subject --- run-a-node/masternode/full-node.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/run-a-node/masternode/full-node.md b/run-a-node/masternode/full-node.md index 8a254779..a8b590b7 100644 --- a/run-a-node/masternode/full-node.md +++ b/run-a-node/masternode/full-node.md @@ -75,7 +75,7 @@ For Testnet run the following commands: ``` cd testnet -sudo docker-compose -f apothem-network.yml up -d +sudo docker-compose -f docker-compose.yml up -d ``` You should be able to see your node listed on the \[Apothem Network] page. Select **"Switch to LiveNet"** to check **LiveNetwork** Stats and Select **"Switch to TestNet"** for **TestNetwork.** @@ -85,7 +85,7 @@ Your coinbase address can be found in xdcchain/coinbase.txt file. For troubleshooting purposes, you can stop the node by using the following command on either Mainnet or Testnet: ``` -sudo docker-compose -f apothem-network.yml down +sudo docker-compose -f docker-compose.yml down ``` ## Downloading a Network Snapshot From fa90941dd2c3160b248a19c0ebc349abd881c0ab Mon Sep 17 00:00:00 2001 From: Quincy Jones Date: Mon, 20 Feb 2023 15:43:56 +0000 Subject: [PATCH 022/115] GITBOOK-145: added github link --- SUMMARY.md | 4 +- .../how-to-stake-an-xdc-masternode.md | 16 +-- subnets/README.md | 48 +++++++++ subnets/xdc-relayer.md | 100 ++++++++++++++++++ 4 files changed, 159 insertions(+), 9 deletions(-) rename how-to-stake-an-xdc-masternode.md => run-a-node/masternode/how-to-stake-an-xdc-masternode.md (62%) create mode 100644 subnets/README.md create mode 100644 subnets/xdc-relayer.md diff --git a/SUMMARY.md b/SUMMARY.md index 7524a44a..7274159f 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -73,10 +73,12 @@ * [Business White Paper](https://github.com/XinFinOrg/Developer-Resource/blob/master/Docs/wp-and-research/whitepaper-tech.pdf) * [Run a Node](run-a-node/README.md) * [Masternode](run-a-node/masternode/README.md) + * [How to Stake an XDC Masternode](run-a-node/masternode/how-to-stake-an-xdc-masternode.md) * [Full Node (Docker version)](run-a-node/masternode/full-node.md) * [One-Click-Installer Masternode (Windows OS)](run-a-node/masternode/standby-node.md) * [One-Click-Installer Masternode (macOS)](run-a-node/masternode/one-click-installer-masternode-macos.md) -* [How to Stake an XDC Masternode](how-to-stake-an-xdc-masternode.md) +* [Subnets](subnets/README.md) + * [XDC Relayer](subnets/xdc-relayer.md) ## Learn diff --git a/how-to-stake-an-xdc-masternode.md b/run-a-node/masternode/how-to-stake-an-xdc-masternode.md similarity index 62% rename from how-to-stake-an-xdc-masternode.md rename to run-a-node/masternode/how-to-stake-an-xdc-masternode.md index 3379c942..ded9ce5b 100644 --- a/how-to-stake-an-xdc-masternode.md +++ b/run-a-node/masternode/how-to-stake-an-xdc-masternode.md @@ -19,31 +19,31 @@ Follow these steps to stake your node. 1. Go to [https://www.xinfin.network/#masternode](https://www.xinfin.network/#masternode) and switch to either mainnet or Apothem: 2. Click on login -
+
3. You will be presented with the following options to log in. We will be using XDCPay for this tutorial: -
+
4. Once logged in, click on "Become a candidate" and you will see the following screen: -

If you dont have your KYC document ready. You can download a copy via the highlighted links on this image.

+

If you dont have your KYC document ready. You can download a copy via the highlighted links on this image.

5. Once the file has been uploaded, you will see that KYC shows "True." -
+
6. Click on "Become a candidate" and input your coinbase address from your node and hit apply. -
+
7. Once you click apply, your wallet will prompt you to sign the transaction. Click "Confirm" on your wallet. -
+
8. Once the transaction executes successfully, you will get a notification at the bottom right side of the screen as shown below. -
+
9. You can also verify the transaction if you open your wallet, click on "Transactions" and click on the "Propose" event. -
+
diff --git a/subnets/README.md b/subnets/README.md new file mode 100644 index 00000000..1129be4e --- /dev/null +++ b/subnets/README.md @@ -0,0 +1,48 @@ +# Subnets + +## XDPoSChain + +### XinFin Hybrid Blockchain + +XinFin Hybrid Blockchain is an Enterprise ready Blockchain for global trade and finance + +Visit: [XinFin.org](https://xinfin.org/) Contribute: [Developer Docs](https://docs.xinfin.org/) + +### XinFin Network XDPoS is community driven project to achieve the following + +* XinFin DPOS (XDPoS) consensus that selects 108 set of Masternodes to achieve a high throughput Energy efficient consensus with instant block finality +* KYC Enforcement on Masternodes for Enterprise Adoption and compliance +* Ability to port/relay limited set of data and transactions from privacy channels to public channel +* Interoperability between applications hosted on Private Blockchains like Corda, Hyperledger, Quorum(JP Morgan) using relayers to XinFin Network +* Customer Centric and consortium driven Governance to equally benefit the validators as well as providing comfort for large scale enterprise applications to be hosted on the Network. This achieves + * Rapid Upgradability + * DApps Standardisation for rapid commercialisation + * Compliance with major global jurisdictions. + +#### KYC for masternodes + +**OVERVIEW** + +To add a layer of KYC for masternodes in the current system and a sense of ownership amongst the masternodes hence tying such a cluster of masternodes to physical entity which can held accountable for its actions. + +**Design** + +We established a bidirectional connection between a candidate and its owner inorder to retrieve a candidate belonging to a specific owner & vice versa. + +All the masternodes are recognized by the KYC of their owners and hence are considered as a single verified entity ( for eg. while voting for invalid KYC, only one vote is considered per such cluster ) + +The contract is very strict in handing out penalty for invalid KYC, it results loss of all funds invested in all of its candidates. + +For eg. say A proposes condidates B,C,D by paying for its proposal cost. If at a later stage if some predecided amount of owners ( investors ) vote that a KYC for a A is invalid then A & all of its candidates (B,C,D) will lose their position & all their funds will be lost ( will remain with contract wallet ). + +#### For developers + +**Continues integration & delivery** + +See [https://github.com/XinFinOrg/XDPoSChain/tree/dev-upgrade/cicd](https://github.com/XinFinOrg/XDPoSChain/tree/dev-upgrade/cicd) + +#### To contribute + +Simple create a pull request along with proper reasoning, we'll get back to you. + +Our Channels : [Telegram Developer Group](https://t.me/XinFinDevelopers) or [Public Slack Group](https://launchpass.com/xinfin-public) diff --git a/subnets/xdc-relayer.md b/subnets/xdc-relayer.md new file mode 100644 index 00000000..076edb78 --- /dev/null +++ b/subnets/xdc-relayer.md @@ -0,0 +1,100 @@ +# XDC Relayer + +## XDC Relayer + +Relayer is a communication bridge between XDC mainnet and its subnet. It provides synchronisation feature to make sure subnet chain is audited on mainnet securely. + +### Pre-reqs + +To build and run this app locally you will need: + +* Install [Node.js](https://nodejs.org/en/). Note, we use node 14 + +## Getting Started + +* Install dependencies + +``` +npm install +``` + +* Set up .env Copy over the .example.env file and override the values to appropriate ones The new file name shall be `.env` +* Run the project directly in TS (dev mode) + +``` +npm run start:dev +``` + +* Build and run the project in JS + +``` +npm run build +npm run start +``` + +* Run unit tests + +``` +npm run test +``` + +* Run unit tests with coverage + +``` +npm run test:coverage +``` + +* Run unit tests on Jest watch mode + +``` +npm run test:watch +``` + +### Environment variables + +Create a .env file (or just rename the .example.env) containing all the env variables you want to set, dotenv library will take care of setting them. This project is using three variables at the moment: + +* PORT -> port where the server will be started on +* NODE\_ENV -> environment, development value will set the logger as debug level, also important for CI. + +### Getting TypeScript + +TypeScript itself is simple to add to any project with `npm`. + +``` +npm install -D typescript +``` + +If you're using VS Code then you're good to go! VS Code will detect and use the TypeScript version you have installed in your `node_modules` folder. For other editors, make sure you have the corresponding [TypeScript plugin](http://www.typescriptlang.org/index.html#download-links). + +### Configuring TypeScript compilation + +TypeScript uses the file `tsconfig.json` to adjust project compile options. Let's dissect this project's `tsconfig.json`, starting with the `compilerOptions` which details how your project is compiled. + +``` + "compilerOptions": { + "module": "commonjs", + "target": "es2017", + "lib": ["es6"], + "noImplicitAny": true, + "strictPropertyInitialization": false, + "moduleResolution": "node", + "sourceMap": true, + "outDir": "dist", + "baseUrl": ".", + "experimentalDecorators": true, + "emitDecoratorMetadata": true, + } + }, +``` + +### Running ESLint + +Like the rest of our build steps, we use npm scripts to invoke ESLint. To run ESLint you can call the main build script or just the ESLint task. + +``` +npm run build // runs full build including ESLint format check +npm run lint // runs ESLint check + fix +``` + +Notice that ESLint is not a part of the main watch task. It can be annoying for ESLint to clutter the output window while in the middle of writing a function, so I elected to only run it only during the full build. If you are interested in seeing ESLint feedback as soon as possible, I strongly recommend the [ESLint extension in VS Code](https://github.com/Microsoft/vscode-eslint.git). From b0795c4356bb5810874780c4e2fb47351fad8e76 Mon Sep 17 00:00:00 2001 From: Jon McBee Date: Mon, 6 Mar 2023 16:45:48 +0000 Subject: [PATCH 023/115] GITBOOK-154: Removing Subnet Documentation until after XDC 2.0 --- SUMMARY.md | 2 - subnets/README.md | 48 -------------------- subnets/xdc-relayer.md | 100 ----------------------------------------- 3 files changed, 150 deletions(-) delete mode 100644 subnets/README.md delete mode 100644 subnets/xdc-relayer.md diff --git a/SUMMARY.md b/SUMMARY.md index 7274159f..3361b689 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -77,8 +77,6 @@ * [Full Node (Docker version)](run-a-node/masternode/full-node.md) * [One-Click-Installer Masternode (Windows OS)](run-a-node/masternode/standby-node.md) * [One-Click-Installer Masternode (macOS)](run-a-node/masternode/one-click-installer-masternode-macos.md) -* [Subnets](subnets/README.md) - * [XDC Relayer](subnets/xdc-relayer.md) ## Learn diff --git a/subnets/README.md b/subnets/README.md deleted file mode 100644 index 1129be4e..00000000 --- a/subnets/README.md +++ /dev/null @@ -1,48 +0,0 @@ -# Subnets - -## XDPoSChain - -### XinFin Hybrid Blockchain - -XinFin Hybrid Blockchain is an Enterprise ready Blockchain for global trade and finance - -Visit: [XinFin.org](https://xinfin.org/) Contribute: [Developer Docs](https://docs.xinfin.org/) - -### XinFin Network XDPoS is community driven project to achieve the following - -* XinFin DPOS (XDPoS) consensus that selects 108 set of Masternodes to achieve a high throughput Energy efficient consensus with instant block finality -* KYC Enforcement on Masternodes for Enterprise Adoption and compliance -* Ability to port/relay limited set of data and transactions from privacy channels to public channel -* Interoperability between applications hosted on Private Blockchains like Corda, Hyperledger, Quorum(JP Morgan) using relayers to XinFin Network -* Customer Centric and consortium driven Governance to equally benefit the validators as well as providing comfort for large scale enterprise applications to be hosted on the Network. This achieves - * Rapid Upgradability - * DApps Standardisation for rapid commercialisation - * Compliance with major global jurisdictions. - -#### KYC for masternodes - -**OVERVIEW** - -To add a layer of KYC for masternodes in the current system and a sense of ownership amongst the masternodes hence tying such a cluster of masternodes to physical entity which can held accountable for its actions. - -**Design** - -We established a bidirectional connection between a candidate and its owner inorder to retrieve a candidate belonging to a specific owner & vice versa. - -All the masternodes are recognized by the KYC of their owners and hence are considered as a single verified entity ( for eg. while voting for invalid KYC, only one vote is considered per such cluster ) - -The contract is very strict in handing out penalty for invalid KYC, it results loss of all funds invested in all of its candidates. - -For eg. say A proposes condidates B,C,D by paying for its proposal cost. If at a later stage if some predecided amount of owners ( investors ) vote that a KYC for a A is invalid then A & all of its candidates (B,C,D) will lose their position & all their funds will be lost ( will remain with contract wallet ). - -#### For developers - -**Continues integration & delivery** - -See [https://github.com/XinFinOrg/XDPoSChain/tree/dev-upgrade/cicd](https://github.com/XinFinOrg/XDPoSChain/tree/dev-upgrade/cicd) - -#### To contribute - -Simple create a pull request along with proper reasoning, we'll get back to you. - -Our Channels : [Telegram Developer Group](https://t.me/XinFinDevelopers) or [Public Slack Group](https://launchpass.com/xinfin-public) diff --git a/subnets/xdc-relayer.md b/subnets/xdc-relayer.md deleted file mode 100644 index 076edb78..00000000 --- a/subnets/xdc-relayer.md +++ /dev/null @@ -1,100 +0,0 @@ -# XDC Relayer - -## XDC Relayer - -Relayer is a communication bridge between XDC mainnet and its subnet. It provides synchronisation feature to make sure subnet chain is audited on mainnet securely. - -### Pre-reqs - -To build and run this app locally you will need: - -* Install [Node.js](https://nodejs.org/en/). Note, we use node 14 - -## Getting Started - -* Install dependencies - -``` -npm install -``` - -* Set up .env Copy over the .example.env file and override the values to appropriate ones The new file name shall be `.env` -* Run the project directly in TS (dev mode) - -``` -npm run start:dev -``` - -* Build and run the project in JS - -``` -npm run build -npm run start -``` - -* Run unit tests - -``` -npm run test -``` - -* Run unit tests with coverage - -``` -npm run test:coverage -``` - -* Run unit tests on Jest watch mode - -``` -npm run test:watch -``` - -### Environment variables - -Create a .env file (or just rename the .example.env) containing all the env variables you want to set, dotenv library will take care of setting them. This project is using three variables at the moment: - -* PORT -> port where the server will be started on -* NODE\_ENV -> environment, development value will set the logger as debug level, also important for CI. - -### Getting TypeScript - -TypeScript itself is simple to add to any project with `npm`. - -``` -npm install -D typescript -``` - -If you're using VS Code then you're good to go! VS Code will detect and use the TypeScript version you have installed in your `node_modules` folder. For other editors, make sure you have the corresponding [TypeScript plugin](http://www.typescriptlang.org/index.html#download-links). - -### Configuring TypeScript compilation - -TypeScript uses the file `tsconfig.json` to adjust project compile options. Let's dissect this project's `tsconfig.json`, starting with the `compilerOptions` which details how your project is compiled. - -``` - "compilerOptions": { - "module": "commonjs", - "target": "es2017", - "lib": ["es6"], - "noImplicitAny": true, - "strictPropertyInitialization": false, - "moduleResolution": "node", - "sourceMap": true, - "outDir": "dist", - "baseUrl": ".", - "experimentalDecorators": true, - "emitDecoratorMetadata": true, - } - }, -``` - -### Running ESLint - -Like the rest of our build steps, we use npm scripts to invoke ESLint. To run ESLint you can call the main build script or just the ESLint task. - -``` -npm run build // runs full build including ESLint format check -npm run lint // runs ESLint check + fix -``` - -Notice that ESLint is not a part of the main watch task. It can be annoying for ESLint to clutter the output window while in the middle of writing a function, so I elected to only run it only during the full build. If you are interested in seeing ESLint feedback as soon as possible, I strongly recommend the [ESLint extension in VS Code](https://github.com/Microsoft/vscode-eslint.git). From bbf9435cb38dd4ecbec140891996bffec77e7d90 Mon Sep 17 00:00:00 2001 From: Quincy Jones Date: Thu, 9 Mar 2023 03:33:34 +0000 Subject: [PATCH 024/115] GITBOOK-155: No subject --- SUMMARY.md | 1 + .../what-is-an-xdc-wallet.md | 27 +++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 get-started/blockchain-basics/what-is-an-xdc-wallet.md diff --git a/SUMMARY.md b/SUMMARY.md index 3361b689..ff9ec20d 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -6,6 +6,7 @@ * [What is a Blockchain](get-started/blockchain-basics/what-is-a-blockchain.md) * [What is a dApp](get-started/blockchain-basics/what-is-a-dapp.md) * [Why XDC Network](get-started/blockchain-basics/why-xdc-network.md) + * [What is an XDC Wallet](get-started/blockchain-basics/what-is-an-xdc-wallet.md) * [XDC Design](get-started/xdc-design/README.md) * [Consensus Mechanism](get-started/xdc-design/consensus-mechanism.md) * [Masternodes](get-started/xdc-design/masternodes.md) diff --git a/get-started/blockchain-basics/what-is-an-xdc-wallet.md b/get-started/blockchain-basics/what-is-an-xdc-wallet.md new file mode 100644 index 00000000..2e493b2f --- /dev/null +++ b/get-started/blockchain-basics/what-is-an-xdc-wallet.md @@ -0,0 +1,27 @@ +--- +description: >- + An XDC wallet is a digital wallet that allows users to store, send, and + receive XDC tokens. These wallets are similar to traditional wallets, but they + are digital and can be accessed from anywhere. +--- + +# What is an XDC Wallet + + + + + +XDC wallets work by utilizing public-key cryptography. When a user creates an XDC wallet, they are given a public key and a private key. The public key is used to receive XDC tokens, while the private key is used to send XDC tokens. These keys are stored in the XDC blockchain network, which is a decentralized and distributed ledger. + +When a user wants to send XDC tokens to another user, they create a transaction and sign it with their private key. The transaction is then broadcasted to the XDC blockchain network, where it is verified by a network of nodes. Once the transaction is verified, the XDC tokens are transferred from the sender's wallet to the receiver's wallet. + +The XDC network is EVM compatible> The Ethereum Virtual Machine (EVM) is a decentralized virtual machine that was originally built on top of the Ethereum blockchain but has since been adopted by other chains and technology to leverage its functionality. The EVM is a critical component of the XDC ecosystem because it allows developers to write and deploy smart contracts on the XDC blockchain with traditionally Ethereum tool sets. + +Smart contracts are self-executing contracts that are written in code they are what make up Dapps, Tokens, and automated agreements on the network. They can be used to automate the execution of contracts, agreements, and other types of applications. Smart contracts are executed by the EVM, which runs on top of the XDC blockchain. + +The XDC network is fully compatible with the EVM, which means that developers can write and deploy smart contracts on the XDC network using the same tools and programming languages that they use on the Ethereum network. This is made possible by XDC's use of the Ethereum client, which provides full EVM compatibility. + +XDC's compatibility with the EVM makes it easier for developers to create and deploy decentralized applications (dApps) on the XDC network. These dApps can be used to create new financial solutions, such as decentralized exchanges, lending platforms, and payment systems as well as create fully autonomous start ups who leverage the blockchain infrastructure to run and scale globally.. + +\ +\ From 8e088521d538b00b07e7f3d3e5eea03cc2cbd9c9 Mon Sep 17 00:00:00 2001 From: Quincy Jones Date: Thu, 9 Mar 2023 03:35:23 +0000 Subject: [PATCH 025/115] GITBOOK-156: No subject --- SUMMARY.md | 2 +- .../{what-is-an-xdc-wallet.md => xdc-wallets.md} | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename get-started/blockchain-basics/{what-is-an-xdc-wallet.md => xdc-wallets.md} (99%) diff --git a/SUMMARY.md b/SUMMARY.md index ff9ec20d..cd328112 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -6,7 +6,7 @@ * [What is a Blockchain](get-started/blockchain-basics/what-is-a-blockchain.md) * [What is a dApp](get-started/blockchain-basics/what-is-a-dapp.md) * [Why XDC Network](get-started/blockchain-basics/why-xdc-network.md) - * [What is an XDC Wallet](get-started/blockchain-basics/what-is-an-xdc-wallet.md) + * [XDC Wallets](get-started/blockchain-basics/xdc-wallets.md) * [XDC Design](get-started/xdc-design/README.md) * [Consensus Mechanism](get-started/xdc-design/consensus-mechanism.md) * [Masternodes](get-started/xdc-design/masternodes.md) diff --git a/get-started/blockchain-basics/what-is-an-xdc-wallet.md b/get-started/blockchain-basics/xdc-wallets.md similarity index 99% rename from get-started/blockchain-basics/what-is-an-xdc-wallet.md rename to get-started/blockchain-basics/xdc-wallets.md index 2e493b2f..f0747720 100644 --- a/get-started/blockchain-basics/what-is-an-xdc-wallet.md +++ b/get-started/blockchain-basics/xdc-wallets.md @@ -5,7 +5,7 @@ description: >- are digital and can be accessed from anywhere. --- -# What is an XDC Wallet +# XDC Wallets From 66a32a6627590ce262db17cf2385e64287784ce7 Mon Sep 17 00:00:00 2001 From: Quincy Jones Date: Wed, 15 Mar 2023 00:46:32 +0000 Subject: [PATCH 026/115] GITBOOK-157: No subject --- SUMMARY.md | 2 +- get-details/networks/README.md | 30 +++++++++++++++++++++++++++++- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/SUMMARY.md b/SUMMARY.md index cd328112..5864bbca 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -39,7 +39,7 @@ * [XDCPay Changelist](get-details/wallet-integration/xdcpay-changelist.md) * [Wallet Connect](get-details/wallet-integration/walletconnect.md) * [Metamask](get-details/wallet-integration/metamask.md) - * [Networks](get-details/networks/README.md) + * [XDC Main & Test Networks Overviews](get-details/networks/README.md) * [Mainnet (XDPos)](get-details/networks/mainnet.md) * [Apothem Testnet (XDPoS)](get-details/networks/apothem.md) * [EVM Compatibility](get-details/evm-compatibility/README.md) diff --git a/get-details/networks/README.md b/get-details/networks/README.md index 9fafe0f2..06057446 100644 --- a/get-details/networks/README.md +++ b/get-details/networks/README.md @@ -1,2 +1,30 @@ -# Networks +# XDC Main & Test Networks Overviews +XDC main net is a blockchain protocol designed for enterprise use cases, including supply chain management, trade finance, and more. It is built with the Ethereum Virtual Machine (EVM) and uses a consensus mechanism called Delegated Proof of Stake (DPoS) to achieve faster transactions and lower fees. + +The XDC main net is the production version of the XDC protocol, where real-world transactions occur. It is designed to support high transaction throughput, with a capacity of up to 2,000 transactions per second. The XDC main net is fully decentralized and open source, allowing anyone to participate in the network as a validator or node operator. + +### Basic Usage and Functionalities of XDC Main Net: The XDC main net supports a wide range of use cases, including: + +1. Supply Chain Management: XDC can be used to track the movement of goods across the supply chain, enabling greater transparency and accountability. +2. Trade Finance: XDC can be used to facilitate international trade transactions, with faster settlement times and lower fees than traditional methods. +3. Payments: XDC can be used as a payment method for goods and services, with fast transaction confirmation times and low fees. +4. Decentralized Applications (DApps): XDC supports the development of decentralized applications, with smart contracts that can execute automatically when certain conditions are met. + +## **Overview of Apothem Test Network:** + +Apothem is a test network for the XDC protocol, designed to allow developers and users to test the protocol's functionalities without using real funds. It is a fully functional network that replicates the XDC main net's features, but with a separate blockchain. + +### Basic Usage and Functionalities of Apothem Test Network: + +The Apothem test network is primarily used by developers to test their smart contracts and applications before deploying them on the XDC main net. It allows developers to test their code in a safe environment without the risk of losing funds. The test network also allows users to experiment with the XDC protocol's functionalities and learn how to use it before using the main net. + +Some of the functionalities of the Apothem test network include: + +1. Creating and testing smart contracts: Developers can create and test their smart contracts on the Apothem test network before deploying them on the XDC main net. +2. Testing transaction speed and fees: Users can test the transaction speed and fees of the XDC protocol on the Apothem test network, which is similar to the XDC main net. +3. Learning how to use XDC: Users can experiment with the XDC protocol's functionalities and learn how to use it before using the main net. + +## Overview + +In summary, the XDC main net is a production blockchain network that supports high transaction throughput and a wide range of enterprise use cases, while the Apothem test network is a separate blockchain network designed for testing the XDC protocol's functionalities without using real funds. Both networks offer developers and users the ability to experiment with the XDC protocol's functionalities and learn how to use it. From c53cd68a58814836ec19565eadee44cb78f6dae5 Mon Sep 17 00:00:00 2001 From: Salomon Morales Date: Fri, 24 Mar 2023 20:42:19 +0000 Subject: [PATCH 027/115] GITBOOK-158: No subject --- run-a-node/masternode/full-node.md | 47 +++++++++++++++++++++++++++--- 1 file changed, 43 insertions(+), 4 deletions(-) diff --git a/run-a-node/masternode/full-node.md b/run-a-node/masternode/full-node.md index a8b590b7..08ce1403 100644 --- a/run-a-node/masternode/full-node.md +++ b/run-a-node/masternode/full-node.md @@ -88,19 +88,21 @@ For troubleshooting purposes, you can stop the node by using the following comma sudo docker-compose -f docker-compose.yml down ``` -## Downloading a Network Snapshot +## Downloading a Network Snapshot (Mainnet or Apothem) The following steps are to expedite the syncing process of your node with the XDC Network. If you followed the steps above, your node will take 3-4 days to sync up with the network fully. You can reduce that time by downloading a network snapshot and bringing your node back up after the chain has been downloaded and unpacked. {% embed url="https://youtu.be/ZQF3f0Zd6-k" %} -### First safely bring down your node: +## Mainnet Snapshot + +### Bring down your node: ``` sudo docker-compose -f docker-compose.yml down ``` -### Then remove the old xdchain file from the server +### Remove the old xdchain file from the server ``` rm -rf xdcchain.tar @@ -148,4 +150,41 @@ This command will bring your node up and it will start syncing to the network. O
-### +## Apothem Snapshot + +### Bring down your node: + +``` +sudo docker-compose -f docker-compose.yml down +``` + +### Remove the old xdchain file from the server + +``` +rm -rf apothem.tar +``` + +### Download the snapshot + +``` +wget https://download.apothem.network/apothem.tar +``` + +### Unpack the xdcchain.tar file + +``` +tar -xvzf apothem.tar +``` + +## Move the xdcchain-testnet + +``` +mv XDC xdcchain-testnet +``` + +## Bring up the node + +``` +sudo docker-compose -f docker-compose.yml up -d +``` + From 752a83929a3eb5788878576792177d67ea0fe04d Mon Sep 17 00:00:00 2001 From: Salomon Morales Date: Mon, 27 Mar 2023 19:25:54 +0000 Subject: [PATCH 028/115] GITBOOK-160: change request with no subject merged in GitBook --- run-a-node/masternode/full-node.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/run-a-node/masternode/full-node.md b/run-a-node/masternode/full-node.md index 08ce1403..3eeb2d83 100644 --- a/run-a-node/masternode/full-node.md +++ b/run-a-node/masternode/full-node.md @@ -170,7 +170,7 @@ rm -rf apothem.tar wget https://download.apothem.network/apothem.tar ``` -### Unpack the xdcchain.tar file +### Unpack the apothem.tar file ``` tar -xvzf apothem.tar From dd503a5aaad6ee4203e36ea73f22786307e449dc Mon Sep 17 00:00:00 2001 From: Quincy Jones Date: Mon, 27 Mar 2023 23:57:51 +0000 Subject: [PATCH 029/115] GITBOOK-161: change request with no subject merged in GitBook --- SUMMARY.md | 1 + get-details/evm-compatibility/README.md | 10 +++++++++- .../evm-compatibility/migrating-from-evm-to-xdc.md | 3 +++ 3 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 get-details/evm-compatibility/migrating-from-evm-to-xdc.md diff --git a/SUMMARY.md b/SUMMARY.md index 5864bbca..0755f445 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -44,6 +44,7 @@ * [Apothem Testnet (XDPoS)](get-details/networks/apothem.md) * [EVM Compatibility](get-details/evm-compatibility/README.md) * [XDC Network Ethereum Fork Details](get-details/evm-compatibility/xdc-fork-details.md) + * [Migrating from EVM to XDC](get-details/evm-compatibility/migrating-from-evm-to-xdc.md) * [XIP Proposals](get-details/xip-proposals.md) * [Tools](tools/README.md) * [SDKs & Programming](tools/sdks-and-programming/README.md) diff --git a/get-details/evm-compatibility/README.md b/get-details/evm-compatibility/README.md index a3cd0161..3a48a1f2 100644 --- a/get-details/evm-compatibility/README.md +++ b/get-details/evm-compatibility/README.md @@ -1,3 +1,11 @@ # EVM Compatibility -For a How-To guide showing migration of a dApp from Ethereum to the XDC Network please go to [this link](https://docs.xdc.community/learn/how-to-articles/how-to-migrate-a-dapp-from-ethereum-to-the-xdc-network-using-truffle). +Ethereum Virtual Machine (EVM) compatibility is becoming increasingly important in the world of blockchain networks. It allows different blockchain networks to utilize the same tools, import code to seperate networks, allow a simple and scalable means of implemeting smart contracts into a new blockchain and allows for a standard of skills and programming in a standardize language (solidity) contracts that have been created and standardized on other networks to be easily implemented on the XDC netwrok + +With EVM compatibility on the XDC network, this allows developers to use Ethereum-based programming languages and tools to build on other blockchain networks. Ethereum is currently the largest smart contract platform in the world and has a large developer community. By leveraging the EVM, developers can use familiar programming languages and tools, such as Solidity and Truffle, to create decentralized applications (DApps) on other networks. This reduces the learning curve for developers and allows for faster development times, resulting in a larger and more diverse range of applications on different networks. + +Also, EVM compatibility can increase the security of blockchain networks. The EVM is an already established deterministic machine that ensures that code executes in the same way every time it is run. This means that if a smart contract runs successfully on the Ethereum network, it will also run successfully on other EVM-compatible networks. This allows for the testing of smart contracts on the Ethereum network, which is known for its high level of security, before deploying them on other networks. This reduces the risk of vulnerabilities and increases the overall security of the blockchain ecosystem. + +The EVM allows for the DApps created on other networks to be easily imported over to the XDC network and this allows developers who have applications on other networks to import aready established code to be faster and cheaper on the XDC network without needing to change any of their propriatarty code + +In conclusion, EVM compatibility is a critical feature on XDC that can enhance the functionalities of the XDC networks in several ways. It enables interoperability, promotes innovation and growth, increases security, and enhances scalability. As the blockchain ecosystem continues to evolve, EVM compatibility will play an increasingly important role in connecting different networks and creating a more diverse and robust ecosystem. diff --git a/get-details/evm-compatibility/migrating-from-evm-to-xdc.md b/get-details/evm-compatibility/migrating-from-evm-to-xdc.md new file mode 100644 index 00000000..cebcdc87 --- /dev/null +++ b/get-details/evm-compatibility/migrating-from-evm-to-xdc.md @@ -0,0 +1,3 @@ +# Migrating from EVM to XDC + +For a How-To guide showing migration of a dApp from Ethereum to the XDC Network please go to [this link](https://docs.xdc.community/learn/how-to-articles/how-to-migrate-a-dapp-from-ethereum-to-the-xdc-network-using-truffle). From 27bd90ee43748486dcf49818225c1f2768ce17d0 Mon Sep 17 00:00:00 2001 From: Quincy Jones Date: Sun, 2 Apr 2023 18:17:10 +0000 Subject: [PATCH 030/115] GITBOOK-162: change request with no subject merged in GitBook --- .../migrating-from-evm-to-xdc.md | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/get-details/evm-compatibility/migrating-from-evm-to-xdc.md b/get-details/evm-compatibility/migrating-from-evm-to-xdc.md index cebcdc87..0a3b0d0b 100644 --- a/get-details/evm-compatibility/migrating-from-evm-to-xdc.md +++ b/get-details/evm-compatibility/migrating-from-evm-to-xdc.md @@ -1,3 +1,43 @@ # Migrating from EVM to XDC +Migrating a Solidity contract from Ethereum to the XDC network with Truffle involves several steps. The XDC network is a public blockchain that is EVM compatible and designed to support enterprise-level applications. Truffle is a popular development framework for creating and deploying Solidity contracts. + +Step 1: Install Truffle + +The first step is to install the XDC network and Truffle. This can be done by following the installation instructions provided by XDC and Truffle. + +{% embed url="https://trufflesuite.com/docs/truffle/how-to/install/" %} + +Step 2: Configure Truffle for XDC + +Next, Truffle needs to be configured to work with the XDC network. This involves creating a new Truffle project and configuring the Truffle config file to connect to the XDC network by using a public RPC connected to the XDC network. + +{% embed url="https://trufflesuite.com/docs/truffle/reference/configuration/" %} + +Step 3: Compile the Contract + +After updating the Solidity contract, it needs to be compiled for the XDC network. This involves using the Truffle compiler to create a bytecode file that can be deployed on the XDC network. + +{% embed url="https://trufflesuite.com/docs/truffle/how-to/compile-contracts/" %} + +Step 4: Deploy the Contract + +The next step is to deploy the updated contract on the XDC network. This can be done using Truffle's deployment commands. It is important to ensure that the contract is deployed correctly and securely. + + + +Step 5: Test the Contract + +After deploying the contract, it is important to thoroughly test it on the XDC network. This includes testing all functions and features, as well as testing for security vulnerabilities. You can write test in truffle using Javascript to build debug and test contract ready to be deployed onto the network + +{% embed url="https://trufflesuite.com/docs/truffle/how-to/debug-test/write-tests-in-javascript/" %} + +Step 6: Update Clients and Interfaces + +Once the contract has been migrated and tested, any clients or interfaces that interact with the contract must be updated to be compatible with the XDC network by having them point to the appropriate RPCs on the xdc network. + + + + + For a How-To guide showing migration of a dApp from Ethereum to the XDC Network please go to [this link](https://docs.xdc.community/learn/how-to-articles/how-to-migrate-a-dapp-from-ethereum-to-the-xdc-network-using-truffle). From 3d2e179f2944871a5be9d730a08dbd4001c4e2dc Mon Sep 17 00:00:00 2001 From: Quincy Jones Date: Wed, 5 Apr 2023 01:41:15 +0000 Subject: [PATCH 031/115] GITBOOK-163: change request with no subject merged in GitBook --- get-started/blockchain-basics/what-is-a-blockchain.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/get-started/blockchain-basics/what-is-a-blockchain.md b/get-started/blockchain-basics/what-is-a-blockchain.md index 422046e2..a9673fe0 100644 --- a/get-started/blockchain-basics/what-is-a-blockchain.md +++ b/get-started/blockchain-basics/what-is-a-blockchain.md @@ -1,12 +1,16 @@ # What is a Blockchain -A blockchain can be described simply through its name, but first let's take a look at its concept. Simply put, a blockchain is an open digital ledger that processes and records transactions. +A blockchain is a digital ledger that records and stores data in a decentralized manner. It is essentially a database that is managed by a network of computers, rather than a single central authority. Each block in the chain contains a cryptographic hash of the previous block, along with transaction data, and a timestamp. This creates a permanent and unalterable record of all transactions, making it very difficult to tamper with or manipulate the data. -Transactions on the network are processed, finalized, and recorded into groups called blocks. When a block is created, it makes a permanent record of all the transactions and state of the network. A cryptographic hash is then created to identify that block and can be used to verify its data. +One of the key features of a blockchain is its immutability, which means that once a transaction is recorded on the blockchain, it cannot be changed or deleted. This makes it a highly secure and transparent system, which is why it has become increasingly popular in the financial industry and beyond. + +Blockchains are used for a variety of purposes, including financial transactions, supply chain management, and identity verification. They can also be used to create smart contracts, which are self-executing contracts with the terms of the agreement written into code on the blockchain. + +Transactions on the network are processed, finalized, and recorded into groups called blocks by Validators . When a block is created, it makes a permanent record of all the transactions and state of the network. A cryptographic hash is then created to identify that block and can be used to verify its data. The chain aspect comes from each block being connected to each other. When a new block is created, data from the previous block is verified through its cryptographic hash, connecting the new block to the previous. This process continues as each block is created, moving the state of the network forward one block at a time. -So how are transactions verified and blocks created? The blockchain is operated by a global network of nodes. These nodes are basically computers that communicate with each other, transact data on the network, and create blocks. When a new block is created, nodes ensure that data across the network is aligned and verifies the history from the previous block. +The blockchain is operated by a global network of Validator nodes. These nodes are computers that, transact data, value, and create new blocks. When a new block is created, nodes ensure that data across the network is aligned and verifies the history from the previous block by getting consensus. From efba84bab9af74f5f887139386d50c4595e844cf Mon Sep 17 00:00:00 2001 From: Quincy Jones Date: Wed, 5 Apr 2023 01:52:52 +0000 Subject: [PATCH 032/115] GITBOOK-164: change request with no subject merged in GitBook --- get-started/blockchain-basics/what-is-a-dapp.md | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/get-started/blockchain-basics/what-is-a-dapp.md b/get-started/blockchain-basics/what-is-a-dapp.md index 2dc28c03..6b297b00 100644 --- a/get-started/blockchain-basics/what-is-a-dapp.md +++ b/get-started/blockchain-basics/what-is-a-dapp.md @@ -1,9 +1,16 @@ +--- +description: dApps are decentralized applications that operate on the blockchain +--- + # What is a dApp -Decentralized applications, commonly referred to as dApps, are applications that run on a decentralized network. With blockchain running on a network of nodes instead of centralized servers, applications built on them operate in a decentralized environment. This allows them to be accessible by participants on the network, provides transparency, and ensures that data and transactions are not owned by one governing authority. +An application on the blockchain are a decentralized software applications that operates on a blockchain network. It utilizes smart contracts to automate and execute transactions without the need for a central authority. The data and transactions are recorded on the blockchain, which provides transparency and security. Examples of blockchain applications include decentralized finance (DeFi) platforms, supply chain management systems, and voting systems. + +Blockchain applications have the potential to revolutionize the finance industry by enabling faster, more secure, and more transparent transactions. Decentralized finance (DeFi) platforms, for example, allow for peer-to-peer lending, borrowing, and trading of digital assets, without the need for intermediaries such as banks. This can reduce costs and increase access to financial services for individuals and businesses around the world. + + + + -The functionality of dApps is built using a blockchain technology called smart contracts. Smart contracts are basically a collection of code that execute commands on the blockchain. As more features and capabilities are built to operate the application, smart contracts are created to execute those functions. Ultimately, dApps operate through a collection of smart contracts on the blockchain. -So how do you use the dApp? Well, the collection of smart contracts built to run a dApp would be running on the back end. Users can interact with the back end through a front end user interface. When you are using an application online or on your phone, you are interacting with the front end. The front end is for interaction, with the backend executing functions and capabilities. -Not all dApps necessarily need a front end UI. Let's think about what an application is. An application simply executes a function or a need. Even a single smart contract can be an application if it executes a need. In a blockchain ecosystem, smart contracts can leverage other smart contracts built on the network. This can create functionalities that operate as applications all on the blockchain, or back end. From c740597af073a7ac947addd34f21f4b0ef058d12 Mon Sep 17 00:00:00 2001 From: Quincy Jones Date: Wed, 5 Apr 2023 01:55:37 +0000 Subject: [PATCH 033/115] GITBOOK-165: change request with no subject merged in GitBook --- get-started/blockchain-basics/what-is-a-dapp.md | 2 +- get-started/blockchain-basics/xdc-wallets.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/get-started/blockchain-basics/what-is-a-dapp.md b/get-started/blockchain-basics/what-is-a-dapp.md index 6b297b00..06cb41ed 100644 --- a/get-started/blockchain-basics/what-is-a-dapp.md +++ b/get-started/blockchain-basics/what-is-a-dapp.md @@ -4,7 +4,7 @@ description: dApps are decentralized applications that operate on the blockchain # What is a dApp -An application on the blockchain are a decentralized software applications that operates on a blockchain network. It utilizes smart contracts to automate and execute transactions without the need for a central authority. The data and transactions are recorded on the blockchain, which provides transparency and security. Examples of blockchain applications include decentralized finance (DeFi) platforms, supply chain management systems, and voting systems. +An application on the blockchain are a decentralized software applications (dApps). They utilizes smart contracts to automate and execute transactions without the need for a central authority. The data and transactions are recorded on the blockchain, which provides transparency and security. Examples of blockchain applications include decentralized finance (DeFi) platforms, supply chain management systems, and voting systems. Blockchain applications have the potential to revolutionize the finance industry by enabling faster, more secure, and more transparent transactions. Decentralized finance (DeFi) platforms, for example, allow for peer-to-peer lending, borrowing, and trading of digital assets, without the need for intermediaries such as banks. This can reduce costs and increase access to financial services for individuals and businesses around the world. diff --git a/get-started/blockchain-basics/xdc-wallets.md b/get-started/blockchain-basics/xdc-wallets.md index f0747720..e0b9b18e 100644 --- a/get-started/blockchain-basics/xdc-wallets.md +++ b/get-started/blockchain-basics/xdc-wallets.md @@ -17,7 +17,7 @@ When a user wants to send XDC tokens to another user, they create a transaction The XDC network is EVM compatible> The Ethereum Virtual Machine (EVM) is a decentralized virtual machine that was originally built on top of the Ethereum blockchain but has since been adopted by other chains and technology to leverage its functionality. The EVM is a critical component of the XDC ecosystem because it allows developers to write and deploy smart contracts on the XDC blockchain with traditionally Ethereum tool sets. -Smart contracts are self-executing contracts that are written in code they are what make up Dapps, Tokens, and automated agreements on the network. They can be used to automate the execution of contracts, agreements, and other types of applications. Smart contracts are executed by the EVM, which runs on top of the XDC blockchain. +Smart contracts are code that run on the blockchain, they are what make up Dapps, Tokens, and automated agreements on the network. They can be used to automate the execution of contracts, agreements, and other types of applications. Smart contracts are executed by the EVM, which runs on top of the XDC blockchain. The XDC network is fully compatible with the EVM, which means that developers can write and deploy smart contracts on the XDC network using the same tools and programming languages that they use on the Ethereum network. This is made possible by XDC's use of the Ethereum client, which provides full EVM compatibility. From 7da5acd1a24cd4864cbf741b665d6076979b94f5 Mon Sep 17 00:00:00 2001 From: Quincy Jones Date: Wed, 5 Apr 2023 02:02:22 +0000 Subject: [PATCH 034/115] GITBOOK-166: change request with no subject merged in GitBook --- SUMMARY.md | 2 +- tools/sdks-and-programming/soliditiy.md | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/SUMMARY.md b/SUMMARY.md index 0755f445..e5f251f8 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -48,7 +48,7 @@ * [XIP Proposals](get-details/xip-proposals.md) * [Tools](tools/README.md) * [SDKs & Programming](tools/sdks-and-programming/README.md) - * [Soliditiy](tools/sdks-and-programming/soliditiy.md) + * [Solidity](tools/sdks-and-programming/soliditiy.md) * [Python SDK](tools/sdks-and-programming/python.md) * [iOS Swift SDK](tools/sdks-and-programming/switft.md) * [Java SDK](tools/sdks-and-programming/java.md) diff --git a/tools/sdks-and-programming/soliditiy.md b/tools/sdks-and-programming/soliditiy.md index 797e0803..e46e2e96 100644 --- a/tools/sdks-and-programming/soliditiy.md +++ b/tools/sdks-and-programming/soliditiy.md @@ -1,2 +1,13 @@ +--- +description: >- + Solidity is the most adopted programing language for smart contract + developers and is used for all EVM compatible platforms. +--- + # Solidity +Solidity is a programming language used for writing smart contracts on the Ethereum blockchain. It is a high-level language similar to JavaScript and is designed to be easy to learn and use. Solidity supports inheritance, libraries, and complex user-defined types, making it suitable for developing complex decentralized applications. + +Solidity is used to write the smart contracts that power decentralized applications (dapps) on the Ethereum blockchain. These contracts define the rules and logic of the application, such as how tokens are distributed, how users can interact with the application, and how data is stored and managed. + +Developers use Solidity to write the code for these contracts, which are then compiled into bytecode and deployed to the XDC network on any other EVM compatible network. Once deployed, the contracts can be interacted with by users and other contracts on the blockchain, enabling the decentralized functionality of the dapp. From 6afd54b20f85f90ae52eed3c773a7c674e00361e Mon Sep 17 00:00:00 2001 From: Quincy Jones Date: Wed, 19 Apr 2023 15:16:39 +0000 Subject: [PATCH 035/115] GITBOOK-167: change request with no subject merged in GitBook --- .gitbook/assets/.gitignore | 1854 ++++++++++++++++- .gitbook/assets/.gitignore (1) | 50 + .gitbook/assets/.gitignore (2) | 2 + .gitbook/assets/LICENSE (1).txt | 1750 ++++++++++++++++ .gitbook/assets/LICENSE.txt | 7 + .gitbook/assets/MANIFEST.in | 1 + .gitbook/assets/__init__.py | 0 .gitbook/assets/code frequency | 1221 +++++++++++ .gitbook/assets/commit activity | 1209 +++++++++++ .gitbook/assets/contributors | 1272 +++++++++++ .gitbook/assets/createAccount.py | 9 + .gitbook/assets/daily | 1312 ++++++++++++ .gitbook/assets/dependencies | 1255 +++++++++++ .gitbook/assets/halfweekly | 1312 ++++++++++++ .gitbook/assets/members | 1217 +++++++++++ .gitbook/assets/monthly | 1312 ++++++++++++ .gitbook/assets/network | 1208 +++++++++++ .gitbook/assets/settings.json | 5 + .gitbook/assets/setup.py | 15 + .gitbook/assets/xrc20.py | 318 +++ .gitbook/assets/xrc721.py | 281 +++ .gitbook/assets/you_know | 396 ++++ SUMMARY.md | 22 +- .../xrc-standards/xrc721.md | 2 +- get-started/tokenization.md | 3 +- get-started/xdc-design/xdpos-2.0.md | 2 +- tools/sdks-and-programming/javascript.md | 4 +- tools/sdks-and-programming/php-sdk.md | 4 +- tools/sdks-and-programming/python.md | 2 - tools/sdks-and-programming/python/README.md | 70 + tools/sdks-and-programming/python/actions.md | 43 + tools/sdks-and-programming/python/branches.md | 47 + .../build-software-better-together-1.md | 47 + .../python/build-software-better-together.md | 92 + tools/sdks-and-programming/python/commits.md | 3 + ...n-main-coinclubquincy-xdc_python_sdk_v1.md | 69 + tools/sdks-and-programming/python/forks.md | 92 + ...6fa7e5dea1afa40be77f29200876e9ab0088403.md | 72 + .../python/github-python-sdk-for-xdc.md | 72 + .../python/pull-requests.md | 47 + tools/sdks-and-programming/python/pulse.md | 111 + tools/sdks-and-programming/python/releases.md | 5 + .../sdks-and-programming/python/stargazers.md | 113 + .../xdc_python_sdk_v1-.gitignore-at-main.md | 65 + .../xdc_python_sdk_v1-.vscode-at-main.md | 3 + .../xdc_python_sdk_v1-license.txt-at-main.md | 46 + .../xdc_python_sdk_v1-manifest.in-at-main.md | 3 + .../xdc_python_sdk_v1-readme.md-at-main.md | 72 + .../xdc_python_sdk_v1-setup.py-at-main.md | 30 + .../xdc_python_sdk_v1-xdc3python-at-main.md | 3 + tools/sdks-and-programming/switft.md | 6 +- 51 files changed, 17140 insertions(+), 16 deletions(-) create mode 100644 .gitbook/assets/.gitignore (1) create mode 100644 .gitbook/assets/.gitignore (2) create mode 100644 .gitbook/assets/LICENSE (1).txt create mode 100644 .gitbook/assets/LICENSE.txt create mode 100644 .gitbook/assets/MANIFEST.in create mode 100644 .gitbook/assets/__init__.py create mode 100644 .gitbook/assets/code frequency create mode 100644 .gitbook/assets/commit activity create mode 100644 .gitbook/assets/contributors create mode 100644 .gitbook/assets/createAccount.py create mode 100644 .gitbook/assets/daily create mode 100644 .gitbook/assets/dependencies create mode 100644 .gitbook/assets/halfweekly create mode 100644 .gitbook/assets/members create mode 100644 .gitbook/assets/monthly create mode 100644 .gitbook/assets/network create mode 100644 .gitbook/assets/settings.json create mode 100644 .gitbook/assets/setup.py create mode 100644 .gitbook/assets/xrc20.py create mode 100644 .gitbook/assets/xrc721.py create mode 100644 .gitbook/assets/you_know delete mode 100644 tools/sdks-and-programming/python.md create mode 100644 tools/sdks-and-programming/python/README.md create mode 100644 tools/sdks-and-programming/python/actions.md create mode 100644 tools/sdks-and-programming/python/branches.md create mode 100644 tools/sdks-and-programming/python/build-software-better-together-1.md create mode 100644 tools/sdks-and-programming/python/build-software-better-together.md create mode 100644 tools/sdks-and-programming/python/commits.md create mode 100644 tools/sdks-and-programming/python/comparing-coinclubquincy-main...xdcfoundation-main-coinclubquincy-xdc_python_sdk_v1.md create mode 100644 tools/sdks-and-programming/python/forks.md create mode 100644 tools/sdks-and-programming/python/github-at-66fa7e5dea1afa40be77f29200876e9ab0088403.md create mode 100644 tools/sdks-and-programming/python/github-python-sdk-for-xdc.md create mode 100644 tools/sdks-and-programming/python/pull-requests.md create mode 100644 tools/sdks-and-programming/python/pulse.md create mode 100644 tools/sdks-and-programming/python/releases.md create mode 100644 tools/sdks-and-programming/python/stargazers.md create mode 100644 tools/sdks-and-programming/python/xdc_python_sdk_v1-.gitignore-at-main.md create mode 100644 tools/sdks-and-programming/python/xdc_python_sdk_v1-.vscode-at-main.md create mode 100644 tools/sdks-and-programming/python/xdc_python_sdk_v1-license.txt-at-main.md create mode 100644 tools/sdks-and-programming/python/xdc_python_sdk_v1-manifest.in-at-main.md create mode 100644 tools/sdks-and-programming/python/xdc_python_sdk_v1-readme.md-at-main.md create mode 100644 tools/sdks-and-programming/python/xdc_python_sdk_v1-setup.py-at-main.md create mode 100644 tools/sdks-and-programming/python/xdc_python_sdk_v1-xdc3python-at-main.md diff --git a/.gitbook/assets/.gitignore b/.gitbook/assets/.gitignore index 97dba2e5..a9497da4 100644 --- a/.gitbook/assets/.gitignore +++ b/.gitbook/assets/.gitignore @@ -1,2 +1,1852 @@ -*_network -nodes* \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + XDC_Python_SDK_V1/.gitignore at 66fa7e5dea1afa40be77f29200876e9ab0088403 · XDCFoundation/XDC_Python_SDK_V1 · GitHub + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ Skip to content + + + + + + + + + + + + +
+ +
+ + + + + + + +
+ + + + + + +
+ + + + + + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + +
+ + + + + +
+ + +
+ + + + + + + +Permalink + +
+ +
+
+ + + 66fa7e5dea + + + + +
+
+
+ Switch branches/tags + +
+ + + +
+ +
+ +
+ + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + +
+
+
+
+ +
+ +
+ + +
+ +
+
+
+

Name already in use

+
+
+ +
+
+
+
+ +
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch? +
+ +
+
+ + +
+
+ + + + Go to file + +
+ + + + +
+
+
+ + + + + + + + + +
+ +
+
+
 
+
+ +
+
 
+ Cannot retrieve contributors at this time +
+
+ + + + + + + + + +
+ +
+ + +
+ + 50 lines (37 sloc) + + 624 Bytes +
+ +
+ + + + +
+ +
+
+
+
+ +
+
+
+
+
+ +
+
+
+
+
+ + + +
+
+ + + +
+
+ +
+ +
+
+ + + +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
# These are some examples of commonly ignored file patterns.
# You should customize this list as applicable to your project.
# Learn more about .gitignore:
# https://www.atlassian.com/git/tutorials/saving-changes/gitignore
+
# Node artifact files
node_modules/
dist/
+
# Compiled Java class files
*.class
+
# Compiled Python bytecode
*.py[cod]
+
# Log files
*.log
+
# Package files
*.jar
+
# Maven
target/
dist/
+
# JetBrains IDE
.idea/
+
# Unit test reports
TEST*.xml
+
# Generated by MacOS
.DS_Store
+
# Generated by Windows
Thumbs.db
+
# Applications
*.app
*.exe
*.war
+
# Large media files
*.mp4
*.tiff
*.avi
*.flv
*.mov
*.wmv
+
+
+ + + +
+ +
+ + + + +
+ + +
+ + +
+
+ + + +
+ +
+ + +
+ +
+ + +
+
+ +
+ + + + + + + + + + + + + + + + + + +
+ +
+ + + diff --git a/.gitbook/assets/.gitignore (1) b/.gitbook/assets/.gitignore (1) new file mode 100644 index 00000000..b24d71e2 --- /dev/null +++ b/.gitbook/assets/.gitignore (1) @@ -0,0 +1,50 @@ +# These are some examples of commonly ignored file patterns. +# You should customize this list as applicable to your project. +# Learn more about .gitignore: +# https://www.atlassian.com/git/tutorials/saving-changes/gitignore + +# Node artifact files +node_modules/ +dist/ + +# Compiled Java class files +*.class + +# Compiled Python bytecode +*.py[cod] + +# Log files +*.log + +# Package files +*.jar + +# Maven +target/ +dist/ + +# JetBrains IDE +.idea/ + +# Unit test reports +TEST*.xml + +# Generated by MacOS +.DS_Store + +# Generated by Windows +Thumbs.db + +# Applications +*.app +*.exe +*.war + +# Large media files +*.mp4 +*.tiff +*.avi +*.flv +*.mov +*.wmv + diff --git a/.gitbook/assets/.gitignore (2) b/.gitbook/assets/.gitignore (2) new file mode 100644 index 00000000..97dba2e5 --- /dev/null +++ b/.gitbook/assets/.gitignore (2) @@ -0,0 +1,2 @@ +*_network +nodes* \ No newline at end of file diff --git a/.gitbook/assets/LICENSE (1).txt b/.gitbook/assets/LICENSE (1).txt new file mode 100644 index 00000000..b3f85a13 --- /dev/null +++ b/.gitbook/assets/LICENSE (1).txt @@ -0,0 +1,1750 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + XDC_Python_SDK_V1/LICENSE.txt at 66fa7e5dea1afa40be77f29200876e9ab0088403 · XDCFoundation/XDC_Python_SDK_V1 · GitHub + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ Skip to content + + + + + + + + + + + + +
+ +
+ + + + + + + +
+ + + + + + +
+ + + + + + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + +
+ + + + + +
+ + +
+ + + + + + + +Permalink + +
+ +
+
+ + + 66fa7e5dea + + + + +
+
+
+ Switch branches/tags + +
+ + + +
+ +
+ +
+ + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + +
+
+
+
+ +
+ +
+ + +
+ +
+
+
+

Name already in use

+
+
+ +
+
+
+
+ +
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch? +
+ +
+
+ + +
+
+ + + + Go to file + +
+ + + + +
+
+
+ + + +
+
+
+ +

+ XDCFoundation/XDC_Python_SDK_V1 + is licensed under the +

+

MIT License

+

A short and simple permissive license with conditions only requiring preservation of copyright and license notices. Licensed works, modifications, and larger works may be distributed under different terms and without source code.

+
+ +
+
+

Permissions

+
    +
  • + + + Commercial use + +
  • +
  • + + + Modification + +
  • +
  • + + + Distribution + +
  • +
  • + + + Private use + +
  • +
+
+
+

Limitations

+
    +
  • + + + Liability + +
  • +
  • + + + Warranty + +
  • +
+
+
+

Conditions

+
    +
  • + + + License and copyright notice + +
  • +
+
+
+
+

+ This is not legal advice. + Learn more about repository licenses. +

+
+ + + + + + + +
+ +
+
+
 
+
+ +
+
 
+ Cannot retrieve contributors at this time +
+
+ + + + + + + + + +
+ +
+ + +
+ + 7 lines (4 sloc) + + 1.04 KB +
+ +
+ + + + +
+ +
+
+
+
+ +
+
+
+
+
+ +
+
+
+
+
+ + + +
+
+ + + +
+
+ +
+ +
+
+ + + +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Copyright © 2022 XDC Foundation
+
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ + + +
+ +
+ + + + +
+ + +
+ + +
+
+ + + +
+ +
+ + +
+ +
+ + +
+
+ +
+ + + + + + + + + + + + + + + + + + +
+ +
+ + + diff --git a/.gitbook/assets/LICENSE.txt b/.gitbook/assets/LICENSE.txt new file mode 100644 index 00000000..7fc64099 --- /dev/null +++ b/.gitbook/assets/LICENSE.txt @@ -0,0 +1,7 @@ +Copyright © 2022 XDC Foundation + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/.gitbook/assets/MANIFEST.in b/.gitbook/assets/MANIFEST.in new file mode 100644 index 00000000..e5bb1bf4 --- /dev/null +++ b/.gitbook/assets/MANIFEST.in @@ -0,0 +1 @@ +global-include *.txt *.py *.md \ No newline at end of file diff --git a/.gitbook/assets/__init__.py b/.gitbook/assets/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/.gitbook/assets/code frequency b/.gitbook/assets/code frequency new file mode 100644 index 00000000..6dce0395 --- /dev/null +++ b/.gitbook/assets/code frequency @@ -0,0 +1,1221 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Code frequency · XDCFoundation/XDC_Python_SDK_V1 · GitHub + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ Skip to content + + + + + + + + + + + + +
+ +
+ + + + + + + +
+ + + + + + +
+ + + + + + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + +
+ + + + + +

Insights: XDCFoundation/XDC_Python_SDK_V1

+
+
+ + +
+ +
+
+

Code frequency over the history of + XDCFoundation/XDC_Python_SDK_V1 +

+ + +
+

+ + Additions and + Deletions per week + +

+ +
+
+ + + + +
+

Crunching the latest data, just for you. Hang tight…

+
+
+

We don’t have enough data to show anything useful.

+

It usually takes about a week to populate this graph.

+
+
+

We need at least one non-empty commit with an email to generate this graph.

+
+
+ +
+ +

We tried our best, but the graph wouldn’t load. Try reloading the page.

+ + + +
+
+
+
+ +
+
+ + +
+ +
+ + +
+
+ +
+ + + + + + + + + + + + + + + + + + +
+ +
+ + + diff --git a/.gitbook/assets/commit activity b/.gitbook/assets/commit activity new file mode 100644 index 00000000..f659fa40 --- /dev/null +++ b/.gitbook/assets/commit activity @@ -0,0 +1,1209 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Commit Activity · XDCFoundation/XDC_Python_SDK_V1 · GitHub + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ Skip to content + + + + + + + + + + + + +
+ +
+ + + + + + + +
+ + + + + + +
+ + + + + + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + +
+ + + + + +

Insights: XDCFoundation/XDC_Python_SDK_V1

+
+
+ + +
+ +
+ +
+
+ + + + +
+

Crunching the latest data, just for you. Hang tight…

+
+
+

We don’t have enough data to show anything useful.

+

It usually takes about a week to populate this graph.

+
+
+

We need at least one non-empty commit with an email to generate this graph.

+
+
+ +
+ +

We tried our best, but the graph wouldn’t load. Try reloading the page.

+ + + +
+
+
+
+
+
+ +
+
+ + +
+ +
+ + +
+
+ +
+ + + + + + + + + + + + + + + + + + +
+ +
+ + + diff --git a/.gitbook/assets/contributors b/.gitbook/assets/contributors new file mode 100644 index 00000000..618465f6 --- /dev/null +++ b/.gitbook/assets/contributors @@ -0,0 +1,1272 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Contributors to XDCFoundation/XDC_Python_SDK_V1 · GitHub + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ Skip to content + + + + + + + + + + + + +
+ +
+ + + + + + + +
+ + + + + + +
+ + + + + + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + +
+ + + + + +

Insights: XDCFoundation/XDC_Python_SDK_V1

+
+
+ + +
+ + +
+
+

Loading contributions…

+ +
+ Contributions: + Commits + +
+ Filter contributions +
+
+ + + +
+
+
+
+

Contributions to main, excluding merge commits and bot accounts

+ +
+ +
+ +
+ +
+
+ + + + +
+

Crunching the latest data, just for you. Hang tight…

+
+
+

We don’t have enough data to show anything useful.

+

It usually takes about a week to populate this graph.

+
+
+

We need at least one non-empty commit with an email to generate this graph.

+
+
+ +
+ +

We tried our best, but the graph wouldn’t load. Try reloading the page.

+ + + +
+
+
+
+ +
+
+ + +
+ +
+ + +
+
+ +
+ + + + + + + + + + + + + + + + + + +
+ +
+ + + diff --git a/.gitbook/assets/createAccount.py b/.gitbook/assets/createAccount.py new file mode 100644 index 00000000..c3d01c61 --- /dev/null +++ b/.gitbook/assets/createAccount.py @@ -0,0 +1,9 @@ +from bitcoin import random_key + + + +# Gets private key of wallet to create new account. + +def createAccount(): + privateKey = random_key() + return privateKey \ No newline at end of file diff --git a/.gitbook/assets/daily b/.gitbook/assets/daily new file mode 100644 index 00000000..bf68f189 --- /dev/null +++ b/.gitbook/assets/daily @@ -0,0 +1,1312 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Pulse · XDCFoundation/XDC_Python_SDK_V1 · GitHub + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ Skip to content + + + + + + + + + + + + +
+ +
+ + + + + + + +
+ + + + + + +
+ + + + + + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+ + + + + +

Insights: XDCFoundation/XDC_Python_SDK_V1

+
+
+ + +
+ +
+

April 18, 2023 April 19, 2023

+ +
+ Period: + 24 hours + +
+ Filter activity +
+ +
+
+
+
+
+
+

Overview

+
+ +
    +
  • +
    +
    +
    +
    + 0 + Active pull requests +
    +
    + +
    +
    +
    +
    + 0 + Active issues +
    +
    +
  • + +
  • +
      +
    • + + + 0 + + Merged pull requests +
    • +
    • + + + 0 + + Open pull requests +
    • +
    • + + + 0 + + Closed issues +
    • +
    • + + + 0 + + New issues +
    • +
    +
  • +
+
+ +
+ +

There hasn’t been any commit activity on XDCFoundation/XDC_Python_SDK_V1 in the last 24 hours.

+ +

Want to help out?

+

+

+

+ +
+
+ + +
+ +
+
+ + +
+ +
+ + +
+
+ +
+ + + + + + + + + + + + + + + + + + +
+ +
+ + + diff --git a/.gitbook/assets/dependencies b/.gitbook/assets/dependencies new file mode 100644 index 00000000..8d61fb96 --- /dev/null +++ b/.gitbook/assets/dependencies @@ -0,0 +1,1255 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Dependencies · XDCFoundation/XDC_Python_SDK_V1 · GitHub + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ Skip to content + + + + + + + + + + + + +
+ +
+ + + + + + + +
+ + + + + + +
+ + + + + + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + +
+ + + + + +

Insights: XDCFoundation/XDC_Python_SDK_V1

+
+
+ + +
+ + +
+
+

Dependency graph

+ + +
+ + + + + + +
+
+ + +
+ + + + + +
+ +
+
+
+ +
+
+ + +

No dependencies found.

+

+ To view your dependency graph, your repository must define dependencies in + one of the supported manifest file types, like package.json or Gemfile. +

+

+ +
+
+ +
+
+ + +
+ +
+ + +
+
+ +
+ + + + + + + + + + + + + + + + + + +
+ +
+ + + diff --git a/.gitbook/assets/halfweekly b/.gitbook/assets/halfweekly new file mode 100644 index 00000000..8f571a17 --- /dev/null +++ b/.gitbook/assets/halfweekly @@ -0,0 +1,1312 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Pulse · XDCFoundation/XDC_Python_SDK_V1 · GitHub + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ Skip to content + + + + + + + + + + + + +
+ +
+ + + + + + + +
+ + + + + + +
+ + + + + + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+ + + + + +

Insights: XDCFoundation/XDC_Python_SDK_V1

+
+
+ + +
+ +
+

April 16, 2023 April 19, 2023

+ +
+ Period: + 3 days + +
+ Filter activity +
+ +
+
+
+
+
+
+

Overview

+
+ +
    +
  • +
    +
    +
    +
    + 0 + Active pull requests +
    +
    + +
    +
    +
    +
    + 0 + Active issues +
    +
    +
  • + +
  • +
      +
    • + + + 0 + + Merged pull requests +
    • +
    • + + + 0 + + Open pull requests +
    • +
    • + + + 0 + + Closed issues +
    • +
    • + + + 0 + + New issues +
    • +
    +
  • +
+
+ +
+ +

There hasn’t been any commit activity on XDCFoundation/XDC_Python_SDK_V1 in the last 3 days.

+ +

Want to help out?

+

+

+

+ +
+
+ + +
+ +
+
+ + +
+ +
+ + +
+
+ +
+ + + + + + + + + + + + + + + + + + +
+ +
+ + + diff --git a/.gitbook/assets/members b/.gitbook/assets/members new file mode 100644 index 00000000..af7aa588 --- /dev/null +++ b/.gitbook/assets/members @@ -0,0 +1,1217 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Forks · XDCFoundation/XDC_Python_SDK_V1 · GitHub + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ Skip to content + + + + + + + + + + + + +
+ +
+ + + + + + + +
+ + + + + + +
+ + + + + + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + +
+ + + + + +

Insights: XDCFoundation/XDC_Python_SDK_V1

+
+
+ + +
+ + + +
+
+ +
+ + + + @CoinClubQuincy + + CoinClubQuincy + / + XDC_Python_SDK_V1 +
+ +
+ + + + + + + @XDCFoundation + + XDCFoundation + / + XDC_Python_SDK_V1 +
+ +
+
+ +
+
+ + +
+ +
+ + +
+
+ +
+ + + + + + + + + + + + + + + + + + +
+ +
+ + + diff --git a/.gitbook/assets/monthly b/.gitbook/assets/monthly new file mode 100644 index 00000000..7f71f25b --- /dev/null +++ b/.gitbook/assets/monthly @@ -0,0 +1,1312 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Pulse · XDCFoundation/XDC_Python_SDK_V1 · GitHub + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ Skip to content + + + + + + + + + + + + +
+ +
+ + + + + + + +
+ + + + + + +
+ + + + + + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+ + + + + +

Insights: XDCFoundation/XDC_Python_SDK_V1

+
+
+ + +
+ +
+

March 19, 2023 April 19, 2023

+ +
+ Period: + 1 month + +
+ Filter activity +
+ +
+
+
+
+
+
+

Overview

+
+ +
    +
  • +
    +
    +
    +
    + 0 + Active pull requests +
    +
    + +
    +
    +
    +
    + 0 + Active issues +
    +
    +
  • + +
  • +
      +
    • + + + 0 + + Merged pull requests +
    • +
    • + + + 0 + + Open pull requests +
    • +
    • + + + 0 + + Closed issues +
    • +
    • + + + 0 + + New issues +
    • +
    +
  • +
+
+ +
+ +

There hasn’t been any commit activity on XDCFoundation/XDC_Python_SDK_V1 in the last month.

+ +

Want to help out?

+

+

+

+ +
+
+ + +
+ +
+
+ + +
+ +
+ + +
+
+ +
+ + + + + + + + + + + + + + + + + + +
+ +
+ + + diff --git a/.gitbook/assets/network b/.gitbook/assets/network new file mode 100644 index 00000000..4054b923 --- /dev/null +++ b/.gitbook/assets/network @@ -0,0 +1,1208 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Network Graph · XDCFoundation/XDC_Python_SDK_V1 · GitHub + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ Skip to content + + + + + + + + + + + + +
+ +
+ + + + + + + +
+ + + + + + +
+ + + + + + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + +
+ + + + + +

Insights: XDCFoundation/XDC_Python_SDK_V1

+
+
+ + +
+ +
+
+

Network graph

+ + +

Timeline of the most recent commits to this repository and its network ordered by most recently pushed to.

+
+ +
+ + +

Sorry, your browser doesn’t support the <canvas> element.

+

Please upgrade to the latest Internet Explorer, Chrome or Firefox.

+
+ +
+ + +
+ +
+
+ + +
+ +
+ + +
+
+ +
+ + + + + + + + + + + + + + + + + + +
+ +
+ + + diff --git a/.gitbook/assets/settings.json b/.gitbook/assets/settings.json new file mode 100644 index 00000000..89745197 --- /dev/null +++ b/.gitbook/assets/settings.json @@ -0,0 +1,5 @@ +{ + "python.analysis.extraPaths": [ + "./modules" + ] +} \ No newline at end of file diff --git a/.gitbook/assets/setup.py b/.gitbook/assets/setup.py new file mode 100644 index 00000000..28e3abeb --- /dev/null +++ b/.gitbook/assets/setup.py @@ -0,0 +1,15 @@ +from setuptools import setup, find_packages + + + +setup( + name = 'XDC3PYTHON', + version = '1.0.1', + description = 'XDC PYTHON SDK with support for smart contracts, XRC20 & XRC721', + long_description=open('README.md').read(), + url='https://github.com/XDCFoundation/XDC_Python_SDK_V1.git', + author='XDC Foundation', + license='MIT', + keywords='', + packages=find_packages(), +) \ No newline at end of file diff --git a/.gitbook/assets/xrc20.py b/.gitbook/assets/xrc20.py new file mode 100644 index 00000000..03fe9057 --- /dev/null +++ b/.gitbook/assets/xrc20.py @@ -0,0 +1,318 @@ +from web3 import Web3 +from web3._utils.encoding import ( + hexstr_if_str, + to_bytes, +) + +# xrc20 abi.json +xrc20abi = "[{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_spender\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_from\",\"type\":\"address\"},{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"balance\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"},{\"name\":\"_spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"}]" + + +# This is a class which consists all the methods as per XRC20 standards. + +class XRC20: + + def __init__(self,rpcUrl): + self.rpcUrl = rpcUrl + + # connection to network. + + def getConnection(self): + w3 = Web3(Web3.HTTPProvider(self.rpcUrl)) + return w3 + + # get contract Instance. + + def getContractInstance(self, tokenAddr): + contractInstance = self.getConnection().eth.contract(address=tokenAddr, abi=xrc20abi) + return contractInstance + + # Gets the Name of the specified address. + # Token address is required as argument. + + def name(self, tokenAddr): + name = self.getContractInstance(tokenAddr).functions.name().call() + return name + + # Gets method returns total supply of token. + # Token address is required as argument. + + def totalSupply(self, tokenAddr): + totalSupply = self.getContractInstance(tokenAddr).functions.totalSupply().call() + totalSupply = self.getConnection().fromWei(totalSupply, 'ether') + return totalSupply + + # Gets the Decimal of the specified address. + # Token address is required as argument. + + def decimal(self, tokenAddr): + decimal = self.getContractInstance(tokenAddr).functions.decimals().call() + return decimal + + # Gets the Symbol of the specified address. + # Token address is required as argument. + + def symbol(self, tokenAddr): + symbol = self.getContractInstance(tokenAddr).functions.symbol().call() + return symbol + + # Gets the balance of the specified address. + # token address, owner address are required as arguments. + + def balanceOf(self, tokenAddr, ownerAddress): + owner = Web3.toChecksumAddress(ownerAddress) + balance = self.getContractInstance(tokenAddr).functions.balanceOf(owner).call() + return self.getConnection().fromWei(balance, 'ether') + + # This method returns how much allowance spender have from owner. + # This function required three arguments. + # owner address, spender address, token address. + + def allowance(self, tokenAddr, ownerAddress, spenderAddress): + owner = Web3.toChecksumAddress(ownerAddress) + spender = Web3.toChecksumAddress(spenderAddress) + Allowance = self.getContractInstance(tokenAddr).functions.allowance(owner, spender).call() + return self.getConnection().fromWei(Allowance, 'ether') + + # Transfer XDC for a specified address. + # This function requires following arguments. + # private key, recipient address, amount. + + def transferXDC(self, ownerAddress, receiverAddress, ownerPrivateKey, amount): + + owner = Web3.toChecksumAddress(ownerAddress) + spender = Web3.toChecksumAddress(receiverAddress) + amount = self.getConnection().toWei(amount, 'ether') + + nonce = self.getConnection().eth.getTransactionCount(owner) + gasPrice = self.getConnection().eth.gas_price + estimateGas = self.getConnection().eth.estimateGas({ + 'to': spender, + 'from': owner, + 'value': amount + }) + + tx = { + 'nonce': nonce, + 'to': spender, + 'value': amount, + 'gas': estimateGas, + 'gasPrice': gasPrice, + } + + signedTx = self.getConnection().eth.account.signTransaction(tx, ownerPrivateKey) + + txHash = self.getConnection().eth.sendRawTransaction(signedTx.rawTransaction) + return self.getConnection().toHex(txHash) + + # Transfer token for a specified address. + # This function requires following arguments. + # ownerAddress, ownerPrivateKey, receiver address, token address, amount. + + def transferToken(self, tokenAddr, ownerAddress, ownerPrivateKey, receiverAddress, amount): + + owner = Web3.toChecksumAddress(ownerAddress) + spender = Web3.toChecksumAddress(receiverAddress) + + balance = self.balanceOf(tokenAddr,owner) + + if amount > balance: + return "amount exceeds balance" + + amount = self.getConnection().toWei(amount, 'ether') + + Transfer = self.getContractInstance(tokenAddr).functions.transfer(spender, amount) + + hexData = Transfer._encode_transaction_data() + + data = hexstr_if_str(to_bytes, hexData) + + estimateGas = Transfer.estimateGas( + { + 'from': owner, + } + ) + + nonce = self.getConnection().eth.getTransactionCount(owner) + gasPrice = self.getConnection().eth.gas_price + + tx = { + 'nonce': nonce, + 'to': tokenAddr, + 'data': data, + 'gas': estimateGas, + 'gasPrice': gasPrice, + } + + signedTx = self.getConnection().eth.account.signTransaction(tx, ownerPrivateKey) + + txHash = self.getConnection().eth.sendRawTransaction(signedTx.rawTransaction) + return self.getConnection().toHex(txHash) + + # Approve the passed address to spend the specified amount of tokens on behalf of owner. + # This function required arguments. + # ownerAddress, ownerPrivateKey, spenderAddress, tokenAddr, amount. + + def approve(self, tokenAddr, ownerAddress, ownerPrivateKey, spenderAddress, amount): + + owner = Web3.toChecksumAddress(ownerAddress) + spender = Web3.toChecksumAddress(spenderAddress) + + balance = self.balanceOf(tokenAddr, owner) + allowanceAmount = self.allowance(tokenAddr, owner, spender) + + if amount > balance and allowanceAmount > balance: + return "amount exceeds balance" + + amount = self.getConnection().toWei(amount, 'ether') + + approveData = self.getContractInstance(tokenAddr).functions.approve(spender, amount) + + hexData = approveData._encode_transaction_data() + + data = hexstr_if_str(to_bytes, hexData) + + estimateGas = approveData.estimateGas() + + nonce = self.getConnection().eth.getTransactionCount(owner) + + gasPrice = self.getConnection().eth.gas_price + + tx = { + 'nonce': nonce, + 'to': tokenAddr, + 'data': data, + 'gas': estimateGas, + 'gasPrice': gasPrice, + } + + signedTx = self.getConnection().eth.account.signTransaction(tx, ownerPrivateKey) + + txHash = self.getConnection().eth.sendRawTransaction(signedTx.rawTransaction) + return self.getConnection().toHex(txHash) + + # increase the amount of tokens that an owner allowed to a spender. + # This function required arguments. + # owner address, ownerPrivateKey, spender address, token address, amount. + + def increaseAllowance(self, tokenAddr, ownerAddress, ownerPrivateKey, spenderAddress, amount): + + + owner = Web3.toChecksumAddress(ownerAddress) + spender = Web3.toChecksumAddress(spenderAddress) + + balance = self.balanceOf(tokenAddr, owner) + + allowanceAmount = self.allowance(tokenAddr, owner , spender) + + allowanceAmount = self.getConnection().fromWei(allowanceAmount, 'ether') + + totalAmount = allowanceAmount + amount + + if totalAmount > balance: + return "amount exceeds balance" + + totalAmount = self.getConnection().toWei(totalAmount, 'ether') + + Transfer = self.getContractInstance(tokenAddr).functions.approve(spender, totalAmount) + + hexData = Transfer._encode_transaction_data() + + data = hexstr_if_str(to_bytes, hexData) + + estimateGas = Transfer.estimateGas() + + nonce = self.getConnection().eth.getTransactionCount(owner) + gasPrice = self.getConnection().eth.gas_price + + tx = { + 'nonce': nonce, + 'to': tokenAddr, + 'data': data, + 'gas': estimateGas, + 'gasPrice': gasPrice, + } + signedTx = self.getConnection().eth.account.signTransaction(tx, ownerPrivateKey) + + txHash = self.getConnection().eth.sendRawTransaction(signedTx.rawTransaction) + return self.getConnection().toHex(txHash) + + # decrease the amount of tokens that an owner allowed to a spender. + # This function required arguments. + # owner address, ownerPrivateKey, spender address, token address, amount. + + def decreaseAllowance(self, tokenAddr, ownerAddress, ownerPrivateKey, spenderAddress, amount): + + owner = Web3.toChecksumAddress(ownerAddress) + spender = Web3.toChecksumAddress(spenderAddress) + + allowanceAmount = self.allowance(tokenAddr, owner, spender) + allowanceAmount = self.getConnection().fromWei(allowanceAmount, 'ether') + + if allowanceAmount >= amount: + totalAmount = allowanceAmount - amount + else: + totalAmount = amount - allowanceAmount + + totalAmount = self.getConnection().toWei(totalAmount, 'ether') + + approveData = self.getContractInstance(tokenAddr).functions.approve(spender, totalAmount) + + hexData = approveData._encode_transaction_data() + + data = hexstr_if_str(to_bytes, hexData) + + estimateGas = approveData.estimateGas() + + nonce = self.getConnection().eth.getTransactionCount(owner) + gasPrice = self.getConnection().eth.gas_price + + tx = { + 'nonce': nonce, + 'to': tokenAddr, + 'data': data, + 'gas': estimateGas, + 'gasPrice': gasPrice, + } + signedTx = self.getConnection().eth.account.signTransaction(tx, ownerPrivateKey) + + txHash = self.getConnection().eth.sendRawTransaction(signedTx.rawTransaction) + return self.getConnection().toHex(txHash) + + # Transfer tokens from one address to another. + # This function requires following arguments. + # owner address, spenderPrivateKey, spender address, receiver address, token address, amount. + + def transferFrom(self, tokenAddr, ownerAddress, spenderPrivateKey, spenderAddress, receiver, amount): + + owner = Web3.toChecksumAddress(ownerAddress) + receiverAddres = Web3.toChecksumAddress(receiver) + spender = Web3.toChecksumAddress(spenderAddress) + + amount = self.getConnection().toWei(amount, 'ether') + + transferData = self.getContractInstance(tokenAddr).functions.transferFrom( + owner, receiverAddres, amount) + + estimateGas = transferData.estimateGas({ + 'from': spender, + }) + + hexData = transferData._encode_transaction_data() + + data = hexstr_if_str(to_bytes, hexData) + + nonce = self.getConnection().eth.getTransactionCount(spender) + gasPrice = self.getConnection().eth.gas_price + + tx = { + 'nonce': nonce, + 'to': tokenAddr, + 'data': data, + 'gas': estimateGas, + 'gasPrice': gasPrice, + } + signedTx = self.getConnection().eth.account.signTransaction(tx, spenderPrivateKey) + + txHash = self.getConnection().eth.sendRawTransaction(signedTx.rawTransaction) + return self.getConnection().toHex(txHash) diff --git a/.gitbook/assets/xrc721.py b/.gitbook/assets/xrc721.py new file mode 100644 index 00000000..2740422a --- /dev/null +++ b/.gitbook/assets/xrc721.py @@ -0,0 +1,281 @@ +from web3 import Web3 +from web3._utils.encoding import ( + hexstr_if_str, + to_bytes, +) + + +# xrc721 abi.json +xrc721abi = "[{\"constant\":true,\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"},{\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"tokenOfOwnerByIndex\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"tokenByIndex\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"tokenId\",\"type\":\"uint256\"},{\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom1\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"name\":\"_uri\",\"type\":\"string\"}],\"name\":\"mint\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"},{\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"name\",\"type\":\"string\"},{\"name\":\"symbol\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"}]" + + +# This is a class which consists all the methods as per XRC721 standards. + +class XRC721: + + def __init__(self,rpcUrl): + self.rpcUrl = rpcUrl + + # connection to network. + + def getConnection(self): + w3 = Web3(Web3.HTTPProvider(self.rpcUrl)) + return w3 + + # get contract Instance. + + def getContractInstance(self, tokenAddr): + contractInstance = self.getConnection().eth.contract(address=tokenAddr, abi=xrc721abi) + return contractInstance + + # Gets the Name of the specified address. + # token address required as an argument. + + def name(self, tokenAddr): + result = self.getContractInstance(tokenAddr).functions.name().call() + return result + + # Gets the Symbol of the specified address. + # token address required as an argument. + + def symbol(self, tokenAddr): + result = self.getContractInstance(tokenAddr).functions.symbol().call() + return result + + # Gets the owner of an NFT. + # required arguments. + # token address, token id. + + def ownerOf(self, tokenAddr, tokenId): + result = self.getContractInstance(tokenAddr).functions.ownerOf(tokenId).call() + return result + + # Gets the Totalsupply of the specified address. + # token address required as an argument. + + def totalSupply(self, tokenAddr): + token = Web3.toChecksumAddress(tokenAddr) + result = self.getContractInstance(tokenAddr).functions.totalSupply().call() + resultt = str(result) + return resultt + + # Gets the balance of the specified address. + # reuired arguments + # token address, owner address. + + def balanceOf(self, tokenAddr, ownerAddress): + owner = Web3.toChecksumAddress(ownerAddress) + result = self.getContractInstance(tokenAddr).functions.balanceOf(owner).call() + return result + + # A distinct Uniform Resource Identifier (URI) for a given asset. + # Gets URI of a token. + # required arguments + # tokenId The identifier for an NFT. + # address of the token. + + def tokenURI(self, tokenAddr, tokenId): + result = self.getContractInstance(tokenAddr).functions.tokenURI(tokenId).call() + return result + + # Enumerate NFTs assigned to an owner. + # tokenAddress An address for whom to query. + # IndexNO A counter less than `totalSupply()`. + # The token identifier for the `index`th NFT assigned to `owner`. + + def tokenByIndex(self, tokenAddr, index): + token = Web3.toChecksumAddress(tokenAddr) + result = self.getContractInstance(tokenAddr).functions.tokenByIndex(index).call() + return result + + # Enumerate NFTs assigned to an owner. + # The token identifier for the `index`th NFT assigned to `owner`. + # required arguments. + # owner address, token address, token index. + + def tokenofOwnerByIndex(self, tokenAddr, ownerAddress, index): + token = Web3.toChecksumAddress(tokenAddr) + owner = Web3.toChecksumAddress(ownerAddress) + result = self.getContractInstance(token).functions.tokenOfOwnerByIndex( + owner, index).call() + return result + + # Query if a contract implements an interface. + # tokenAddress An address for whom to query and x_bytes The interface identifier. + # `true` if the contract implements `interfaceID` andinterfaceID` is not 0xffffffff, `false` otherwise. + # required arguments. + # token address, interface id. + + def supportInterface(self, tokenAddr, interfaceId): + token = Web3.toChecksumAddress(tokenAddr) + result = self.getContractInstance(token).functions.supportsInterface( + interfaceId).call() + return result + + # The approved address for a token ID, or zero if no address set Reverts if the token ID does not exist. + # required arguments. + # token address, tokenId. + + def getApproved(self, tokenAddr, tokenId): + result = self.getContractInstance(tokenAddr).functions.getApproved(tokenId).call() + return result + + # Tells whether an operator is approved by a given owner. + # required arguments. + # owner address, spender address, token address. + + def isApprovedForAll(self, tokenAddr, ownerAddress, spenderAddress): + owner = Web3.toChecksumAddress(ownerAddress) + spender = Web3.toChecksumAddress(spenderAddress) + result = self.getContractInstance(tokenAddr).functions.isApprovedForAll( + owner, spender).call() + return result + + # Change or reaffirm the approved address for an NFT. + # The zero address indicates there is no approved address. + # Throws unless `owner` is the current NFT owner, or an authorized. + # required arguments. + # tokenAddress, owner address, ownerPrivateKey, spenderAddress, tokenID. + + def approve(self, tokenAddr, ownerAddress, ownerPrivateKey, spenderAddress, tokenId): + + owner = Web3.toChecksumAddress(ownerAddress) + spender = Web3.toChecksumAddress(spenderAddress) + + approveData = self.getContractInstance(tokenAddr).functions.approve(spender, tokenId) + + hexData = approveData._encode_transaction_data() + + data = hexstr_if_str(to_bytes, hexData) + + estimateGas = approveData.estimateGas({ + 'from': owner, + }) + + nonce = self.getConnection().eth.getTransactionCount(owner) + + gasPrice = self.getConnection().eth.gas_price + + tx = { + 'nonce': nonce, + 'to': tokenAddr, + 'data': data, + 'gas': estimateGas, + 'gasPrice': gasPrice, + } + + signedTx = self.getConnection().eth.account.signTransaction(tx, ownerPrivateKey) + + txHash = self.getConnection().eth.sendRawTransaction(signedTx.rawTransaction) + return self.getConnection().toHex(txHash) + + # Enable or disable approval for a third party ("operator") to manage all of `Owner`'s assets + # Emits the ApprovalForAll event. The contract MUST allow multiple operators per owner. + # required arguments. + # token address, owner address, ownerPrivateKey, sepnder address, tokenId. + + def setApprovalForAll(self, tokenAddr, ownerAddress, ownerPrivateKey, spenderAddress, boolValue): + + owner = Web3.toChecksumAddress(ownerAddress) + spender = Web3.toChecksumAddress(spenderAddress) + + approveData = self.getContractInstance(tokenAddr).functions.setApprovalForAll( + spender, boolValue) + + hexData = approveData._encode_transaction_data() + + data = hexstr_if_str(to_bytes, hexData) + + estimateGas = approveData.estimateGas({ + 'from': owner, + }) + + nonce = self.getConnection().eth.getTransactionCount(owner) + + gasPrice = self.getConnection().eth.gas_price + + tx = { + 'nonce': nonce, + 'to': tokenAddr, + 'data': data, + 'gas': estimateGas, + 'gasPrice': gasPrice, + } + + signedTx = self.getConnection().eth.account.signTransaction(tx, ownerPrivateKey) + + txHash = self.getConnection().eth.sendRawTransaction(signedTx.rawTransaction) + return self.getConnection().toHex(txHash) + + # Transfer ownership of an NFT -- THE CALLER IS RESPONSIBLE + # to confirm that `reciever Address` is capable of receiving NFTs or else they may be permanently lost. + # required arguments. + # token address, owner address, spender address, spenderPrivateKey, receiver address, tokenId. + + def transferFrom(self, tokenAddr, ownerAddress, spenderAddress, spenderPrivateKey, receiver, tokenId): + + owner = Web3.toChecksumAddress(ownerAddress) + receiverAddres = Web3.toChecksumAddress(receiver) + spender = Web3.toChecksumAddress(spenderAddress) + + transferData = self.getContractInstance(tokenAddr).functions.transferFrom( + owner, receiverAddres, tokenId) + + estimateGas = transferData.estimateGas({ + 'from': spender, + }) + + hexData = transferData._encode_transaction_data() + + data = hexstr_if_str(to_bytes, hexData) + + nonce = self.getConnection().eth.getTransactionCount(spender) + gasPrice = self.getConnection().eth.gas_price + + tx = { + 'nonce': nonce, + 'to': tokenAddr, + 'data': data, + 'gas': estimateGas, + 'gasPrice': gasPrice, + } + signedTx = self.getConnection().eth.account.signTransaction(tx, spenderPrivateKey) + + txHash = self.getConnection().eth.sendRawTransaction(signedTx.rawTransaction) + return self.getConnection().toHex(txHash) + + # Transfers the ownership of an NFT from one address to another address. + # required arguments. + # token address, owner address, spender address, spenderPrivateKey, receiver address, tokenId. + + def safeTransferFrom(self, tokenAddr, ownerAddress, spenderAddress, spenderPrivateKey, receiver, tokenId): + + owner = Web3.toChecksumAddress(ownerAddress) + receiverAddres = Web3.toChecksumAddress(receiver) + spender = Web3.toChecksumAddress(spenderAddress) + + transferData = self.getContractInstance(tokenAddr).functions.safeTransferFrom( + owner, receiverAddres, tokenId) + + estimateGas = transferData.estimateGas({ + 'from': spender, + }) + + hexData = transferData._encode_transaction_data() + + data = hexstr_if_str(to_bytes, hexData) + + nonce = self.getConnection().eth.getTransactionCount(spender) + gasPrice = self.getConnection().eth.gas_price + + tx = { + 'nonce': nonce, + 'to': tokenAddr, + 'data': data, + 'gas': estimateGas, + 'gasPrice': gasPrice, + } + signedTx = self.getConnection().eth.account.signTransaction(tx, spenderPrivateKey) + + txHash = self.getConnection().eth.sendRawTransaction(signedTx.rawTransaction) + return self.getConnection().toHex(txHash) diff --git a/.gitbook/assets/you_know b/.gitbook/assets/you_know new file mode 100644 index 00000000..013baaf4 --- /dev/null +++ b/.gitbook/assets/you_know @@ -0,0 +1,396 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Sign in to GitHub · GitHub + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ Skip to content + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ + + +
+

Sign in to GitHub

+
+ + +
+ + + + + + +
+ + + + +
+ + +
+ + +
+ + + + + + + + + + + + + + Forgot password? +
+
+
+ + + + +
+ +
+
+ + + + + + + + + + + + + + + + + +
+ +
+ + + diff --git a/SUMMARY.md b/SUMMARY.md index e5f251f8..1ad6c265 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -49,7 +49,27 @@ * [Tools](tools/README.md) * [SDKs & Programming](tools/sdks-and-programming/README.md) * [Solidity](tools/sdks-and-programming/soliditiy.md) - * [Python SDK](tools/sdks-and-programming/python.md) + * [Python SDK](tools/sdks-and-programming/python/README.md) + * [GitHub: python SDK for XDC](tools/sdks-and-programming/python/github-python-sdk-for-xdc.md) + * [Actions](tools/sdks-and-programming/python/actions.md) + * [Stargazers](tools/sdks-and-programming/python/stargazers.md) + * [Forks](tools/sdks-and-programming/python/forks.md) + * [Pull requests](tools/sdks-and-programming/python/pull-requests.md) + * [XDC\_Python\_SDK\_V1/LICENSE.txt at main](tools/sdks-and-programming/python/xdc\_python\_sdk\_v1-license.txt-at-main.md) + * [Build software better, together](tools/sdks-and-programming/python/build-software-better-together.md) + * [Build software better, together](tools/sdks-and-programming/python/build-software-better-together-1.md) + * [Releases](tools/sdks-and-programming/python/releases.md) + * [Pulse](tools/sdks-and-programming/python/pulse.md) + * [Branches](tools/sdks-and-programming/python/branches.md) + * [Commits](tools/sdks-and-programming/python/commits.md) + * [XDC\_Python\_SDK\_V1/.vscode at main](tools/sdks-and-programming/python/xdc\_python\_sdk\_v1-.vscode-at-main.md) + * [XDC\_Python\_SDK\_V1/XDC3PYTHON at main](tools/sdks-and-programming/python/xdc\_python\_sdk\_v1-xdc3python-at-main.md) + * [Comparing CoinClubQuincy:main...XDCFoundation:main · CoinClubQuincy/XDC\_Python\_SDK\_V1](tools/sdks-and-programming/python/comparing-coinclubquincy-main...xdcfoundation-main-coinclubquincy-xdc\_python\_sdk\_v1.md) + * [GitHub at 66fa7e5dea1afa40be77f29200876e9ab0088403](tools/sdks-and-programming/python/github-at-66fa7e5dea1afa40be77f29200876e9ab0088403.md) + * [XDC\_Python\_SDK\_V1/.gitignore at main](tools/sdks-and-programming/python/xdc\_python\_sdk\_v1-.gitignore-at-main.md) + * [XDC\_Python\_SDK\_V1/MANIFEST.in at main](tools/sdks-and-programming/python/xdc\_python\_sdk\_v1-manifest.in-at-main.md) + * [XDC\_Python\_SDK\_V1/README.md at main](tools/sdks-and-programming/python/xdc\_python\_sdk\_v1-readme.md-at-main.md) + * [XDC\_Python\_SDK\_V1/setup.py at main](tools/sdks-and-programming/python/xdc\_python\_sdk\_v1-setup.py-at-main.md) * [iOS Swift SDK](tools/sdks-and-programming/switft.md) * [Java SDK](tools/sdks-and-programming/java.md) * [Android SDK](tools/sdks-and-programming/javascript.md) diff --git a/get-details/smart-contract-details/xrc-standards/xrc721.md b/get-details/smart-contract-details/xrc-standards/xrc721.md index 73da32a2..1d3c52c8 100644 --- a/get-details/smart-contract-details/xrc-standards/xrc721.md +++ b/get-details/smart-contract-details/xrc-standards/xrc721.md @@ -61,7 +61,7 @@ Provides the name of the token. Returns the total amount of tokens in the contract. `balanceOf(address account) → uint256`\ -Provides the number of non-fungible tokens in the owner's **** account. +Provides the number of non-fungible tokens in the owner's account. `ownerOf(tokenId) → address`\ Returns the NFT owner specified by `tokenId`. diff --git a/get-started/tokenization.md b/get-started/tokenization.md index 7919ade1..b2e4c542 100644 --- a/get-started/tokenization.md +++ b/get-started/tokenization.md @@ -18,6 +18,5 @@ Fungible means these assets are divisible into smaller units of value. Let's say Non-Fungible means the asset can not be broken down into smaller units of value. This can be used to tokenize assets that are not meant to be shared or divisible. These tokens are usually used to represent a piece of art or any other single asset. -**** -**** + diff --git a/get-started/xdc-design/xdpos-2.0.md b/get-started/xdc-design/xdpos-2.0.md index 9c22fee3..3e1757da 100644 --- a/get-started/xdc-design/xdpos-2.0.md +++ b/get-started/xdc-design/xdpos-2.0.md @@ -153,7 +153,7 @@ Liveness means the blockchain makes progress and new transactions are included. The HotStuff protocol is optimistically responsive: in optimistic condition (honest leader and synchronous network), it only takes 3 block arrival time (BAT) to finalize a block and the transactions it contains. In practice, due to our strict network requirement on master nodes eligibility, the maximum network round-trip latency should be well below 2 seconds. Therefore, we can set BAT to be 2 seconds. This means that, in optimistic conditions, the finalization latency is only 6 seconds. **`Algorithm 2 HotStuff protocol`** \ -**``**`1: tH ← dVALIDATOR_SET_SIZE × 2/3e . constant` \ +`1: tH ← dVALIDATOR_SET_SIZE × 2/3e . constant` \ `2: highQC ← qcgenesis; lockQC ← qcgenesis . the latest QC and lock variable . Optimistic path` \ `3: for curRound ← 1, 2, . . . do` \ `4: as a leader` \ diff --git a/tools/sdks-and-programming/javascript.md b/tools/sdks-and-programming/javascript.md index 976d85db..4f463b7a 100644 --- a/tools/sdks-and-programming/javascript.md +++ b/tools/sdks-and-programming/javascript.md @@ -131,7 +131,7 @@ Returns the symbol of the token, usually a shorter version of the name. Gets the total amount of tokens stored by the contract. `balanceOf(address account) → uint256`\ -Returns the number of NFTs in the owner's **** account. +Returns the number of NFTs in the owner's account. `ownerOf(tokenId) → address`\ Returns the owner of the NFT specified by `tokenId`. @@ -212,7 +212,7 @@ To add module dependency in your project, follow the steps below: Now, we can interact with the XRC721 read methods. * `name() → string` Returns the name of the token.\ - ****`tokenResponse.getName();` + `tokenResponse.getName();` * `balanceOf(address token,address account) → uint256` Returns the number of tokens owned by `account`.\ `String balance = XDC721Client.getInstance().getBalance(tokenAddress, ownerAddress);` diff --git a/tools/sdks-and-programming/php-sdk.md b/tools/sdks-and-programming/php-sdk.md index 7e32087c..0266c029 100644 --- a/tools/sdks-and-programming/php-sdk.md +++ b/tools/sdks-and-programming/php-sdk.md @@ -141,7 +141,7 @@ This library provides a simple way to interact with XDC XRC20 & XRC721 tokens. XRC721 is the token standard for non-fungible tokens. These are unique tokens that hold different values than other tokens in the same smart contract. All NFTs have a uint256 variable called tokenId, so for any XRC-721 Contract, the pair contract address, uint256 tokenId must be globally unique. -Every XRC-721 compliant contract must implement the **** `XRC721` and `XRC165` interfaces. +Every XRC-721 compliant contract must implement the `XRC721` and `XRC165` interfaces. ### Read Methods @@ -155,7 +155,7 @@ Provides the name of the token. Returns the total amount of tokens in the contract. `balanceOf(address account) → uint256`\ -Provides the number of non-fungible tokens in the owner's **** account. +Provides the number of non-fungible tokens in the owner's account. `ownerOf(tokenId) → address`\ Returns the NFT owner specified by `tokenId`. diff --git a/tools/sdks-and-programming/python.md b/tools/sdks-and-programming/python.md deleted file mode 100644 index 2ad3d8ac..00000000 --- a/tools/sdks-and-programming/python.md +++ /dev/null @@ -1,2 +0,0 @@ -# Python - diff --git a/tools/sdks-and-programming/python/README.md b/tools/sdks-and-programming/python/README.md new file mode 100644 index 00000000..63befb04 --- /dev/null +++ b/tools/sdks-and-programming/python/README.md @@ -0,0 +1,70 @@ +# Python SDK + + + +XDC3PYTHON SDK with support for smart contracts, XDC20 & XRC721. + + + +### Usage + +**pip install XDC3PYTHON** + +#### This SDK supports following Read & Write operations:- + +* xrc20 methods. + * Read methods. + * name(), balanceOf(account), totalSupply(), symbol(), decimals(), allowance(pwner, spender). + * Write methods. + * transferXDC(owner,receiver), approve(spender,amount), transferToken(receiver,amount), increaseAllowance(spender, addedValue), decreaseAllowance(spender, subtractedValue), transferFrom(sender, receiver, amount). +* xrc721 methods. + * Read methods. + * name(), symbol(), totalsupply(), balanceOf(ownerAddr), ownerOf(tokenId), tokenURI(tokenId), tokenByIndex(index), tokenOfOwnerByIndex(ownerAddress,index), supportInterface(interfaceId), getApproved(tokenId), isApprovedForAll(ownerAddress,spenderAddress). + * Write methods. + * setApprovalForAll(spenderAddress, booleanValue), approve(sepnderAddress , tokenId), transferFrom(recipient, tokenId), safeTransferFrom(spender, tokenId). + +#### Example for XRC20. + +``` +from XDC3PYTHON.xrc20 import XRC20 + +if __name__=="__main__": + + NETWORK_URL = "Your endpoint Url" + + obj = XRC20(NETWORK_URL) + + tokenAddr = input('Enter Token Address: ') + + tokenSymbol = obj.name(tokenAddr) + print(tokenSymbol) +``` + +This example returns name of the specified address. + +#### Example for XRC721. + +``` +from XDC3PYTHON.xrc721 import XRC721 + +if __name__=="__main__": + + NETWORK_URL = "Your endpoint Url" + + obj = XRC721(NETWORK_URL) + + tokenAddr = input('Enter Token Address: ') + + tokenSymbol = obj.name(tokenAddr) + print(tokenSymbol) +``` + +This example returns symbol of the specified address. + +## Transports + +**HTTP transport** + +### Required Data Types + +**Token Address** - `str type` **Account Address** - `str type` **amount** & **tokenId** - `int type` diff --git a/tools/sdks-and-programming/python/actions.md b/tools/sdks-and-programming/python/actions.md new file mode 100644 index 00000000..7fe107d7 --- /dev/null +++ b/tools/sdks-and-programming/python/actions.md @@ -0,0 +1,43 @@ +# Actions + +Automate your workflow from idea to production + +GitHub Actions makes it easy to automate all your software workflows, now with world-class CI/CD. Build, test, and deploy your code right from GitHub. + +*** + +![Operating systems and containers](https://github.githubassets.com/images/modules/actions/actions-linux-and-containers.svg) + +**Linux, macOS, Windows, ARM, and containers** + +Hosted runners for every major OS make it easy to build and test all your projects. Run directly on a VM or inside a container. Use your own VMs, in the cloud or on-prem, with self-hosted runners. + +![Matrix builds](https://github.githubassets.com/images/modules/actions/actions-matrix.svg) + +**Matrix builds** + +Save time with matrix workflows that simultaneously test across multiple operating systems and versions of your runtime. + +![Any language](https://github.githubassets.com/images/modules/actions/actions-any-lang.svg) + +**Any language** + +GitHub Actions supports Node.js, Python, Java, Ruby, PHP, Go, Rust, .NET, and more. Build, test, and deploy applications in your language of choice. + +![Live logs](https://github.githubassets.com/images/modules/actions/actions-live-logs.svg) + +**Live logs** + +See your workflow run in realtime with color and emoji. It’s one click to copy a link that highlights a specific line number to share a CI/CD failure. + +![Secret store](https://github.githubassets.com/images/modules/actions/actions-secret-store.svg) + +**Built-in secret store** + +Automate your software development practices with workflow files embracing the Git flow by codifying it in your repository. + +![Multi-container testing](https://github.githubassets.com/images/modules/actions/actions-multi-container-testing.svg) + +**Multi-container testing** + +Test your web service and its DB in your workflow by simply adding some `docker-compose` to your workflow file. diff --git a/tools/sdks-and-programming/python/branches.md b/tools/sdks-and-programming/python/branches.md new file mode 100644 index 00000000..4e9d4f32 --- /dev/null +++ b/tools/sdks-and-programming/python/branches.md @@ -0,0 +1,47 @@ +# Branches + +* + + * ActionsAutomate any workflow + * PackagesHost and manage packages + * SecurityFind and fix vulnerabilities + * CodespacesInstant dev environments + * CopilotWrite better code with AI + * Code reviewManage code changes + * IssuesPlan and track work + * DiscussionsCollaborate outside of code + + Explore + + * All features + * [Documentation](https://docs.github.com/) + * [GitHub Skills](https://skills.github.com/) + * [Blog](https://github.blog/) +* For + + * Enterprise + * Teams + * Startups + * [Education](https://education.github.com/) + + By Solution + + * CI/CD & Automation + * [DevOps](https://resources.github.com/devops/) + * [DevSecOps](https://resources.github.com/devops/fundamentals/devsecops/) + + Case Studies + + * Customer Stories + * [Resources](https://resources.github.com/) +* + + * GitHub SponsorsFund open source developers + * The ReadME ProjectGitHub community articles + + Repositories + + * Topics + * Trending + * Collections +* Pricing diff --git a/tools/sdks-and-programming/python/build-software-better-together-1.md b/tools/sdks-and-programming/python/build-software-better-together-1.md new file mode 100644 index 00000000..b2dc356e --- /dev/null +++ b/tools/sdks-and-programming/python/build-software-better-together-1.md @@ -0,0 +1,47 @@ +# Build software better, together + +* + + * ActionsAutomate any workflow + * PackagesHost and manage packages + * SecurityFind and fix vulnerabilities + * CodespacesInstant dev environments + * CopilotWrite better code with AI + * Code reviewManage code changes + * IssuesPlan and track work + * DiscussionsCollaborate outside of code + + Explore + + * All features + * [Documentation](https://docs.github.com/) + * [GitHub Skills](https://skills.github.com/) + * [Blog](https://github.blog/) +* For + + * Enterprise + * Teams + * Startups + * [Education](https://education.github.com/) + + By Solution + + * CI/CD & Automation + * [DevOps](https://resources.github.com/devops/) + * [DevSecOps](https://resources.github.com/devops/fundamentals/devsecops/) + + Case Studies + + * Customer Stories + * [Resources](https://resources.github.com/) +* + + * GitHub SponsorsFund open source developers + * The ReadME ProjectGitHub community articles + + Repositories + + * Topics + * Trending + * Collections +* Pricing diff --git a/tools/sdks-and-programming/python/build-software-better-together.md b/tools/sdks-and-programming/python/build-software-better-together.md new file mode 100644 index 00000000..7ea75442 --- /dev/null +++ b/tools/sdks-and-programming/python/build-software-better-together.md @@ -0,0 +1,92 @@ +# Build software better, together + +[Skip to content](broken-reference) + +Sign up + +* + + * ActionsAutomate any workflow + * PackagesHost and manage packages + * SecurityFind and fix vulnerabilities + * CodespacesInstant dev environments + * CopilotWrite better code with AI + * Code reviewManage code changes + * IssuesPlan and track work + * DiscussionsCollaborate outside of code + + Explore + + * All features + * [Documentation](https://docs.github.com/) + * [GitHub Skills](https://skills.github.com/) + * [Blog](https://github.blog/) +* For + + * Enterprise + * Teams + * Startups + * [Education](https://education.github.com/) + + By Solution + + * CI/CD & Automation + * [DevOps](https://resources.github.com/devops/) + * [DevSecOps](https://resources.github.com/devops/fundamentals/devsecops/) + + Case Studies + + * Customer Stories + * [Resources](https://resources.github.com/) +* + + * GitHub SponsorsFund open source developers + * The ReadME ProjectGitHub community articles + + Repositories + + * Topics + * Trending + * Collections +* Pricing +* [In this repository All GitHub](broken-reference) +* No suggested jump to results +* [In this repository All GitHub](broken-reference) +* [In this organization All GitHub](broken-reference) +* [In this repository All GitHub](broken-reference) + +Sign in + +Sign up + +XDCFoundation / [**XDC\_Python\_SDK\_V1**](broken-reference) Public + +forked from CoinClubQuincy/XDC\_Python\_SDK\_V1 + +* Notifications +* Fork 1 +* Star 4 +* [Code](broken-reference) +* [Pull requests](broken-reference) +* [Actions](broken-reference) +* [Projects](broken-reference) +* [Security](broken-reference) +* [Insights](broken-reference) + +
+ +More + +* + +
+ +### Security: XDCFoundation/XDC\_Python\_SDK\_V1 + +### Security + +#### No security policy detected + +This project has not set up a SECURITY.md file yet. + +### There aren’t any published security advisories diff --git a/tools/sdks-and-programming/python/commits.md b/tools/sdks-and-programming/python/commits.md new file mode 100644 index 00000000..b3e3eb6c --- /dev/null +++ b/tools/sdks-and-programming/python/commits.md @@ -0,0 +1,3 @@ +# Commits + +A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch? diff --git a/tools/sdks-and-programming/python/comparing-coinclubquincy-main...xdcfoundation-main-coinclubquincy-xdc_python_sdk_v1.md b/tools/sdks-and-programming/python/comparing-coinclubquincy-main...xdcfoundation-main-coinclubquincy-xdc_python_sdk_v1.md new file mode 100644 index 00000000..7e3011a7 --- /dev/null +++ b/tools/sdks-and-programming/python/comparing-coinclubquincy-main...xdcfoundation-main-coinclubquincy-xdc_python_sdk_v1.md @@ -0,0 +1,69 @@ +# Comparing CoinClubQuincy:main...XDCFoundation:main · CoinClubQuincy/XDC\_Python\_SDK\_V1 + +[Permalink](https://github.com/CoinClubQuincy/XDC\_Python\_SDK\_V1/compare/CoinClubQuincy:ddf4eb3...XDCFoundation:66fa7e5) + +### Comparing changes + +Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also . + +### Open a pull request + +Create a new pull request by comparing changes across two branches. If you need to, you can also . + +
+ +base repository: CoinClubQuincy/XDC_Python_SDK_V1 + + + +
+ +
+ +base: main + + + +
+ +
+ +head repository: XDCFoundation/XDC_Python_SDK_V1 + + + +
+ +
+ +compare: main + + + +
+ +**Checking mergeability…** Don’t worry, you can still create the pull request. + +* View pull request +* 7 commits +* 25 files changed +* 4 contributors + +#### Commits on Apr 28, 2022 + +1. + +#### Commits on May 11, 2022 + +1. +2. +3. + +#### Commits on May 12, 2022 + +1. +2. + +#### Commits on Sep 7, 2022 + +1. diff --git a/tools/sdks-and-programming/python/forks.md b/tools/sdks-and-programming/python/forks.md new file mode 100644 index 00000000..162c3b12 --- /dev/null +++ b/tools/sdks-and-programming/python/forks.md @@ -0,0 +1,92 @@ +# Forks + +[Skip to content](broken-reference) + +Sign up + +* + + * ActionsAutomate any workflow + * PackagesHost and manage packages + * SecurityFind and fix vulnerabilities + * CodespacesInstant dev environments + * CopilotWrite better code with AI + * Code reviewManage code changes + * IssuesPlan and track work + * DiscussionsCollaborate outside of code + + Explore + + * All features + * [Documentation](https://docs.github.com/) + * [GitHub Skills](https://skills.github.com/) + * [Blog](https://github.blog/) +* For + + * Enterprise + * Teams + * Startups + * [Education](https://education.github.com/) + + By Solution + + * CI/CD & Automation + * [DevOps](https://resources.github.com/devops/) + * [DevSecOps](https://resources.github.com/devops/fundamentals/devsecops/) + + Case Studies + + * Customer Stories + * [Resources](https://resources.github.com/) +* + + * GitHub SponsorsFund open source developers + * The ReadME ProjectGitHub community articles + + Repositories + + * Topics + * Trending + * Collections +* Pricing +* [In this repository All GitHub](broken-reference) +* No suggested jump to results +* [In this repository All GitHub](broken-reference) +* [In this organization All GitHub](broken-reference) +* [In this repository All GitHub](broken-reference) + +Sign in + +Sign up + +XDCFoundation / [**XDC\_Python\_SDK\_V1**](broken-reference) Public + +forked from CoinClubQuincy/XDC\_Python\_SDK\_V1 + +* Notifications +* Fork 1 +* Star 4 +* [Code](broken-reference) +* [Pull requests](broken-reference) +* [Actions](broken-reference) +* [Projects](broken-reference) +* [Security](broken-reference) +* [Insights](broken-reference) + +
+ +More + +* + +
+ +[Pulse](broken-reference) [Contributors](../../../.gitbook/assets/contributors) [Commits](<../../../.gitbook/assets/commit activity>) [Code frequency](<../../../.gitbook/assets/code frequency>) [Dependency graph](../../../.gitbook/assets/dependencies) [Network](../../../.gitbook/assets/network) [Forks](broken-reference) + +[Switch to tree view](../../../.gitbook/assets/members) + +### Forks + +### No one has forked this repository yet + +Forks are a great way to contribute to a repository. After [forking a repository](https://docs.github.com/articles/fork-a-repo), you can send the original author a [pull request](https://docs.github.com/articles/using-pull-requests). diff --git a/tools/sdks-and-programming/python/github-at-66fa7e5dea1afa40be77f29200876e9ab0088403.md b/tools/sdks-and-programming/python/github-at-66fa7e5dea1afa40be77f29200876e9ab0088403.md new file mode 100644 index 00000000..487f4715 --- /dev/null +++ b/tools/sdks-and-programming/python/github-at-66fa7e5dea1afa40be77f29200876e9ab0088403.md @@ -0,0 +1,72 @@ +# GitHub at 66fa7e5dea1afa40be77f29200876e9ab0088403 + +### XDC3PYTHON + +XDC3PYTHON SDK with support for smart contracts, XDC20 & XRC721. + +### Usage + +**pip install XDC3PYTHON** + +#### This SDK supports following Read & Write operations:- + +* xrc20 methods. + * Read methods. + * name(), balanceOf(account), totalSupply(), symbol(), decimals(), allowance(pwner, spender). + * Write methods. + * transferXDC(owner,receiver), approve(spender,amount), transferToken(receiver,amount), increaseAllowance(spender, addedValue), decreaseAllowance(spender, subtractedValue), transferFrom(sender, receiver, amount). +* xrc721 methods. + * Read methods. + * name(), symbol(), totalsupply(), balanceOf(ownerAddr), ownerOf(tokenId), tokenURI(tokenId), tokenByIndex(index), tokenOfOwnerByIndex(ownerAddress,index), supportInterface(interfaceId), getApproved(tokenId), isApprovedForAll(ownerAddress,spenderAddress). + * Write methods. + * setApprovalForAll(spenderAddress, booleanValue), approve(sepnderAddress , tokenId), transferFrom(recipient, tokenId), safeTransferFrom(spender, tokenId). + +#### Example for XRC20. + +``` +from XDC3PYTHON.xrc20 import XRC20 + +if __name__=="__main__": + + NETWORK_URL = "Your endpoint Url" + + obj = XRC20(NETWORK_URL) + + tokenAddr = input('Enter Token Address: ') + + tokenSymbol = obj.name(tokenAddr) + print(tokenSymbol) +``` + +This example returns name of the specified address. + +#### Example for XRC721. + +``` +from XDC3PYTHON.xrc721 import XRC721 + +if __name__=="__main__": + + NETWORK_URL = "Your endpoint Url" + + obj = XRC721(NETWORK_URL) + + tokenAddr = input('Enter Token Address: ') + + tokenSymbol = obj.name(tokenAddr) + print(tokenSymbol) +``` + +This example returns symbol of the specified address. + +### Transports + +**HTTP transport** + +### Required Data Types + +**Token Address** - `str type` **Account Address** - `str type` **amount** & **tokenId** - `int type` + +#### Author + +[XDCFoundation](broken-reference) diff --git a/tools/sdks-and-programming/python/github-python-sdk-for-xdc.md b/tools/sdks-and-programming/python/github-python-sdk-for-xdc.md new file mode 100644 index 00000000..83372632 --- /dev/null +++ b/tools/sdks-and-programming/python/github-python-sdk-for-xdc.md @@ -0,0 +1,72 @@ +# GitHub: python SDK for XDC + +### XDC3PYTHON + +XDC3PYTHON SDK with support for smart contracts, XDC20 & XRC721. + +### Usage + +**pip install XDC3PYTHON** + +#### This SDK supports following Read & Write operations:- + +* xrc20 methods. + * Read methods. + * name(), balanceOf(account), totalSupply(), symbol(), decimals(), allowance(pwner, spender). + * Write methods. + * transferXDC(owner,receiver), approve(spender,amount), transferToken(receiver,amount), increaseAllowance(spender, addedValue), decreaseAllowance(spender, subtractedValue), transferFrom(sender, receiver, amount). +* xrc721 methods. + * Read methods. + * name(), symbol(), totalsupply(), balanceOf(ownerAddr), ownerOf(tokenId), tokenURI(tokenId), tokenByIndex(index), tokenOfOwnerByIndex(ownerAddress,index), supportInterface(interfaceId), getApproved(tokenId), isApprovedForAll(ownerAddress,spenderAddress). + * Write methods. + * setApprovalForAll(spenderAddress, booleanValue), approve(sepnderAddress , tokenId), transferFrom(recipient, tokenId), safeTransferFrom(spender, tokenId). + +#### Example for XRC20. + +``` +from XDC3PYTHON.xrc20 import XRC20 + +if __name__=="__main__": + + NETWORK_URL = "Your endpoint Url" + + obj = XRC20(NETWORK_URL) + + tokenAddr = input('Enter Token Address: ') + + tokenSymbol = obj.name(tokenAddr) + print(tokenSymbol) +``` + +This example returns name of the specified address. + +#### Example for XRC721. + +``` +from XDC3PYTHON.xrc721 import XRC721 + +if __name__=="__main__": + + NETWORK_URL = "Your endpoint Url" + + obj = XRC721(NETWORK_URL) + + tokenAddr = input('Enter Token Address: ') + + tokenSymbol = obj.name(tokenAddr) + print(tokenSymbol) +``` + +This example returns symbol of the specified address. + +### Transports + +**HTTP transport** + +### Required Data Types + +**Token Address** - `str type` **Account Address** - `str type` **amount** & **tokenId** - `int type` + +#### Author + +[XDCFoundation](broken-reference) diff --git a/tools/sdks-and-programming/python/pull-requests.md b/tools/sdks-and-programming/python/pull-requests.md new file mode 100644 index 00000000..d7edf164 --- /dev/null +++ b/tools/sdks-and-programming/python/pull-requests.md @@ -0,0 +1,47 @@ +# Pull requests + +* + + * ActionsAutomate any workflow + * PackagesHost and manage packages + * SecurityFind and fix vulnerabilities + * CodespacesInstant dev environments + * CopilotWrite better code with AI + * Code reviewManage code changes + * IssuesPlan and track work + * DiscussionsCollaborate outside of code + + Explore + + * All features + * [Documentation](https://docs.github.com/) + * [GitHub Skills](https://skills.github.com/) + * [Blog](https://github.blog/) +* For + + * Enterprise + * Teams + * Startups + * [Education](https://education.github.com/) + + By Solution + + * CI/CD & Automation + * [DevOps](https://resources.github.com/devops/) + * [DevSecOps](https://resources.github.com/devops/fundamentals/devsecops/) + + Case Studies + + * Customer Stories + * [Resources](https://resources.github.com/) +* + + * GitHub SponsorsFund open source developers + * The ReadME ProjectGitHub community articles + + Repositories + + * Topics + * Trending + * Collections +* Pricing diff --git a/tools/sdks-and-programming/python/pulse.md b/tools/sdks-and-programming/python/pulse.md new file mode 100644 index 00000000..3db5e35c --- /dev/null +++ b/tools/sdks-and-programming/python/pulse.md @@ -0,0 +1,111 @@ +# Pulse + +[Skip to content](broken-reference) + +Sign up + +* + + * ActionsAutomate any workflow + * PackagesHost and manage packages + * SecurityFind and fix vulnerabilities + * CodespacesInstant dev environments + * CopilotWrite better code with AI + * Code reviewManage code changes + * IssuesPlan and track work + * DiscussionsCollaborate outside of code + + Explore + + * All features + * [Documentation](https://docs.github.com/) + * [GitHub Skills](https://skills.github.com/) + * [Blog](https://github.blog/) +* For + + * Enterprise + * Teams + * Startups + * [Education](https://education.github.com/) + + By Solution + + * CI/CD & Automation + * [DevOps](https://resources.github.com/devops/) + * [DevSecOps](https://resources.github.com/devops/fundamentals/devsecops/) + + Case Studies + + * Customer Stories + * [Resources](https://resources.github.com/) +* + + * GitHub SponsorsFund open source developers + * The ReadME ProjectGitHub community articles + + Repositories + + * Topics + * Trending + * Collections +* Pricing +* [In this repository All GitHub](broken-reference) +* No suggested jump to results +* [In this repository All GitHub](broken-reference) +* [In this organization All GitHub](broken-reference) +* [In this repository All GitHub](broken-reference) + +Sign in + +Sign up + +XDCFoundation / [**XDC\_Python\_SDK\_V1**](broken-reference) Public + +forked from CoinClubQuincy/XDC\_Python\_SDK\_V1 + +* Notifications +* Fork 1 +* Star 4 +* [Code](broken-reference) +* [Pull requests](broken-reference) +* [Actions](broken-reference) +* [Projects](broken-reference) +* [Security](broken-reference) +* [Insights](broken-reference) + +
+ +More + +* + +
+ +[Pulse](broken-reference) [Contributors](../../../.gitbook/assets/contributors) [Commits](<../../../.gitbook/assets/commit activity>) [Code frequency](<../../../.gitbook/assets/code frequency>) [Dependency graph](../../../.gitbook/assets/dependencies) [Network](../../../.gitbook/assets/network) [Forks](broken-reference) + +### April 12, 2023 – April 19, 2023 + +
+ +Period: 1 week + +Filter activity + +[24 hours](../../../.gitbook/assets/daily)[3 days](../../../.gitbook/assets/halfweekly)[1 week](broken-reference)[1 month](../../../.gitbook/assets/monthly) + +
+ +#### Overview + +* 0 Active pull requests + + 0 Active issues +* + * 0 Merged pull requests + * 0 Open pull requests + * 0 Closed issues + * 0 New issues + +**There hasn’t been any commit activity on XDCFoundation/XDC\_Python\_SDK\_V1 in the last week.** + +Want to help out? diff --git a/tools/sdks-and-programming/python/releases.md b/tools/sdks-and-programming/python/releases.md new file mode 100644 index 00000000..2d4defcd --- /dev/null +++ b/tools/sdks-and-programming/python/releases.md @@ -0,0 +1,5 @@ +# Releases + +#### There aren’t any releases here + +You can create a release to package software, along with release notes and links to binary files, for other people to use. Learn more about releases in [our docs](https://docs.github.com/repositories/releasing-projects-on-github/about-releases). diff --git a/tools/sdks-and-programming/python/stargazers.md b/tools/sdks-and-programming/python/stargazers.md new file mode 100644 index 00000000..910b0eaa --- /dev/null +++ b/tools/sdks-and-programming/python/stargazers.md @@ -0,0 +1,113 @@ +# Stargazers + +[Skip to content](broken-reference) + +Sign up + +* + + * ActionsAutomate any workflow + * PackagesHost and manage packages + * SecurityFind and fix vulnerabilities + * CodespacesInstant dev environments + * CopilotWrite better code with AI + * Code reviewManage code changes + * IssuesPlan and track work + * DiscussionsCollaborate outside of code + + Explore + + * All features + * [Documentation](https://docs.github.com/) + * [GitHub Skills](https://skills.github.com/) + * [Blog](https://github.blog/) +* For + + * Enterprise + * Teams + * Startups + * [Education](https://education.github.com/) + + By Solution + + * CI/CD & Automation + * [DevOps](https://resources.github.com/devops/) + * [DevSecOps](https://resources.github.com/devops/fundamentals/devsecops/) + + Case Studies + + * Customer Stories + * [Resources](https://resources.github.com/) +* + + * GitHub SponsorsFund open source developers + * The ReadME ProjectGitHub community articles + + Repositories + + * Topics + * Trending + * Collections +* Pricing +* [In this repository All GitHub](broken-reference) +* No suggested jump to results +* [In this repository All GitHub](broken-reference) +* [In this organization All GitHub](broken-reference) +* [In this repository All GitHub](broken-reference) + +Sign in + +Sign up + +XDCFoundation / [**XDC\_Python\_SDK\_V1**](broken-reference) Public + +forked from CoinClubQuincy/XDC\_Python\_SDK\_V1 + +* Notifications +* Fork 1 +* Star 4 +* [Code](broken-reference) +* [Pull requests](broken-reference) +* [Actions](broken-reference) +* [Projects](broken-reference) +* [Security](broken-reference) +* [Insights](broken-reference) + +
+ +More + +* + +
+ +[All 4 ](broken-reference)[You know](../../../.gitbook/assets/you\_know) + +1. ![@CoinClubQuincy](https://avatars.githubusercontent.com/u/16103963?s=96\&v=4) + + #### CoinClubQuincy + + XDC Foundation + + Follow +2. ![@sriraj66](https://avatars.githubusercontent.com/u/100057673?s=96\&v=4) + + #### sriraj66 + + Ullikkottai,mannargudi,Thruvarur, Tamilnadu,India + + Follow +3. ![@mauricedw22](https://avatars.githubusercontent.com/u/8675724?s=96\&v=4) + + #### mauricedw22 + + Washington, D.C. + + Follow +4. ![@ChainGamer](https://avatars.githubusercontent.com/u/81823661?s=96\&v=4) + + #### ChainGamer + + @XDCFoundation + + Follow diff --git a/tools/sdks-and-programming/python/xdc_python_sdk_v1-.gitignore-at-main.md b/tools/sdks-and-programming/python/xdc_python_sdk_v1-.gitignore-at-main.md new file mode 100644 index 00000000..29a696db --- /dev/null +++ b/tools/sdks-and-programming/python/xdc_python_sdk_v1-.gitignore-at-main.md @@ -0,0 +1,65 @@ +# XDC\_Python\_SDK\_V1/.gitignore at main + +[Permalink](../../../.gitbook/assets/.gitignore) + +Cannot retrieve contributors at this time + +| | # These are some examples of commonly ignored file patterns. | +| - | ------------------------------------------------------------------ | +| | # You should customize this list as applicable to your project. | +| | # Learn more about .gitignore: | +| | # https://www.atlassian.com/git/tutorials/saving-changes/gitignore | +| | | +| | # Node artifact files | +| | node\_modules/ | +| | dist/ | +| | | +| | # Compiled Java class files | +| | \*.class | +| | | +| | # Compiled Python bytecode | +| | \*.py\[cod] | +| | | +| | # Log files | +| | \*.log | +| | | +| | # Package files | +| | \*.jar | +| | | +| | # Maven | +| | target/ | +| | dist/ | +| | | +| | # JetBrains IDE | +| | .idea/ | +| | | +| | # Unit test reports | +| | TEST\*.xml | +| | | +| | # Generated by MacOS | +| | .DS\_Store | +| | | +| | # Generated by Windows | +| | Thumbs.db | +| | | +| | # Applications | +| | \*.app | +| | \*.exe | +| | \*.war | +| | | +| | # Large media files | +| | \*.mp4 | +| | \*.tiff | +| | \*.avi | +| | \*.flv | +| | \*.mov | +| | \*.wmv | +| | | + +
+ + + + + +
diff --git a/tools/sdks-and-programming/python/xdc_python_sdk_v1-.vscode-at-main.md b/tools/sdks-and-programming/python/xdc_python_sdk_v1-.vscode-at-main.md new file mode 100644 index 00000000..1a6bf2db --- /dev/null +++ b/tools/sdks-and-programming/python/xdc_python_sdk_v1-.vscode-at-main.md @@ -0,0 +1,3 @@ +# XDC\_Python\_SDK\_V1/.vscode at main + +A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch? diff --git a/tools/sdks-and-programming/python/xdc_python_sdk_v1-license.txt-at-main.md b/tools/sdks-and-programming/python/xdc_python_sdk_v1-license.txt-at-main.md new file mode 100644 index 00000000..163cb1f1 --- /dev/null +++ b/tools/sdks-and-programming/python/xdc_python_sdk_v1-license.txt-at-main.md @@ -0,0 +1,46 @@ +# XDC\_Python\_SDK\_V1/LICENSE.txt at main + +[Permalink](<../../../.gitbook/assets/LICENSE (1).txt>) + +XDCFoundation/XDC\_Python\_SDK\_V1 is licensed under the + +#### MIT License + +A short and simple permissive license with conditions only requiring preservation of copyright and license notices. Licensed works, modifications, and larger works may be distributed under different terms and without source code. + +**Permissions** + +* Commercial use +* Modification +* Distribution +* Private use + +**Limitations** + +* Liability +* Warranty + +**Conditions** + +* License and copyright notice + +This is not legal advice. [Learn more about repository licenses](https://docs.github.com/articles/licensing-a-repository/#disclaimer). + +Cannot retrieve contributors at this time + +| | Copyright © 2022 XDC Foundation | +| - | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| | | +| | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: | +| | | +| | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. | +| | | +| | THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | + +
+ + + + + +
diff --git a/tools/sdks-and-programming/python/xdc_python_sdk_v1-manifest.in-at-main.md b/tools/sdks-and-programming/python/xdc_python_sdk_v1-manifest.in-at-main.md new file mode 100644 index 00000000..6f7df408 --- /dev/null +++ b/tools/sdks-and-programming/python/xdc_python_sdk_v1-manifest.in-at-main.md @@ -0,0 +1,3 @@ +# XDC\_Python\_SDK\_V1/MANIFEST.in at main + +A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch? diff --git a/tools/sdks-and-programming/python/xdc_python_sdk_v1-readme.md-at-main.md b/tools/sdks-and-programming/python/xdc_python_sdk_v1-readme.md-at-main.md new file mode 100644 index 00000000..186ff201 --- /dev/null +++ b/tools/sdks-and-programming/python/xdc_python_sdk_v1-readme.md-at-main.md @@ -0,0 +1,72 @@ +# XDC\_Python\_SDK\_V1/README.md at main + +### XDC3PYTHON + +XDC3PYTHON SDK with support for smart contracts, XDC20 & XRC721. + +### Usage + +**pip install XDC3PYTHON** + +#### This SDK supports following Read & Write operations:- + +* xrc20 methods. + * Read methods. + * name(), balanceOf(account), totalSupply(), symbol(), decimals(), allowance(pwner, spender). + * Write methods. + * transferXDC(owner,receiver), approve(spender,amount), transferToken(receiver,amount), increaseAllowance(spender, addedValue), decreaseAllowance(spender, subtractedValue), transferFrom(sender, receiver, amount). +* xrc721 methods. + * Read methods. + * name(), symbol(), totalsupply(), balanceOf(ownerAddr), ownerOf(tokenId), tokenURI(tokenId), tokenByIndex(index), tokenOfOwnerByIndex(ownerAddress,index), supportInterface(interfaceId), getApproved(tokenId), isApprovedForAll(ownerAddress,spenderAddress). + * Write methods. + * setApprovalForAll(spenderAddress, booleanValue), approve(sepnderAddress , tokenId), transferFrom(recipient, tokenId), safeTransferFrom(spender, tokenId). + +#### Example for XRC20. + +``` +from XDC3PYTHON.xrc20 import XRC20 + +if __name__=="__main__": + + NETWORK_URL = "Your endpoint Url" + + obj = XRC20(NETWORK_URL) + + tokenAddr = input('Enter Token Address: ') + + tokenSymbol = obj.name(tokenAddr) + print(tokenSymbol) +``` + +This example returns name of the specified address. + +#### Example for XRC721. + +``` +from XDC3PYTHON.xrc721 import XRC721 + +if __name__=="__main__": + + NETWORK_URL = "Your endpoint Url" + + obj = XRC721(NETWORK_URL) + + tokenAddr = input('Enter Token Address: ') + + tokenSymbol = obj.name(tokenAddr) + print(tokenSymbol) +``` + +This example returns symbol of the specified address. + +### Transports + +**HTTP transport** + +### Required Data Types + +**Token Address** - `str type` **Account Address** - `str type` **amount** & **tokenId** - `int type` + +#### Author + +[XDCFoundation](broken-reference) diff --git a/tools/sdks-and-programming/python/xdc_python_sdk_v1-setup.py-at-main.md b/tools/sdks-and-programming/python/xdc_python_sdk_v1-setup.py-at-main.md new file mode 100644 index 00000000..baf3794c --- /dev/null +++ b/tools/sdks-and-programming/python/xdc_python_sdk_v1-setup.py-at-main.md @@ -0,0 +1,30 @@ +# XDC\_Python\_SDK\_V1/setup.py at main + +Permalink + +Cannot retrieve contributors at this time + +| | from setuptools import setup, find\_packages | +| - | -------------------------------------------------------------------------------- | +| | | +| | | +| | | +| | setup( | +| | name = 'XDC3PYTHON', | +| | version = '1.0.1', | +| | description = 'XDC PYTHON SDK with support for smart contracts, XRC20 & XRC721', | +| | long\_description=open('README.md').read(), | +| | url='https://github.com/XDCFoundation/XDC\_Python\_SDK\_V1.git', | +| | author='XDC Foundation', | +| | license='MIT', | +| | keywords='', | +| | packages=find\_packages(), | +| | ) | + +
+ + + + + +
diff --git a/tools/sdks-and-programming/python/xdc_python_sdk_v1-xdc3python-at-main.md b/tools/sdks-and-programming/python/xdc_python_sdk_v1-xdc3python-at-main.md new file mode 100644 index 00000000..437b7138 --- /dev/null +++ b/tools/sdks-and-programming/python/xdc_python_sdk_v1-xdc3python-at-main.md @@ -0,0 +1,3 @@ +# XDC\_Python\_SDK\_V1/XDC3PYTHON at main + +A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch? diff --git a/tools/sdks-and-programming/switft.md b/tools/sdks-and-programming/switft.md index 83cd2b25..b98e3d9d 100644 --- a/tools/sdks-and-programming/switft.md +++ b/tools/sdks-and-programming/switft.md @@ -206,7 +206,7 @@ Returns the symbol of the token, usually a shorter version of the name. Gets the total amount of tokens stored by the contract. `balanceOf(address account) → uint256`\ -Returns the number of NFTs in the owner's **** account. +Returns the number of NFTs in the owner's account. `ownerOf(tokenId) → address`\ Returns the owner of the NFT specified by `tokenId`. @@ -255,7 +255,7 @@ Approves another address to transfer the given token ID. The zero address indica /// @param \_owner An address for whom to query the balance -/// @return The number of NFTs owned by `_owner`, possibly zero function **** balanceOf(address \_owner) external view returns (uint256); +/// @return The number of NFTs owned by `_owner`, possibly zero function balanceOf(address \_owner) external view returns (uint256); /// @notice Find the owner of an NFT @@ -433,7 +433,7 @@ interface XRC165 { self.xrc721Enumerable = XRC721Enumerable(client: client) ``` -* To call **** the `name` of the token +* To call the `name` of the token ``` xrc721Metadata.name(contract: address) { (error, name) in print(name) } From 200006fadad0e73ea18868b7cd12b87596e11d56 Mon Sep 17 00:00:00 2001 From: Lance Lilly Date: Mon, 8 May 2023 14:13:48 +0000 Subject: [PATCH 036/115] GITBOOK-170: change request with no subject merged in GitBook --- SUMMARY.md | 4 +- run-a-node/full-node/README.md | 2 + .../{masternode => full-node}/full-node.md | 0 tools/sdks-and-programming/vyper.md | 47 +++++++++++++++++++ 4 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 run-a-node/full-node/README.md rename run-a-node/{masternode => full-node}/full-node.md (100%) create mode 100644 tools/sdks-and-programming/vyper.md diff --git a/SUMMARY.md b/SUMMARY.md index 1ad6c265..d751efaf 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -78,6 +78,7 @@ * [PHP SDK](tools/sdks-and-programming/php-sdk.md) * [DART SDK](tools/sdks-and-programming/dart-sdk.md) * [Rust SDK](tools/sdks-and-programming/rust-sdk.md) + * [Vyper](tools/sdks-and-programming/vyper.md) * [APIs & Packages](tools/apis-and-packages/README.md) * [XDC Connect](tools/apis-and-packages/npm-i-xdc-connect.md) * [Web3 Modal](tools/apis-and-packages/npm-i-xdc3.md) @@ -96,9 +97,10 @@ * [Run a Node](run-a-node/README.md) * [Masternode](run-a-node/masternode/README.md) * [How to Stake an XDC Masternode](run-a-node/masternode/how-to-stake-an-xdc-masternode.md) - * [Full Node (Docker version)](run-a-node/masternode/full-node.md) * [One-Click-Installer Masternode (Windows OS)](run-a-node/masternode/standby-node.md) * [One-Click-Installer Masternode (macOS)](run-a-node/masternode/one-click-installer-masternode-macos.md) + * [Full Node](run-a-node/full-node/README.md) + * [Full Node (Docker version)](run-a-node/full-node/full-node.md) ## Learn diff --git a/run-a-node/full-node/README.md b/run-a-node/full-node/README.md new file mode 100644 index 00000000..3902c65f --- /dev/null +++ b/run-a-node/full-node/README.md @@ -0,0 +1,2 @@ +# Full Node + diff --git a/run-a-node/masternode/full-node.md b/run-a-node/full-node/full-node.md similarity index 100% rename from run-a-node/masternode/full-node.md rename to run-a-node/full-node/full-node.md diff --git a/tools/sdks-and-programming/vyper.md b/tools/sdks-and-programming/vyper.md new file mode 100644 index 00000000..5644c6a7 --- /dev/null +++ b/tools/sdks-and-programming/vyper.md @@ -0,0 +1,47 @@ +--- +description: >- + Vyper is an EVM smart contracts programming language that is based on Python + and used as an alternative to Solidity. +--- + +# Vyper + +Vyper is a programming language used for deploying Ethereum Virtual Machine (EVM) smart contracts. As an alternative to the EVM programming language, Solidity, Vyper inherits many similarities to Python in syntax and structure. A few of its key principles and goals are increased security, language and compiler simplicity, and audibility. While it does have these principles, it also lacks certain features such as inheritance and modifiers. + +\ +As the second most used smart contract language for EVM, it does not have the level of developer community and contributors when compared to solidity. It does, however, make it easier for Python developers to start building and deploying EVM smart contracts. Vyper was not intended to be a replacement for solidity but to act as another tool for developers to use. These languages have key differences for smart contract deployment, which can be used for different uses and applications, but it mainly comes down to the developer's preference. + +### Principles and Goals + +Security: It should be possible and natural to build secure smart contracts in Vyper. + +Language and compiler simplicity: The language and the compiler implementation should strive to be simple. + +Auditability: Vyper code should be maximally human-readable. Furthermore, it should be maximally difficult to write misleading code. Simplicity for the reader is more important than simplicity for the writer, and simplicity for readers with low prior experience with Vyper (and low prior experience with programming in general) is particularly important. + +### Features + +As a Python-based alternative to Solidity, it does have key differences and features. These are just some of the differences for Vyper. More details and information can be found in the resources below. + +Support for signed integers and decimal fixed point numbers + +Decidability: It is possible to compute a precise upper bound for the gas consumption of any Vyper function call. + +Strong typing + +Small and understandable compiler code + +Limited support for pure functions: Anything marked constant is not allowed to change the state. + +#### + +#### Vyper Resources + +[https://docs.vyperlang.org/en/stable/ \ + \ +https://reference.auditless.com/cheatsheet/ \ +](https://docs.vyperlang.org/en/stable/https://reference.auditless.com/cheatsheet/)\ + + +\ +\ From 8db84685034129fb82adce9a9d036cb835879d60 Mon Sep 17 00:00:00 2001 From: Liam Lai Date: Sun, 4 Jun 2023 00:39:25 +1000 Subject: [PATCH 037/115] add xdpos v2 api and migration details --- get-details/xdpos2.0-migration.md | 62 +++++++ tools/apis-and-packages/xdpos2.0-apis.md | 216 +++++++++++++++++++++++ 2 files changed, 278 insertions(+) create mode 100644 get-details/xdpos2.0-migration.md create mode 100644 tools/apis-and-packages/xdpos2.0-apis.md diff --git a/get-details/xdpos2.0-migration.md b/get-details/xdpos2.0-migration.md new file mode 100644 index 00000000..fa8f6181 --- /dev/null +++ b/get-details/xdpos2.0-migration.md @@ -0,0 +1,62 @@ +# XDPoS 2.0 Migration Steps + +- [To Master Owner](#to-master-owner) +- [To Protocol Team and Private Network Owner](#to-protocol-team-and-private-network-owner) +- [Verification](#verification) + +## To Master Owner +Upgrading the consensus engine from XDPoS1.0 to XDC2.0 only takes a 3 simple steps. + +1. All master node owners confirm their participation by deploying the latest code version. + +2. The protocol team will create a code branch that specifies a future block height as the consensus switch point, and build a docker image accordingly. + +3. Master node owners restart their nodes using this docker image. This step must be done before the network has reached the switch block, and this is why we want to ensure everyone is on the same page via step-1. + +## To Protocol Team and Private Network Owner + +More generically, to upgrade a XDC devnet/testnet/private network that you own: + +1. Configure a switch block number: Check your current block height and decide on a future block number as the switch block point. The block height should allow enough time for you to complete all the steps below. Once decided, configure it here: https://github.com/XinFinOrg/XDPoSChain/blob/dev-upgrade/common/constants.go#L39 + +sample: +``` +var TIPV2SwitchBlock = big.NewInt(73737373) +``` + +2. Configure a voting quorum threshold: The maximum reasonable value is 2/3, giving your network the highest level of Byzantine fault tolerance of 1/3. The threshold can be set here: https://github.com/XinFinOrg/XDPoSChain/blob/dev-upgrade/params/config.go#L72. + +sample: +``` + Default: { + SwitchRound: 0, + CertThreshold: 73, // based on masternode is 108 + TimeoutSyncThreshold: 3, + TimeoutPeriod: 60, + MinePeriod: 10, + } +``` + +3. Redeploy. Rebuild the node binary based on your changes above, and then deploy the binary on all your masternodes. + +## Verification +To verify whether the switch was successful: +* Monitor the block height by attach into web3 portal +* From the dashboard and wait until the switch block is passed. +* Query web3 api, to see v2 block specific information + +``` +curl --location 'http://Yournode.RPC.Endpoint' \ +--header 'Content-Type: application/json' \ +--data '{"jsonrpc":"2.0","method":"XDPoS_getV2BlockByNumber","params":["latest"],"id":1}' +``` + +``` +{ + "result": { + "Hash": "0x123", + "Round": 10, + "Number": 10 // This number is bigger then 0 + } +} +``` \ No newline at end of file diff --git a/tools/apis-and-packages/xdpos2.0-apis.md b/tools/apis-and-packages/xdpos2.0-apis.md new file mode 100644 index 00000000..960075b8 --- /dev/null +++ b/tools/apis-and-packages/xdpos2.0-apis.md @@ -0,0 +1,216 @@ +# XDPoS 2.0 API + +- [Get V2 Block By Number](#xdpos_getv2blockbynumber) +- [Get V2 Block By Hash](#xdpos_getv2blockbyhash) +- [Get Masternodes By Number](#xdpos_getmasternodesbynumber) +- [Get Latest Pool Status](#xdpos_getlatestpoolstatus) + + +Provide `curl` command as exmaple + +## XDPoS_getV2BlockByNumber + +Parameter can be `number` or reserved words like `latest`, `committed` + +Example 1: By latest block +``` +curl --location 'https://xdc.rpc.node' \ +--header 'Content-Type: application/json' \ +--data '{"jsonrpc":"2.0","method":"XDPoS_getV2BlockByNumber","params":["latest"],"id":1}' +``` + +``` +{ + "jsonrpc": "2.0", + "id": 1, + "result": { + "Hash": "0x6867eadf2bb4ecabd020f00f178664144090d08575bc73037d5fa1846c2362a5", + "Round": 597698, + "Number": 597682, + "ParentHash": "0xd3db9d9620c6e99992072cf22b91a4dd666e20891e61fa2064b902f6687c5373", + "Committed": false, + "EncodedRLP": "xxx", + "Error": "" + } +} +``` + +Example 2: By latest committed block + +``` +curl --location 'https://devnetstats.apothem.network/subnet' \ +--header 'Content-Type: application/json' \ +--data '{"jsonrpc":"2.0","method":"XDPoS_getV2BlockByNumber","params":["committed"],"id":1}' +``` + +``` +{ + "jsonrpc": "2.0", + "id": 1, + "result": { + "Hash": "0x3e906c03503a17c55a2fcc8553e8b08b8c591586152a3df8043af3c235a6612c", + "Round": 598787, + "Number": 598771, + "ParentHash": "0x05f05c393e08743bd0979cf1cf3125e81b6c14422055cb9b4a802b2ee8f50ad9", + "Committed": true, + "EncodedRLP": "xxx", + "Error": "" + } +} +``` + + +Example 3: By number + +Note: You need to convert block number into **Hexadecimal** +``` +curl --location 'https://xdc.rpc.node' \ +--header 'Content-Type: application/json' \ +--data '{"jsonrpc":"2.0","method":"XDPoS_getV2BlockByNumber","params":["0x91EB2"],"id":1}' +``` + +``` +{ + "jsonrpc": "2.0", + "id": 1, + "result": { + "Hash": "0x6867eadf2bb4ecabd020f00f178664144090d08575bc73037d5fa1846c2362a5", + "Round": 597698, + "Number": 597682, + "ParentHash": "0xd3db9d9620c6e99992072cf22b91a4dd666e20891e61fa2064b902f6687c5373", + "Committed": true, + "EncodedRLP": "xxx", + "Error": "" + } +} +``` + +## XDPoS_getV2BlockByHash + +Parameter is `Block Hash` + +Example: +``` +curl --location 'https://xdc.rpc.node' \ +--header 'Content-Type: application/json' \ +--data '{"jsonrpc":"2.0","method":"XDPoS_getV2BlockByHash","params":["0x6867eadf2bb4ecabd020f00f178664144090d08575bc73037d5fa1846c2362a5"],"id":1}' +``` + +``` +{ + "jsonrpc": "2.0", + "id": 1, + "result": { + "Hash": "0x6867eadf2bb4ecabd020f00f178664144090d08575bc73037d5fa1846c2362a5", + "Round": 597698, + "Number": 597682, + "ParentHash": "0xd3db9d9620c6e99992072cf22b91a4dd666e20891e61fa2064b902f6687c5373", + "Committed": true, + "EncodedRLP": "xxx", + "Error": "" + } +} +``` + +## XDPoS_getMasternodesByNumber + +This API is mainly for debugging propose and check masternode selection process is fine. Get the current masternode or query by number. + +Parameter: `none` or `Block Number` + +Example 1: latest selection +``` +curl --location 'https://xdc.rpc.node' \ +--header 'Content-Type: application/json' \ +--data '{"jsonrpc":"2.0","method":"XDPoS_getMasternodesByNumber","params":[],"id":1}' +``` + +``` +{ + "jsonrpc": "2.0", + "id": 1, + "result": { + "Number": 598597, + "Round": 598613, + "MasternodesLen": 3, + "Masternodes": [ + "xdcefea93e384a6ccaaf28e33790a2d1b2625bf964d", + "xdc888c073313b36cf03cf1f739f39443551ff12bbe", + "xdc5058dfe24ef6b537b5bc47116a45f0428da182fa" + ], + "PenaltyLen": 0, + "Penalty": [], + "Error": null + } +} +``` + +Example 2: By Block Number + +``` +curl --location 'https://xdc.rpc.node' \ +--header 'Content-Type: application/json' \ +--data '{"jsonrpc":"2.0","method":"XDPoS_getMasternodesByNumber","params":["0x91EB2"],"id":1}' +``` + +``` +{ + "jsonrpc": "2.0", + "id": 1, + "result": { + "Number": 597682, + "Round": 597698, + "MasternodesLen": 3, + "Masternodes": [ + "xdcefea93e384a6ccaaf28e33790a2d1b2625bf964d", + "xdc888c073313b36cf03cf1f739f39443551ff12bbe", + "xdc5058dfe24ef6b537b5bc47116a45f0428da182fa" + ], + "PenaltyLen": 0, + "Penalty": [], + "Error": null + } +} +``` + +## XDPoS_getLatestPoolStatus + +This API is for mainly for debugging purpose, it will show current voting and timeout pool status. Any good for if block gets stuck and we can check which signer it is waiting for. Fast ping point which master node is having issue. + +``` +curl --location 'https://xdc.rpc.node' \ +--header 'Content-Type: application/json' \ +--data '{"jsonrpc":"2.0","method":"XDPoS_getLatestPoolStatus","params":[],"id":1}' +``` + +``` +{ + "jsonrpc": "2.0", + "id": 1, + "result": { + "timeout": {}, + "vote": { + "598031:596250:598015:0x8784d1fbb9b4e9718b2ccad3e14a2148b79a534494c7be60c20857f04b5a6374": { // CurrentRound:GapBlockNumber:ProposedBlockNumber:ProposedBlockHash + "CurrentNumber": 3, + "CurrentSigners": [ + "xdc5058dfe24ef6b537b5bc47116a45f0428da182fa", + "xdcefea93e384a6ccaaf28e33790a2d1b2625bf964d", + "xdc888c073313b36cf03cf1f739f39443551ff12bbe" + ], + "MissingSigners": [] + }, + "598049:596250:598033:0xe50ea51a36a391b2e453e34ec10b7f86ebb459d621240c05efe53bb0cfca148f": { + "CurrentNumber": 2, + "CurrentSigners": [ + "xdc5058dfe24ef6b537b5bc47116a45f0428da182fa", + "xdc888c073313b36cf03cf1f739f39443551ff12bbe" + ], + "MissingSigners": [ + "xdcefea93e384a6ccaaf28e33790a2d1b2625bf964d" + ] + } + } + } +} +``` + From 2d212ec0cb5e8de6960b63f2d0fd7bce06cff2d4 Mon Sep 17 00:00:00 2001 From: s4njk4n <105919271+s4njk4n@users.noreply.github.com> Date: Sun, 4 Jun 2023 10:15:37 +1000 Subject: [PATCH 038/115] Update README.md Added intro information --- run-a-node/README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/run-a-node/README.md b/run-a-node/README.md index 1c490b5c..bea36e31 100644 --- a/run-a-node/README.md +++ b/run-a-node/README.md @@ -1,2 +1,8 @@ # Run a Node +The XDC Network is a KYC-enforced Enterprise-grade hybrid blockchain network with many advantages. The network consists of many computers around the globe running special software (the XDC client) which allows them to perform their functions for the XDC blockchain. Computers running this special software are referred to as "Nodes". +A "Full Node" is a Node that keeps a complete copy of the XDC blockchain. Anyone can run a Full Node. +Full-Nodes can be broken down into: +a) Master Nodes - these participate in consensus (they validate transactions). There are a maximum of 108 of these and they require the Owner of the Node to be identified through a KYC process in addition to staking 10M XDC. +b) Standby Nodes - these keep an up-to-date copy of the XDC blockchain and do not normally participate in consensus (i.e they don't normally validate transactions on the network). The exception to this however, is that if a Master Node goes offline (or is slashed for any reason), then a Standby Node will be temporarily elevated to Master Node status and will perform the functions of a Master Node until the original Master Node comes back online, at which point the Standby Node resumes its Standby Node status. There are a maximum of 192 Standby Nodes and these also require the Owner of the Node to be identified through the same KYC process as for Master Nodes in addition to also being required to stake 10M XDC. +c) Lastly there are also Full Nodes that never participate in consensus. I believe there may be a maximum of 4700 of these and anyone can run one without requiring KYC or staking any XDC. The utility of this is so users can maintain a copy of the blockchain to run local queries on. From cbb4ab25ee1b183454fb210c7a34277891912c14 Mon Sep 17 00:00:00 2001 From: s4njk4n <105919271+s4njk4n@users.noreply.github.com> Date: Sun, 4 Jun 2023 10:21:37 +1000 Subject: [PATCH 039/115] Update README.md Formatted intro --- run-a-node/README.md | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/run-a-node/README.md b/run-a-node/README.md index bea36e31..9a151deb 100644 --- a/run-a-node/README.md +++ b/run-a-node/README.md @@ -1,8 +1,15 @@ # Run a Node The XDC Network is a KYC-enforced Enterprise-grade hybrid blockchain network with many advantages. The network consists of many computers around the globe running special software (the XDC client) which allows them to perform their functions for the XDC blockchain. Computers running this special software are referred to as "Nodes". + +## Types of Nodes + A "Full Node" is a Node that keeps a complete copy of the XDC blockchain. Anyone can run a Full Node. + Full-Nodes can be broken down into: -a) Master Nodes - these participate in consensus (they validate transactions). There are a maximum of 108 of these and they require the Owner of the Node to be identified through a KYC process in addition to staking 10M XDC. -b) Standby Nodes - these keep an up-to-date copy of the XDC blockchain and do not normally participate in consensus (i.e they don't normally validate transactions on the network). The exception to this however, is that if a Master Node goes offline (or is slashed for any reason), then a Standby Node will be temporarily elevated to Master Node status and will perform the functions of a Master Node until the original Master Node comes back online, at which point the Standby Node resumes its Standby Node status. There are a maximum of 192 Standby Nodes and these also require the Owner of the Node to be identified through the same KYC process as for Master Nodes in addition to also being required to stake 10M XDC. -c) Lastly there are also Full Nodes that never participate in consensus. I believe there may be a maximum of 4700 of these and anyone can run one without requiring KYC or staking any XDC. The utility of this is so users can maintain a copy of the blockchain to run local queries on. + +* **Master Nodes** - these participate in consensus (they validate transactions). There are a maximum of 108 of these and they require the Owner of the Node to be identified through a KYC process in addition to staking 10M XDC. + +* **Standby Nodes** - these keep an up-to-date copy of the XDC blockchain and do not normally participate in consensus (i.e they don't normally validate transactions on the network). The exception to this however, is that if a Master Node goes offline (or is slashed for any reason), then a Standby Node will be temporarily elevated to Master Node status and will perform the functions of a Master Node until the original Master Node comes back online, at which point the Standby Node resumes its Standby Node status. There are a maximum of 192 Standby Nodes and these also require the Owner of the Node to be identified through the same KYC process as for Master Nodes in addition to also being required to stake 10M XDC. + +* **Non-Validator Full Nodes** - these do not participate in consensus. There are a maximum of 4700 of these and anyone can run one without requiring KYC or staking any XDC. The utility of this is so users can maintain a copy of the blockchain to run local queries on. From 89c78ea82bb387d168b3e6fb6ed4bfe246556177 Mon Sep 17 00:00:00 2001 From: s4njk4n <105919271+s4njk4n@users.noreply.github.com> Date: Sun, 4 Jun 2023 10:31:47 +1000 Subject: [PATCH 040/115] Update README.md Added XDC node payment info --- run-a-node/README.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/run-a-node/README.md b/run-a-node/README.md index 9a151deb..55a2f825 100644 --- a/run-a-node/README.md +++ b/run-a-node/README.md @@ -13,3 +13,15 @@ Full-Nodes can be broken down into: * **Standby Nodes** - these keep an up-to-date copy of the XDC blockchain and do not normally participate in consensus (i.e they don't normally validate transactions on the network). The exception to this however, is that if a Master Node goes offline (or is slashed for any reason), then a Standby Node will be temporarily elevated to Master Node status and will perform the functions of a Master Node until the original Master Node comes back online, at which point the Standby Node resumes its Standby Node status. There are a maximum of 192 Standby Nodes and these also require the Owner of the Node to be identified through the same KYC process as for Master Nodes in addition to also being required to stake 10M XDC. * **Non-Validator Full Nodes** - these do not participate in consensus. There are a maximum of 4700 of these and anyone can run one without requiring KYC or staking any XDC. The utility of this is so users can maintain a copy of the blockchain to run local queries on. + +## How the XDC Network Identifies and Pays Nodes + +The XDC Network uses 2 addresses on the network to identify and pay each node. These are known as the "Coinbase address" (just a jargon term, not related to Coinbase the company) and the "Masternode-owner's address". Each of these addresses is just a standard wallet address on the XDC Network. + +The XDC client running on your computer identifies your machine to the network by presenting its Coinbase address. The XDC client keeps a record of its own Coinbase address by keeping a "keystore file" (also known as a UTC file), which is essentially just a normal XDC wallet keystore file, but in this case it has no password (or rather the password field is blank). No XDC coins are ever sent to this address and it is not used for any transactions. The Coinbase address is used solely by your XDC client to identify your Node to the network. + +The Masternode-owner's address is also a standard XDC wallet address. This however is the address from which you send your 10M XDC to register your node, and importantly, it is also the address to which your Node's payments are sent. YOU SHOULD NEVER EVER EVER EVER put the keystore file for your Masternode-owner's address onto your Node computer. If an attacker obtains both of the keystore files (and your Masternode-owner's address password), they could not only compromise the funds in the wallet of the Masternode-owner's address, but also potentially resign the node and collect the 10M XDC refund. So… IMPORTANT! - DON'T PUT YOUR MASTERNODE OWNER'S ADDRESS KEYSTORE FILE ANYWHERE NEAR YOUR NODE. + +At the time that the KYC is done and the Node is registered, you are essentially registering and linking both of these addresses to each other. The XDC Network then knows which Masternode-owner's address owns which Coinbase address, or rather, it knows which wallet to pay for the computing contribution provided by which Node. + +_Just as an aside, you will also see the Coinbase address referred by some as the "Masternode address" (as distinct from the "Masternode OWNERS address")._ From 68bc6a66a2ee4c63f9dc8611c0029a52e2720554 Mon Sep 17 00:00:00 2001 From: s4njk4n <105919271+s4njk4n@users.noreply.github.com> Date: Thu, 15 Jun 2023 13:10:12 +1000 Subject: [PATCH 041/115] Create securing-your-xdc-masternode.md added article --- .../securing-your-xdc-masternode.md | 487 ++++++++++++++++++ 1 file changed, 487 insertions(+) create mode 100644 run-a-node/masternode/securing-your-xdc-masternode.md diff --git a/run-a-node/masternode/securing-your-xdc-masternode.md b/run-a-node/masternode/securing-your-xdc-masternode.md new file mode 100644 index 00000000..4bcadea3 --- /dev/null +++ b/run-a-node/masternode/securing-your-xdc-masternode.md @@ -0,0 +1,487 @@ +# Securing your XDC Masternode + +(Instructions are for a Docker node running on Ubuntu 20.04LTS) + +_Note: Although this guide refers to masternodes, it will also work for standby +nodes as well as non-validator nodes (as long as they are reachable via a public +IP address). For non-validator nodes using HTTP/Websocket JSON-RPC connection, +you'll also need to take into account your specific port access requirements +when dealing with ports 8888 and/or 8989._ + +--- + +XDC network masternodes are important because they validate transactions, help +to maintain the network's security and integrity, and ensure that the network +runs smoothly. Securing your node will help with all of these issues. + +From a high-level consideration, to secure your XDC masternode you would need to: +1. Keep it up-to-date with the latest security patches. +2. Use a strong and unique password. +3. Change your SSH port and enable firewall rules to restrict access to the node. +4. Use SSL/TLS encryption to secure communication with it. +5. Implement access controls to limit who can interact with it. +6. Regularly monitor it for any suspicious activity or unauthorized access attempts. + +We will deal with each of these in turn below. + +--- + + +## Keeping your node up-to-date with the latest security patches + +This has 2 components. Component 1 is the server OS. Component 2 is the XDC client. + +### Regarding the Server OS + +As per [XinFin's original XDC network node setup instructions](https://xinfin.org/setup-masternode) +deploying an XDC node by the Docker method is supported on CentOS, RedHat +Enterprise Linux (latest release) and Ubuntu 15.04+. + +Each OS vendor has a period for which its product is supported. For example we +can see in the image below that Ubuntu 20.04LTS has hardware and maintenance +updates until 2025 as well as Extended Security Maintenance until 2032. +Ensure your OS is supported with current updates. + +![Ubuntu LTS Release Cycle](https://www.xdc.dev/uploads/articles/bwitngpypfywf72bfra9.png) + +To update the OS packages on your server we first need to connect to the remote +server so we can then do all the following steps on the remote server. Remember +to replace “root” in this command with your actual username for the remote +server, and replace ip.address with the actual IP address of the remote server: + +``` +ssh -lroot -p22 ip.address +``` + +Update the OS packages: + +``` +sudo apt update -y && sudo apt upgrade -y && sudo apt autoremove -y +``` + +Many OS updates often require you to reboot your server, but we must first stop +the XDC client. To do this, first change to the Mainnet client directory: + +``` +cd ~/XinFin-Node/mainnet +``` + +Stop the XDC client: + +``` +sudo ./docker-down.sh +``` + +Reboot the server: + +``` +sudo reboot +``` + +You’ll notice this has disconnected your Terminal from the VPS while it reboots. +Allow enough time for the VPS to reboot, then reconnect to your VPS as you +normally would. Remember to replace “root” with your actual username for the +remote server, and replace ip.address with the actual IP address of the remote +server: + +``` +ssh -lroot -p22 ip.address +``` + +Change to the Mainnet client directory: + +``` +cd ~/XinFin-Node/mainnet +``` + +Start the XDC Client: + +``` +sudo ./docker-up.sh +``` + +Logout of your server: + +``` +logout +``` + + +### Regarding the XDC Network Client + +Connect to your VPS as you normally would. Remember to replace “root” with your +actual username for the remote server, and replace ip.address with the actual +IP address of the remote server: + +``` +ssh -lroot -p22 ip.address +``` + +Change to the Mainnet client directory: + +``` +cd ~/XinFin-Node/mainnet +``` + +In the Mainnet client directory there is a script we can run to upgrade the XDC +network configuration scripts and the Docker images. _Note that as part of the +process it will stop and start the XDC client, so expect to see your peers drop +on [the XDC Foundation Network Stats page](https://stats.xdc.org)_. To run the +upgrade script: + +``` +sudo ./upgrade.sh +``` + +Logout of your server: + +``` +logout +``` + + +--- + +## Using a strong and unique password + +The time it takes to guess passwords by brute force depends on the length and +complexity of the password, as well as the computing power of the attacker. It +can range from a few seconds to several years or even centuries (or even longer!). + +As per the image below (sourced from Hive Systems), in 2023 an 18 character +password consisting of only numbers can take as little as 6 days to obtain +by brute force. Using the same length password but including random numbers, +upper and lowercase letters as well as symbols, can increase the brute force +time to 26 trillion years with the same computing power. + +![Hive Systems Password Brute Force Times](https://www.xdc.dev/uploads/articles/s4k9wjuqb4d3mpp9np1d.jpg) + +Ensuring that a password is not reused is also important. If the same password +is used on multiple sites then if ANY of those sites are compromised and your +password is somehow obtained, it could potentially allow unauthorised parties +to access other accounts/services where you have reused the same password. + +If you have difficulty generating a random password with the criteria described +above, there are online password generators from reputable vendors. One example +of this is the [Norton Password Generator](https://my.norton.com/extspa/passwordmanager?path=pwd-gen) + +![Norton Password Generator](https://www.xdc.dev/uploads/articles/9t0dg33rothvfyldcxee.png) + +If you already have an existing password and would like to change it, you can +do so by first connecting to your VPS as you normally would. Remember to +replace “root” with your actual username for the remote server, and replace +ip.address with the actual IP address of the remote server: + +``` +ssh -lroot -p22 ip.address +``` + +Change your password with the following command. Replace `` with the +actual username of the user whose password you want to change. You will be +prompted to enter and confirm the new password: + +``` +sudo passwd +``` + +Logout of your server: + +``` +logout +``` + +_Note: another alternative is to setup ssh key-based authentication and then to +disable the ability to use password logins. This will not be covered in this +article. If there is demand, I'll consider covering it in a future article._ + +--- + +## Change your SSH port and enable firewall rules to restrict access to the node + +Securing the server ports and RPC endpoint is important to prevent unauthorized +access and potential security breaches such as execution of malicious code. + +![XDC Network Andromeda Upgrade](https://www.xdc.dev/uploads/articles/j0jr9q4855p78mbb5742.jpg) + +Those who were around at the time may remember that the Andromeda update to the +XDC network implemented an upgrade to Geth 1.9.X. +From examining an XDC node's docker-compose.yml file shown in the image below, we +can see that Geth nodes on the XDC network use: +- Port 30303 for RLPx(TCP)/UDP peer-to-peer communications allowing node discovery +and connection to peers +- Port 8989 for HTTP JSON-RPC API which allows external applications to interact +with the XDC blockchain +- Port 8888 for secure Websocket communications to the XDC blockchain + +![XDC Node docker-compose.yml](https://www.xdc.dev/uploads/articles/8m6yrimgh0uj94tbxe9h.png) + +In addition Linux servers normally have their SSH port set at 22 by default, and +this is used to connect to the server and access its command line. + +For the purposes of this article, we will assume that your masternode is being +used only for the purpose of maintaining the XDC blockchain and does not require +RPC/Websocket access for external applications to use. + +Based on the above, the best way of securing our node with a firewall is to: +- Change our SSH port from 22 to a different number to make it harder for random +malcontents to connect +- Use a firewall to block ALL incoming ports +- Then open ONLY ports 30303 and our new SSH port +- We will leave ports 8888 and 8989 blocked (filtered) as we are assuming that +these are not needed as noted above + +To change the port used for SSH on Ubuntu, you need to first connect to your VPS +as you normally would. Remember to replace “root” with your actual username for +the remote server, and replace ip.address with the actual IP address of the +remote server: + +``` +ssh -lroot -p22 ip.address +``` + +Next you need to edit the SSH configuration file located at /etc/ssh/sshd_config : + +``` +sudo nano /etc/ssh/sshd_config +``` + +Look for the line that says "Port 22". If there is a `#` before "Port 22" as +in the image below, you'll need to delete the `#` symbol: + +![Image description](https://www.xdc.dev/uploads/articles/kgnjxqd6zn05l4h5e32x.png) + +Change the number 22 to whatever new port number you want to use for SSH connections: + +![Image description](https://www.xdc.dev/uploads/articles/c7k8sneupg1byt2o265y.png) + +Save the file: + +> Press "CTRL+X" +> Press "y" +> Press "ENTER" + +Then restart the SSH service: + +``` +sudo service ssh restart +``` + +_Note: Whenever we have previously used "-p22" as part of our command to connect +to a VPS via SSH, this is specifying to ssh what port the remote server is using +for ssh. From now on whenever you connect to your XDC node, you will need to +change the 22 in "-p22" to your new port number instead._ + +![UFW Uncomplicated Firewall](https://www.xdc.dev/uploads/articles/rnotl68nnsd6osg6rp2c.png) + +Now to implement a firewall we will use UFW (Uncomplicated Firewall) which is +a front-end tool for managing firewall rules on Ubuntu. + +First we need to install ufw: + +``` +sudo apt install ufw +``` + +Next we establish our default policies to block ALL incoming traffic and only +allow outgoing traffic: + +``` +sudo ufw default deny incoming +sudo ufw default allow outgoing +``` + +Then we open up port 30303 so the XDC client is discoverable by peers: + +``` +sudo ufw allow 30303 +``` + +**IMPORTANT: Next we need to ensure that we open up our SSH port (22 or whatever +port number you changed it to):** + +``` +sudo ufw allow +``` + +Lastly we need to enable UFW: + +``` +sudo ufw enable +``` + +Reboot your server: + +``` +reboot +``` + +Now ssh to your server to test your new port number instead of 22 and ensure +that you can connect ok. + +If you are unable to connect and need to get back to the command line on your +server to modify the firewall details, most VPS providers will have a console +for the server directly accessible through their VPS control panel. So you +just need to go to your VPS provider website, login and find the console for +the VPS running your XDC client. Then login and do what you need to do. + +After rebooting, we will need to restart the XDC Mainnet client, so first we +need to SSH to our VPS: + +``` +ssh -lroot -p ip.address +``` + +Change to the XDC Mainnet client directory: + +``` +cd ~/XinFin-Node/mainnet +``` + +Restart the XDC Mainnet client: + +``` +sudo ./docker-up.sh +``` + +Then logout of your VPS: + +``` +logout +``` + +_Note: In another planned future article we will be making some further +adjustments allowing certain IP addresses restricted access to port 8989 +(HTTP JSON-RPC) in the firewall rules._ + +--- + +## Use SSL/TLS encryption to secure communication with the node + +SSL/TLS encryption makes things safer if external applications are using +the JSON-RPC (HTTP/Websocket) functionalities of your node to communicate +with the XDC blockchain. The assumption of this article is that your node +is not being used for this so this issue will not be discussed here. If +there is demand I will explore it in a future article + +--- + +## Implement access controls to limit who can interact with the node + +This involves configuring firewall rules to restrict access to the node +from specific IP addresses or networks and we will be playing with this +shortly in an upcoming article where we will be allowing restricted +access to specific ports from only certain whitelisted IP addresses. + +--- + +## Regularly monitor it for any suspicious activity or unauthorized access attempts + +You can regularly monitor an XDC node for any suspicious activity or +unauthorized access attempts by setting up alerts and notifications for any +unusual activity and regularly reviewing logs and metrics. Additionally, +you can consider using third-party security tools and services to enhance +your node's security. Usage of monitoring should not however replace +implementing security best practices such as using strong passwords +and keeping your software up to date. + +Many VPS providers will have some kind of VPS monitoring in place which +is already accessible via their control panel and generally includes +alerts when certain preset VPS parameter limits (eg CPU usage, memory +usage, network traffic, disk I/O) are breached. If your VPS provider does +not provide this, third party solutions such as Netdata can be used to +provide it. Use of Netdata will not be covered here. If there is demand +I will cover it in a future article. + +![Fail2Ban](https://www.xdc.dev/uploads/articles/wyzx4b2zplcdygv1epcd.png) + +Implementing the fail2ban linux package can also be useful for keeping +your node safe by blocking IP addresses that attempt to access the node +with incorrect login credentials or perform suspicious activities. + +Install fail2ban: + +``` +sudo apt install fail2ban +``` + +Next we create a copy of the configuration file for us to customise: + +``` +sudo cp -p /etc/fail2ban/jail.conf /etc/fail2ban/jail.local +``` + +Open the new file in nano so we can configure fail2ban: + +``` +sudo nano /etc/fail2ban/jail.local +``` + +Scroll down until you find this sshd section: + +![The SSHD section you are looking for](https://www.xdc.dev/uploads/articles/6h9v11pewrmixth1hzgl.png) + +Replace the 3 white lines shown above with all of these lines: + +> enabled = true +> filter = sshd +> port = ssh +> banaction = iptables-multiport +> findtime = 86400 # 86400 seconds = 1 day +> bantime = -1 # -1 = ban forever +> maxretry = 3 # 3 attempts in 1 day = ban +> logpath = %(sshd_log)s +> backend = %(sshd_backend)s + +![Reconfigured fail2ban](https://www.xdc.dev/uploads/articles/x1o78jtu6qkf6myhwix4.png) + +Save the file: + +> Press "CTRL+X" +> Press "y" +> Press "ENTER" + +Restart fail2ban: + +``` +sudo systemctl restart fail2ban +``` + +Logout of your server + +``` +logout +``` + +**Commands to use fail2ban** + +To check who is banned: + +``` +sudo fail2ban-client status sshd +``` + +To unban an IP address: + +``` +sudo fail2ban-client set sshd unban +``` + +If you manage to ban yourself by using incorrect passwords etc, you can use +the direct console on your VPS provider's control panel to access the command +line of your VPS (same as described in the Firewall section above) and unban +your IP address using the above command. + +_(Special thanks to [go140point6 GitHub](https://github.com/go140point6/pli-node-info/blob/main/fail2ban) re fail2ban)_ + +--- + +In conclusion, securing XDC nodes is crucial to protect the network from +potential attacks and ensure the safety of user funds. By implementing +the methods discussed in this article, such as using strong passwords, +enabling firewalls, regularly updating software, and using monitoring +tools, node operators can significantly increase the security of their +nodes. It is important to stay vigilant and proactive in maintaining +node security to prevent any potential breaches. With these measures in +place, the XDC network can continue to operate securely and efficiently. + +--- From e074fbcefbf120d249886cd4e2d777074305be70 Mon Sep 17 00:00:00 2001 From: s4njk4n <105919271+s4njk4n@users.noreply.github.com> Date: Thu, 15 Jun 2023 13:12:55 +1000 Subject: [PATCH 042/115] Add files via upload Added images for "Securing your masternode" article --- ...buntu-release-cycle-securing-masternode.png | Bin 0 -> 90713 bytes ...02-brute-force-time-securing-masternode.jpg | Bin 0 -> 125620 bytes ...age03-norton-pw-gen-securing-masternode.png | Bin 0 -> 353662 bytes .../image04-andromeda-securing-masternode.jpg | Bin 0 -> 35643 bytes .../image05-yml-file-securing-masternode.png | Bin 0 -> 39505 bytes .../image06-port22-securing-masternode.png | Bin 0 -> 33844 bytes ...mage07-new-ssh-port-securing-masternode.png | Bin 0 -> 34316 bytes .../image08-ufw-logo-securing-masternode.png | Bin 0 -> 16268 bytes ...age09-fail2ban-logo-securing-masternode.png | Bin 0 -> 40983 bytes ...l2ban-sshd-original-securing-masternode.png | Bin 0 -> 20686 bytes ...1-fail2ban-sshd-new-securing-masternode.png | Bin 0 -> 35212 bytes 11 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 .gitbook/assets/image01-ubuntu-release-cycle-securing-masternode.png create mode 100644 .gitbook/assets/image02-brute-force-time-securing-masternode.jpg create mode 100644 .gitbook/assets/image03-norton-pw-gen-securing-masternode.png create mode 100644 .gitbook/assets/image04-andromeda-securing-masternode.jpg create mode 100644 .gitbook/assets/image05-yml-file-securing-masternode.png create mode 100644 .gitbook/assets/image06-port22-securing-masternode.png create mode 100644 .gitbook/assets/image07-new-ssh-port-securing-masternode.png create mode 100644 .gitbook/assets/image08-ufw-logo-securing-masternode.png create mode 100644 .gitbook/assets/image09-fail2ban-logo-securing-masternode.png create mode 100644 .gitbook/assets/image10-fail2ban-sshd-original-securing-masternode.png create mode 100644 .gitbook/assets/image11-fail2ban-sshd-new-securing-masternode.png diff --git a/.gitbook/assets/image01-ubuntu-release-cycle-securing-masternode.png b/.gitbook/assets/image01-ubuntu-release-cycle-securing-masternode.png new file mode 100644 index 0000000000000000000000000000000000000000..9dde661b587f66ca4d15a12c8dfb867f54696407 GIT binary patch literal 90713 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∼ZQ7f|3w^U>h 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 MwG1??)$ODI2aYb2-2eap literal 0 HcmV?d00001 diff --git a/.gitbook/assets/image02-brute-force-time-securing-masternode.jpg b/.gitbook/assets/image02-brute-force-time-securing-masternode.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c7c5eba902974da9492e91b40fcf3207d523ad4d GIT binary patch literal 125620 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%0DVn_u3Z2lLAkfGy#038m#d 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 sFNfT(b> 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 mi4R=|agqeWBnhaA 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
nTA{=vnAJ35b4yJeu>LerzEKjz4!$ zqyd=)@M7_;a4kK%3UJhQD~YQy0GvE1jzLe%?HLXBg&i4lU87WYDYkCP3Szm_NMjC~ z#R1jgNNJ`zaG_^OabNKra}Jv3u5E{Rvt-x9yXre|q36#5IE*Xp<|yv)INJG9PmB3_ zYt2%Ai5jLMRvzH6>4(w>va8C6qbP92+%-!a9;P{PM<#Z!ulrF>58q7>R4uC}iNZG&tvVBOu)?w>*Y~%_6!xX770RwU3t}IcurEa<9#vm&O zT645#=)P7jE0ode6qiz})9`*_*fuD9C$%tZy95D_0F}0@V;uGdwRzI~1!t~v-Mk$g zVWSZ1+OX(c+GGV{DGat{IH)+I3I@z;W2o%9lVQb(*L3Ip%;|%@ItkW6G4w zocyP>Q8*mKu>Kp*k@de5DA!whPb5)*)Ad9)6CrSBNXMs1_8-Wmn~Sh1lQ-j zQ|^`?s4f8tA?GS(Fs}8RR$fZIwQ@pvThhv4@=%5M>f>Q>r~fOOcdb2 z4U@ougH@_Hl;OrAFpcs*zrX44b4W>r0IWac1Jg74_uxW#OW;AnbDmpk2Q5FX9<+Tz zakaEGeyo3aU;Wa#ZZ3WXtmQzT)DK!8TA=ts-O|2bkOb!lcFGjB*gzf1IFRxV`?3|@ zE6YYLz_k!J1{{7q{tjH&Dbnt%ZjyJN1~N%&;1uXcT~nvQ-%jWc%XCYx4-61%$v+0M zt>RNY_hlj0JtQCC0_)b83y0_Z4vvc24M+TSY;@h)R{??s=dFd1Y6LPaa2V&+JK!pG%HrP(7vj$zM zeZ5qFrMwdZe7f3Gp z!D_bU{v*!6f7Ivvd-1r&>8P7zo;rC}s)TcTtd#p2_*r1@aR9UaTW|#4=r8lf$S?bl zI~Nj9TUGkNQ-h4$a%1VMO0J_N&$-&Bs^t1e_ha>u)-q~+8LE4%U$ixombRep8eeZ| zc_%FWCOzZS!LFrUq_XMHm-dH}l=_9<9j&f&wZW=aClBBnplS!cVb?8ZAdP7Ot^nL9 z%t^4puW5VtD+ZNTgf0PV|-JAV0eUEh5CP+z~lsy|%*RbRb(TmSXP|Mj|j z`=`^p=KSp+|8;`%cYikFfBxYF=a+B)sNetfu7+|xfBNY1{n8wvyiEgs1%TjP19|s% zPUWTV)8RZtgr9;o-` z-kn4HLw`d*f4F>CU;Xvg_0`9#OV?l5AFf>3-RDm&z&GH2+nnDv?+d;w8-VmC43D%g z+x~3fmV($w@SIINNDuEr$w1eEEVMPW|6N-TsMF``kFI{VUHx1i-M8g$-5(u3_wQKI z^%;QJ69F}EM@I$*>cVVs3SXXNN_qTwC3iNb&qC#B5N54w%KJ9uU7D-EEMXGpO6`?X zzZKwC%_s_R2v%I^Y;k}}5uM(M>(c#82$Vwb rq~#R?GYuX?Z5#vA5H!vOy1Dv){sAST^PShB00000NkvXXu0mjf@^GbF literal 0 HcmV?d00001 diff --git a/.gitbook/assets/image04-andromeda-securing-masternode.jpg b/.gitbook/assets/image04-andromeda-securing-masternode.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e11e45e669612546de1caefd4785aace4a90ba33 GIT binary patch literal 35643 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 literal 0 HcmV?d00001 diff --git a/.gitbook/assets/image05-yml-file-securing-masternode.png b/.gitbook/assets/image05-yml-file-securing-masternode.png new file mode 100644 index 0000000000000000000000000000000000000000..85ef8da4d956aed42e0a39767c557a3944841dfc GIT binary patch literal 39505 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 literal 0 HcmV?d00001 diff --git a/.gitbook/assets/image06-port22-securing-masternode.png b/.gitbook/assets/image06-port22-securing-masternode.png new file mode 100644 index 0000000000000000000000000000000000000000..9045dfb83011334f48c12198e79547ac10488c7b GIT binary patch literal 33844 zcmdqJWmKEnxAxsaad&t3;w|njDeknmQz#ys;_g-;DHfzq+@TbA3sAgRaVYNagzmln zXP%_}+I41b&-kb%?1=PYIpCNG z_COBZHPLA6e6C`kXNOSr+jpx|fH?>CU!xbJ7Zrr7Ga&^6@)4TUJBS^XMq;A{o zwOd5wEuuYGtFqW;K^X7r6}vNTba!v$@y6S@aAKa?>}=@C6O{&!kz)#A39SC$HM$qU zAMBC&=pH0gM67hW2f$rljZzCYn1lB|RykI&&JBca@^1sDT+t0;Qlp5Jc_F0D%L@r6 zdat%e(NWN}!f`%7$k>nP4FpnV!=FP&%nlNJwZ0lF2-^a-16g}S?{bXc_?1F*mNA=} z`f7{sNjG*4n7vOy^4CSGf%Uhn1@&Yb={xrwcsqhA#{PqNNNoia8cR;wbl*9UjLjAC z3c{qvDarPQ$i7kbU1oN5TNU>he_Y+Q?n{r3#NUJCKetp+?E}Xajjhj0*d7Fzs^N^e zxh1{c7FT8$Q-`1NzG=H%Nlu1L>X&$pWf>+O*MQ?meXYalQxQtnu}j3?M2=&kGX$~f zRXoRm&dEe|snzqHfm>bjLcw{`@jhy8ZG2}Sz1anfR*v4anUn;+2a zKBot)?OZaM79aJeW$^-Lbd!uzF7{uamt;x!sFv=n~aYC}?)HMn^QBH})t>slOJL^5GL1yUcytiD$Y zwsB`FKrF2#L9;q-&CN4v>GI%IWYI3>&66gsYvCTVPJ{bqO^ z)cQ#%9FHr*JKjw)Z=29s{Y&_w4~ktm5SuCym80!hv&seQHU3mIy_Ri)ZqbkZF1_s? zc^Xf^{ag*+u0yk&6ld*R;kd33x^}6ct-5qJHXv)I#ew zSqpX@{oI*-2%)Sea}Fcqix);At&=MwSnwQxoy#6Arm>@NfyuoiDJj{n2WPn*`2+7r z>OxbQVPczd!iTCBWKy%0Ux#-B0~X!8it4Toyn!qv)*IwaR)^n(g(bu^P`km z-|9bw3r$#me`&@EH8B7Dfy{MBWKWDdN`vajYLFWxNRr=J&cXt^s?H zE}s&F)Zq zmCn&O+5`Q$00a$-TQR*XCS?#`@>ieH7L#UOWULC_Q_>jNTpHRX3;+obqnifVA@7l- z95JxoDpfMQQ1Qlb#p|iO4CBZe-uM*aW*1KNhC~YFf%s$d7+EWS7(D4^`k|W~Qrtgt z{`&rrlV0n^f?6e@364SkCq#=Hc-Ou7{%oNe>^wjR4@( zkTuz_xyP}i&aH(TEZIxQYN2*sQsXVCeK4&29PxKPlPc>vSVyw`{;CpkRH&Ee+-FCh zRx!z6DV-^ZQ4urPo+?MTghx*)Vp8y308r7^<+-3IEA$)S}ZGw-B z`|3>h2g7QbF<5RYvO|{IAVj;6&fmyT&a6*v%L2|?Hh!^)S7zH-Ix350UBI?DE|osBYQ�d$B@zn^ccLsV8?O4Q+&w{q0Y&Olp(rF{7N-8 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 literal 0 HcmV?d00001 diff --git a/.gitbook/assets/image07-new-ssh-port-securing-masternode.png b/.gitbook/assets/image07-new-ssh-port-securing-masternode.png new file mode 100644 index 0000000000000000000000000000000000000000..29ffaa7b21b93638777e021559922d8100cbb5e1 GIT binary patch literal 34316 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

DuiUJ=8w^Q1{rRQWuV~P}vbcNVy9>2O ztlVDlxhA}Azuf-fdBdWn=aL=D%O!moPq5r+5O9^_yv7GV(_NA6+SC40FWgI=xcFFx zmXwf9uWc6%4y(}kaP=ep=s+V+LCszH;*j32&&t8|=Y|5a$2>=?1hc95Yl(AlW3Q9L z#ziNRbg64T|NHwp0+`Ec1(r;-Lu=s^r?zhyDJ*(>&hUkiR@RW)+O3V>Y_ z9l{Mzo~M;}mk!a3*Lt$lt5Ht4IOFPo!kFH54R|=69e(-gyF*?+ViX@$z`e>nv&aG@ z3B~Y_9hJHinWr|4>nXXKZMc zU{&44w>Dh|txT+5?@(+zl>G14<@ac)EIOsytmAr-8*Qr2vhq)$w_sc z3x0Y`0$*`c+C=4Hq#1?ZJ(s*%#y7{qe)lc{*=-0Sak-P8el$K^doVCwpt>hS-5cP4 zOxWJRKc+U@W4e2#@nJ*i{9W^gQqr@W=*=0?-^TKHSzSY(b}W z2Xd#6(SCX0u8KvxCq~~y2lX&L^g@-ou0{EBkUi!n|01H^;2b>KNZhpvIw;OxJsu@s zkUF9@zJl|?M+3bS>&Fjs$RBb@FRzdhs25j142Q<`X8`q&7xD$pkGS79$;e3mplEGg%4uH+k2U7&!Q`b9zm3rqgSv&H zM0>e=|-qIkh&Z`c@r}EGcLMt_ldkbYe&Sydv zlDZ^;WD1{0bVX)Lv>7U*$y%^E&=o{H{7fluL0uOY1N~9?PWB8X6~L@O5Zy zlZV}{M-9@K-Hsp-n(L}9(O}|4AxELCQ8@0QpFar=+)5xyK`tttFrsB*k8l7l(KEXH zJ7m{UI+FfS@(Gc=$pGsG6VNKJM}ewC_9O(_-6TMR-7O(U`6rS0^0sjS&B8dol}H)( ztaO}V7Gb=}!&m7(I5h4|J#>)G+QL&YF{|40Ngq4P_i0J*l}JB4T#BO!m=4taQSBEs zTgmH4IaIf$gd}@>w3kigc@uf%AjF@kSHjM9gw^W5@kKaWVqS%c)OWj&+K~~qaXC;- z<>_V6tO0hGC1XdPqI+0pdaWpZ^s^Ql2v0nvyMOle2!VS>pU2H` zgxHIcn~tYahT7@Y?c}MJ{dCwZMY+mdK*Nl{Xy{>xAyaH|z1(g+IH}&@FfQ@*;A~SX zt{!>QL*Fzzrgl}z+x1f9q3|p1^cTF(roOKX+SWt`_85HE_!`bO=Wnhbbx)P2vxm7V zE*Nr*^Fv_G<3v6$>R+T36Cs>Q=Q}vi(u13_Y2; z*+PV#tYSu+%nyo}rd1>3qnhj4H5Xz&&gX#L=NWlyv_SE3PE}NNl$bW26m|x;c+V>1 zwa|~?h#=%efj{emL{l|d)pA$g@UUy`zPjq7#eGgqCi)l*C3QN$m4cwl*{$qtKLe|+ zKUBW6uO9@fYl&Es_ftG$wrn46<#%|v-?>2+_n;>qFTJA+ z9766#{T5hPpcDm=fInx5uvW}HLW&u>FGIp1sAAr){2p&m%E!8IX1&^blu8nevbU!) zyu!yG{Fb_x+j%I0&M|x)+!;SL_ehA2DYF+MpemdoL)_cM`ZoN>P6kWNR zDM_UYGnT;vU+K2@$QbJN;O_~w3y&|tv|FE)_P*bGdUW|p@u_IIJpx``_b&Ez+aS$dfx&tJUA zzF<0~bB=kPj&F{fEJ_LXro$F}*GUUJCp$j4eex8)4Cb6A)>NILfCzCBu*^m;q9%Nv z-4JHUJV#3LJ0aA2JU^dtPJFD`*=YDv3`xVt--?up!u!t0`QeUe3-Q!~sjk;Za$~LA zTC=rXCnM;(Mn*Ze6E`c#JB4Cz@4goa&J|LrU48;ox3 zF4gfP>Fc0U|0&>|*<#5>RV3^wXxtqCe`nyrU?p4?elG!n1@hVLDC57!X(LZWSn4>; z?PP85LZmc=)cQT)LfQNR+8^#@_?s<7--4FO*4N(htY9YkMJFKVh>K2Z+0e4JT?ssC z#YMZ1EQ9h*CbEuKYu&^odgDhq9UT_qL9KsP=n@ z)+blXwS1{nU+k9={~kMu^2I&_z;BI~uPeaoV#Sqj7!hxAQL0>^ZYNiXnd|ZC+*oe7 z5wN@~$l~P-ilt|phpY9H2G>iHrB(pAn4#PQm)y?-8$EoBmYtC@n(PT#^uV3a+^Ocs z5xBipv}^#Wz#uR(@Fv)D4WPD_y#T^Szv=Z+O`3b-$(`$$2Z32l^KI z2yJ92@uhe^CbU}{q4W-B)~r}N>pfoW8B*nhFsz?jZHS#14Safo#AlCpcJ&D7_t3s= z|794+f2-3Q3CBxAICSwSq_pAUC&rJd^n8S}G?O`Da~)&aaPqW$;~UGQ;ig6NF2fU3 z(?H1IwCi4U^pCW5aXbdWl1&0G3q(7o453u)oi}c137XFciDEwZBX-(A_1S&psVl*@ zh6i2YIBciZaZXOq$v$)Dx+c0%C0#w%Kt9X+-v@|QpAyR{-F|Z6JE4xOEHWR1TRBjx zjq|ZpW1XVIw3s8&!g&VbutZiBVP37twVP;fye3KI%{!+GYjK6w26q?i4gAgXTS@bL z>&xvoFP3#uqAuoT5NnJUY6x0fHY;wn0^F^y{^9z2_aN(lqli;N1kOoM&U#@AW3^E> z_t^N@3yu5hNwQTqp8u!*x%eyFLuyZ}a>o&EEuj0PeCM6Vq7b!Fli#gw|Ac z1V{{bX;+6b>Dl5@{d#XyivMvs(cQGSW?$3C#Ln=Wxj}0fW+tn{{P0T0$}P;qX`cG3 z#`b2+sAy^33RxW!m)?3VBPRVpbBOZWvDYXjGiKVlmp$mtU_Q!Wdm5G~{9e+%+bVsc z7^HrydHEsNc)}@jt-t-algBW6w26+A-tSlnEWH6=Yk_MGN;NDa~pQVjYnArZYt^sPO zBY2Udeq`XlxVb4yJbes{@7wci@YRCTi1#6^ zXgL)XZFa;b&uohpd${o+%S?6cQv8HGk=bD=xYY6c!orC3ABB=+oAy|&`ge@5oE=0| zwSWFXRA3yae{?X}>;FR|zXUj#USeP#jrRxw4c7Tr5>3~IR~of4?bdtCCL{qN&KfR5 z-hY#ub|K6Esk2w*Yr8x@@JC^w(SG}{wev&<{*d6k5k5_L;QTOoMao45Z}sM4kajWP zL~umH)Bb9xh#f{{VkY;y93=I_go2k7QAD_K_m0B>}x4nilg z@DKfeRuDTL3j72H&irNH9I@f%ON`86RyIUH{_*=*hQ0_pUbEMtZ zEU$>orU#)@PQ3zzpR8ZZ%UUF622RTMTKuQvIzKUS6);4jF4tb;O3Gr{@e z>)9$SD)Qz8AF94n6&>qd5=_EPJoguCy%2Dq_YwVUkQeFqLp09N z&gEV=cGIifv~SB2B#R~X^3pajl2$WD>9_g%=IHl4ehvZOy=Udjsn7<8|HB@M`2eqp&!lX%m-j7Ovxshp$VIgF(G20qsY$9G6A3YLci*(4V z=nBYlCgv`j0#fTVm0U=;PKRLvu;2k$>I7H3g;~t}T~)e5;)R@^%{7_0jU&j&b1wON z1$X8L1qM!d~@8j>JXarj0rjuaTK#NcVBI_Oy6;c3I2ow4}lGUPF z44NJ~U_nb(bREs$J{hYt4YP{&`WBa+A9|z5r_-OTuH+-JgD5vCh}0H3ni6q+FaG0K z@^=c>4>ZOWqS~E>RbQ0DhjHh^3?bfJTKCN#mxMbxh$i>asqe;q#i(NjTAY4dM^JyR zmqss!|Bk$%_$${pA3e>J+t8|aGu(cT<$I_YEdc>&ErjX{alN6 zd4L{j{o;+N3BN?P9c+-^wzJ^kkqNKY@S$Q7{1zNi%!`TUUt$7OT88XM?RbZvy;q^=5mCT zz`LeXYS;!KWq;_hRX)@O2y3>!gJq*P-(_X7=JA0w#dvsaN#Qwt`lBX!$p(`fZLn&m zTk|KE(7z8azvuU>z5-+i4q-uhBo4B!NmLU!2+)h)8H|4m#TuFe>t|P5p$2lB0~T`S zSPBRDk>z5_w<5w zXhmV-4-Zh&{tAm=Np7Ayya_~RrgG&mxmw=3`SWVPs~E)qd{T=x(Tn25a?5?FQ*KcM zRniqIRDDR-CH`C?nfD&y(nea4pcB8z@|oQ$)z5Tqo`@2*NC8w#uel2UJ^(9F5r7c? zrwJ*blCckr^H1x$*Tj=&-AjnyGuEkHfE6J z=R*plU{}vpNu)`;qz{2wqqz^B~ZB8M53hX!&O679l_gEIlG!A}8 z2EU3~O?@Pc89+SdS>eIkp=+Y-!bb-47v(DqV%#qRZc5OxSkhnp26;=@El-~RUEK~u zY2Y0E_)-b=jb(+yG#;@e0#K)dU9#lTx8!+G-pA@zf{UM`lWxA@yyP14K-@V~rDIb1 zVk&kNPO9B(KhY z5jQwSUA6NpRTRn++KL zD-!VRGcwB7jqmS_m_yoUUmATOJgTNQ|2i#xa%eA0+F&27;vpapLc;9iBM}A7kFF4XLd6+|c8!RZsd z%x&dYZFENNCKso2vBH!qNX9CkgHsVof63}8^Kfw*;|>p4BStw5yu^Crjp;xu^2%x% zZjJxQ?Fr|IZ#YI_2E{0In$Ay?bdfquTdxf*8_c%g;rX77!f?*}XQ0ZtC0=6wAr{6_ zZxC{z+JgUmz0jLX{+|WmjF{S;94EehNBJg*l4SxD3mM$^@&xZ6l2PAqra5E~VKDB` zgO~ojzo@>d4^u!Yofh)!x?!DaUVm;CL)S?m>P$voKH0aaT!kNF(C%Lc2yn(s)^fPm z*@m_I+J$J?=a=PGFJ05fO4|gj?EC8gRlX=+u4frEReI7(9_oK+vlfKw+;nQV;bD{8 zUKoqfn0RdMcpsv1$k6(3%Kk2cE`lTyu!t553cVh!&V>!xW20JN(xcjwR?;@j0Ye|T zgXHojCiR=xRO%2?h^^~?#1YjO;WDQKt9)$`Tp4N`=7T8df8`DEbggfL~p6}X33#b2!*#=GEl4zWNF<^<}95M}2zUr;<*!C6+oBN^W% zM5OTEeIE#q#}e8r-+$tT4{d5;6pi-3{eqkW`3^9ZBebUYxm7I?7OAIth;$3u1BIlt z1yg%>{YRXj;NbEVg;CqXxN8!L8u@#H*!#2?ux_-a6tFlyg*$iY6%|DrQD=NwXet-k zxF7;%0g`koUty>tma1SHZW+Hd=-(m?lW{RB#IH6y{N_?pyzrp3t;R~(GdH%v7iJa!Kx1oP` z59#9PzOHutF>u0nd_DE_wkAH=or6ei$b!+lQ{)moi}H=iKGn@zank2(>&sCucgW}; zfi(FI{+S!DL~(|0B0JV4+10!&qA;m1grdJ?MDvmMyD!%D9;W3Z#BS8%A1zBDoPQHE z#~URf4&I$?*MjRPT}7Bk69hJSQkd&KQa$QLD=nhsN2OXoFU#~WRGL4=@Sq0GK$Wif z=w*cz1NbXR-(+jdfxZcT+*X*^2$^g6@lmpjEzM{Kz2nQ}g)`L~g9VS2d;DJQx&LaL zoz1$l0h{A^l`jJ5;s#P|+lkYNqd^-$2rMhhX;-_JAUmU#+5!Drw@mB9`(@Y!Zx??4 zkpxwWvp(}`dyh$tR`LnY5YLNm-K~h-ocp!&oV*-lWj3g%-j_$H&D00bqalHR+&2y2 zB6zMoz`gwLCFP~++8)Td?mb6#Ne8kE!qkk0nwYQZ^vcxki_;tRG$U0zyBdPdwhkTK zk__p?cdt5cQ~8~KC4;(cum%k~lLKSEgT9BYMwE~6hqO%u>DM82E|JUI(9)qNA&r%y z&(Wcj)V=3-BIs6hmWN{@R&&vVI6$L!Rb6e&x;oO5=kq=KbyH<*W1OFY!>`SdrtP60 zX3&iEgu5v`D>zM&O~(H0AvLDQX7y_x(m5rdJ+&Kd_1s|a)gCz(0-gP4D-Mm_HsAI? zwnreixRr_mRkvj9KfFJ(p zX$J3$GV(vIsR93wJ553_u8r#d$e|(-+lX~ z`nMsIrmjVVGf<&1tQS03FROWgNd)r=bWhl3(yEHJFINhyE;1?ID3l7^A`DuP7bbdcC*i<{{mP0Xqa=kCP9HeBNK1z7$GBWP9H}k#^PV4v zG_vyT@JaDz#EVRehstfyjY0etWH?B=|3i<4q!7_g(Z1`K{*Ok}+lubpt(HN0nKKM>N@BMc-!A&CjQ@Is zKgi>VrUpqTT*xuwF>!*5WzHVKEpt;mAug&nG3xXBDBDTN%F{sgwP+tor0W#J;8J)M zZ&~KDdXY_4iti*SOuo9^WOsSqi|Q&Spz3*CrHs67TNuV+q#_p*5{Q?-V@V{`726sA z%;PJsxwcz@daAChbaBk_!UQo|yj`Yvj3I)0Zb~`ol?}BKP-kGBlH;Yg^%oa)NIA4-3 zu|1?O$wHj{;ML26TExa%zt8>m!s~Y15ucZ_;3wI{BCC43(7QAW#7`esrhR5HA9XOh zFE$BJKRvyeZ*J%a+P*FRL~pDu7UbT@24`^DyIu%LeY4DsAX?kjy_BdisT9vssHZy( zrfX_M%zEZC2gf`IQO?=(4ceA92x{Cql;}NzO9AQ&UBeVZE35nnpaxjd8A6vL54KDO zL+s-<#RC?$e_;%D5|<^qt1o%KE_;QplK$RpRtc%*aPa2vV|%K+)6y$Zd~9=F;MB8y zHUN@N+Hk8B7EF3?mfhUNOf>11KKhBMkdc;Gq^Y7q(ZiHva%A?dV{5=cCLzqFjJyno z-4{XK195*|es$S}nPPE1V3ksk)_7MR5APb=@}{<4XaU}E{Y%rS?z{YuSr6m2VYI>{ zTSz755Wn5gaPISrBEQcq_Rq7k)3afLgUH>W1S$M-X}hlq>cpY1-3TkqsDz2QLubJ{ zVM-1yLquvqZjyd(Xqt8+GEoZ1rUrsXnKQvR7(**Mq4*arMq^4Hi@Zc?@?l2S83`7} zE1Y!*@+(vCurX0)F4m{aDbJjqK@JEAUCa-feU1&s)|Su5X8^ZBy%t12gO>0Dc1J2r zCIOQ(c)9g?%d-?qIfN33R;>|&W`{!B$VkU;i)9?vnR}zH_>+&gGZr!02L0t&x!C&X?-KSRDM(VSDoe^qRdR{F& z^AS2~V`Mx&lHxSo#kcvJF}TSK)+G3Tu!tZqeCp`AMan0(G}PYT%Wo1K1+>? zeVrIqUrgM&wI2%b*emz}VDV^k7i}5m%hCk)&?*g z8)-&!NzQ69sGwA%@-Vixfh8xo{6TPLXwH)oGO`?^KY{mS%LB9na+LbJ*kqS{l)u__YwWPWW7w*A0R2cd=hlCsfX^wj*O0)R`g4 zGHEktO!D4gByija>d;fh;WwYZD%(jqQ$%li9ZMv*kz3EpF|}s5dA_dC%@qG)O9FSC z;!|~-)#izEa?vY#;?0iZ)tE|=VC~^u_1dx#@l>6>+}LlFBx{M4H?rXP*K*AB7usyH z3uYg-r;kYi$oid}g*HSq%~9`vsDZ8F^+o}myFGMh%)?0}tR`bbm^Mj)`+5itr-|v1 z1IV2`UJAG?NsM~ro?LY@9YeLtG~Lrk_ii<%bNOwK%b^8X->SIzLT~K`V&B%&kLu)! zsRGqg`gJ_kIA7;WH4hJ5V=s*N8-zJk&dan6)!#V=iVD4F`WLe?%Cae6u_p5{MeVfj zi2hJg`YhGnwzEI~`VlUNgU%BxphUe5qhD352jOymoga6ed}trRWNDQLug&p!YRP$4 z?Slxf<`D~tHCp?x+J^MZU|ia{&c!7}Lz{a-4?@59%WEpN#n3t}MX`70%G!He5+1E) zVniqYwmehAq*aLL;2Uc;L45soPrlN|tnPL_!3b7WlXrzd?9s+eIavDbZQqQ!)7@S! zHzSWZbUP@@fIk?79Puuk4s~#qq`9lx^Bq&#tH%24rz>KbH+w(eN12ZFY!l8(X$!bX+!ZBYrmumliZA^cga!Jj>I1^#uB)#8+FICTrP5=1#)OQcZQOc z4epUu&}|F}rzfMQ!GfLF6J{r6TTv?e6p6$ZMvV!&+yjrAo0F;&o5SUt)Sik$ptOVb zDwA1S|@Tm(ECxrM`Htu++^%ZchBXe6lohROXlRQFgwGy4{X~^ddMj1)M|XVSO)3lTd4q{fIF;a zL>FoHV=VG?PLD<48n&9~Da`IR3T2%f9|LZ`(9)Fb=x`3)t)lIDJ0a9E;}D}4mkfA6 z#QBg-kb;c5BCYwGp5NIH9S48IrjPZqN^oUb(8^;k2>UHh`qr{I*^|dcIj(9a@?Bv9 ztRmC?z*zIq`vdnI!Yw%DB0+U?>BI4C-lJ ziIzVpBK~eYXic>45_uAxZlC&sDc;|fRb$0gKJZq43m{I@g#6C zQsr&_&HY)*8niU|w_woiBb55`0q)|=Fqjmoxn2@#9#iec;;pFesXB8@HEi6&Q}#!$ zk)e%fqF;@}o@v zpjY9ZUG>|x8yv1!FhgLajQIJ!9Yrq^eUwBE;#hB?{Eybr4KK_OruV!Gky=Y|a{pe^ z9ljpU*#MYY}zkpTXpF-C}FB))tHEm%~_e_3KVc}YXi7M_NsfNWB^Q|nDY8& zOzio-qXA>JPCX5*mNA*Bpy8=0+Kc4ASxVKG{8_C1BcRR+o{*s2DqFgLwYF3}-UE8^ z+%HA3AFnneYeNb(f5hgYXAKm@IdIANlR7nPeFZNH6H-e(q3Hq*50Uu^fc^BMdr}uw zpa!8yiMY|?!B=Y1f};2DLc~}>2Yo!wh1s;k3TKURA^x>#oL|dgLAmY`-vpo}VUL!- z`F}pYEdPiZV14;f_C^R_=K77b^h6jFPcy)!Ytpds?9K#bE~QX*iw7c4YG#iQSrzwv z_Ys5lEJkgtFC(2W|M@L&?WUe?!ZBa44O;rgTiBrN%tg@WY|@nv9Fhb0pP?jp)^!#d z==0`eqD*51NQt2##MdscemvEc6QhGc4I;vM4*YR89rm;Q3ZM?vhoD`#q;2Ye#C^21 z-=kON3ebruIn#a}Z|!BtCk>eX=k6IPuDWjfwKkzGE5?JaPshoBRzY^Hf%YC1=vwv9 zR#d&+U6HIQ8lwmwE}FSCfj=JBJ=Jp{4fR#@*q5PHbxAI2(YgZ!$7+q#h04Y+LgrRt zZO?(Vre^0o<9(gU2t<{mucWRaUVxz}E;K1ay?F}wTu*a> z9zOR*pXXmD)!!5U=)t6uRhjy+ zk4s?>FRIXXoudHr-c|i8rrc>rwAra6lbZJL8vz=)F_B*C@&empN$6=2MP_GHRSrkC zD$iDFW5Cx!)uJZcJ$xiJXAuA%lj~Cv?Fdaa!CK7X%NECt zVc{FMZ#8SJ6nJD{U-dG_7PfW@KBII2fjcklggTq^lekOyc=$v#CNO~jQ&zVD!J6;B zOQy4C9|Ak#-WgBrtcF-EzBU??;B;J|Sco@Y*UG(4U3?;%MO2SH!_5}8mjnS2PXc;H zmkdPD9b)&}x!4c8$6OIgt_AS}H>w_e3O<3QHIFy_ zgNlvf!Mre>=cDJ3jm&A!)l_^Wj}l+?oDOJ^V72@ z-iO=uo$vIc2O?OaRt!B(W!Y5yL<0aZMhSheN=@HDu?X;;3=Pi3sTu}>c_0LI?j>$ePUuf?6dAS6Vaguu+iQgZ|Zhc=kJgaFK=EvogLi z0~Q;&j+4q?FN;fO;5e4Iu(6U^fGJT)*0a#7C#}LyPeHL~{2*>30e9D14xIZM)<^g+ zms=qjE=W+yZSkT{fQ&2Ut`LCw z@`kY180An&eRnBsqj32wQCr4(rR#{P@NkUfeT7$|J%g?NZx*c}sOrGHLh?jX;k$1S8o0ZfoxLaB*a zlL4=oWbaYuE$N(KVV`$^wU=Kve`uvMzx>^*dg5&Vz$dZ3x~m4x6u0?cKU9-*f{mB>sX$D)`ioT7;Uv$=;Y7N(4mTqCfry&yjplmJ@^D1yMa> zy?eF0ed$mHB{A})-dS|usx#>C&dH=RoLyknr%{+);Fz`%6nw94!*$M4iRzggL)CHF_Q7c4d~I_widEeEPx zmu_d7j(qoHhCb6ds_j!?h^O&|u6xOs9Fr-LuV~J}cK5suC0|&n4)1#gzA{9@2^-E< zY%EqQ@JOfjiN&aDeY-$6Oj*E7umNhXsT+-9{=_iJucr4VOX=)c!d^muz=lENt_FRQ zW8qH8<(lj$x~k(b%$ix1??WGIKn+cPtj0e2%x043@o2@2LxeQPi59JqH>^92{|l5w z)YX+s>5}8-jxr|zZ*pt8jxn`$aUPtISk{qEIkkB_*3|(+Ty~)_CycD9ZC5*hw3I!i z%Bib?xBiqy6+zvITJ0yxgV!c}UDSTi^yWqJUf52%u-7rL6iYg~^PrVTcj69O6YrZW zC3cpsx5!&%^Id*%>_#7wpNTTEol?eOb_95cyTjoMA`^IC>e_5YCYt!Mth>k3IX+Ds z_+K!ji)y8)5^nL8DGPWEVbyJW>I^&L;OSbS)n0kWD~#;I>I8C`7ED6zYnaWs<>q|; z*f~tx(MFBLQC;R=rWVMDPwDp~PunV8&F%K&s2e&}?}` z+2d-|!<%kiSMh7RXMfIctLi(CuKt1P&tuV-XvKVHWC;=uEEKO=B(Uaa$T*kDB&~ee z*pyf^p*|Xt&zqk{F!dK}4nGxXZaO|6Z;g|+ZJs1B=Y_$tRZWH>54zcy(JZGH_Mky-mCAwcnf7dqVp z=VZwP-+a8iKKxzO!nT*+MWSVkb z@pHm6d1Llp+aHM7o#In8ds-VZ0u8eRR&$nRCy&0#$$wlKKKEug8+SPV!bQPoI0jA` z6Rz0(EFbwoV$KG6>k5%8jrb4|6Z*QLm_@gQSxwCKDCFsgsC>yYiYyuD!$;C}nC%M;v*Js}hUk7qPnEzFEDRAY*8FNB3{=M?{}!`e~qe)AlyLXsf(u+-+W`eQ@c? z!jtQZ?F~)_FKwkz>xFWm`gx?m^cV1>ncU3;i85MQP&5M%Q>|g%+@zVdq zF)a|6I7k?^&(XY$P56HUCS=FvS+VUs96Ur zQGVPpXv*S``&I>L#UAqzPB?DG)LwEawV_{CF+daCxR@wEwiVXcSnu$MA0);KqV|8} z`1!1+aK^5aqI}ukN^_~&hM*p(Ldp$p`3WylQk_sld&k~{xjBKWHCDlXcjpRd|HYsX zN)fnXMYmnM;HTZZFhoqBV9j~4_->m0+|rK;0(RVTKUM7eSz$C1Xn}@I5p|=;*cZ3h z8H_P3Tuv>%5sjJU?Ty5(*A407s5KGh(V#%6J=s)IaKp>qhY~6ahs6B{jrp>l2;8HX zt|j=@^D%+=8)?*8c+=30s1-D=V+T2f?xzlET|*z2KRC zwa!$OaNiH4lj41bxhtbdSUe?^QHu3y6&4&MUFSJe3OA=rXIx4~QChlfY?OXM>)OQp z!lSAcRZe3Oj(yRJGT(}7jcY;1%kr<;6u*`gIhQLItXFsw5BJtE6$Mss_f!~E=YNWi zaYI-ZAXZ>LFII>Il?gwe3dYlX+kG~vE;<2O`;o0mKtQBC`k zL1U@hSuIz%*(52)iG!Dh)9h{&kkCh+uRir<7XvMGnJ65EY?(fhxnwXzU@q%Rca7%@ zf=pGask|+Ve zosd*IdPULQK>0;{8Y(R_AZyLnjr-+llL`h@I_rk*^v$OuQJJj)9^uB*7sLw!6%YiA z;my+?f?Vb!l0{oBS)!aJ>5->n3bx7f3wjE)(GHdhrVslUhj@| zI63yyqX@h8PYC z{bdt&RTm;9OSCJ4ksu~!{OxzFy@MYQSFF30Q})|S4Uh68aV!1^f899yxwT*aGT1Zl zD+IMiLessqFCTigvN}ddb`!>csOZkU4_b(C-*H{S`hmjo7Q9I-ui1g$5bTE)wxzsuj zs@xIR&ln<6gB98!^2Y4h)kbo#h`cTMAT${^6y51dh`#Yd3x69Cko3npmaRMX{lsRv^=?K} z5|T-r1#FVlqdSgrnBMe1xW*~=xWj&`mWmvctm4kRMvbj7fezEc+ zk@d{sJk?VT*-zSuQGnl@K?RShKl%fW^qBF~@mUf+DP^r9;Ey$C^sak7R@*?jk%uXt zkcXdZ>_bZL?y?l-3@NCLtN{1~aq$Ke@L-t##Fx#O%vU3FdQ7|=SR9<>-mfLPw}tss zx8&;9VeO^9Q?IDfe6OQ|D(;@q4vE+!ldbpBI<*Rd-q*Z%@j6OQ5}*bJGpSboY{c?i ztXoYk4<;0Tc-^&+ibdk4UQH3f8mC~>n6qTop;LO81ti*^8)7#jHPE4y1@h;kH2*h{a)>}nB+A{ zbc2C<{Q}Gl+na4avbDd@6-%%c0y1wub^FiwTBt6f=S+*4`pU-r26M$1Apz-ax{JrU zu&0_(J5xZ$8x0~2%p;I0+2ip$&iTK_Sfr)Pk(I)yKJsGVAu7yW_Cr`mPd(K@TU4td zx{Px{tXAbM!ZRrMAk}EWjkN0PjIw0i8c+Tbj?Lc7+ z;GMF@pVu8fT8Wi&OCj%pA~gCW7m)GC`k2^)K;iY5Fkk_x{nJq^V}Q8ky7LE;#NQwK z#*fz@9$q3Cg`AbHK+u@nKtMym538g#6qu+6i=X-D?`e;s$u`JBrFyetnY}OrqvyWG z`H4x@DIlvGAW#?zh6otYO~_GvjFp{ZrR zGjdkTXeKo=DfIi+fd>1yiC`K^Vn+HZ2j$PZAS|LkJA90SHEGG_O3~7k`aZcXR;^xsqS>FFIA757>CV+v^2LJ$cPv-`KL9Cke=A4B^= zFx;TQ_lM>Qumo2yLV?NmtWJF0#`%yy#q>hr5JrG0nskl$hy4-~28~96wxI{~nj5aG z+0yNR(29rN|GCCP3dW|j6U?Q|=DNsfYC#eqOQF6}Ht5;^bH(SfoSzeb7+EPCk+FLOpGA~RfAt)vYergouyi`63(q%TN|Ti+Q&v<0NuGsr%G{Pip{jWDasqb`lr=1R%d6|+B)1$R*dD`$ z)T#)I#k8u(!m%R}na9k^R^r%|%rXz**t=}yAe(Z`jO;CY zkNZ-6KA*n#ANT!u{C>VU02M8gOKl?{JRge zM;5HCGtwg@{dbw6ifavT0!+P*Sp1kgR?pw)Yak|QKVLKTIg*)t=bd}Wr&K1p7mR-4 z$x-}b9N%cj?_Hb_Fisc{YT|cpbG)0U3g>AX;oaF{NX@L;8O+=soc-8o)H`^9)Age4 z)$Y~K?9A%hEA2D1KI)5*mIid1Yk5yU78Swao|9|^sGT8Rg??qbRM`Q3`%idaFmT|-T^J%h_*B=sEzNRUu|JwdF zy^Ih2@9!@me^GoB!+c8DZVCzyLC3z`>Ae#ls3x<$Yjil@L(#aQmgKb;P`590vgjL+ z@oaEW_c=Vg+)lS&NiXBE?K$Ie>3IFEjAs8d>4B2L$zIW9CZmrjIjQg2lS%6Xx|7G} zIUryg*j4A%pC>cXMknjKi;IgVdra{Z&HGJF`yKJjn+j6z3pNbMlPijtN2g~pb`%+p zWm)dj44lTe_^8jE<;h@5pT`SeX`yo>fbGMgzr1BJH~cP9k3M>@>

XUrRciLU$U?u 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 literal 0 HcmV?d00001 diff --git a/.gitbook/assets/node8.JPG b/.gitbook/assets/node8.JPG new file mode 100644 index 0000000000000000000000000000000000000000..d37dd896003a28189ce7ff1018ea6990fc6948ef GIT binary patch literal 31574 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 Sh}s-aqlgm3wgH5|cK<&l2C7v6 literal 0 HcmV?d00001 diff --git a/how-to-stake-an-xdc-masternode.md b/how-to-stake-an-xdc-masternode.md index a5cd0b65..fd18b4c5 100644 --- a/how-to-stake-an-xdc-masternode.md +++ b/how-to-stake-an-xdc-masternode.md @@ -28,11 +28,22 @@ Follow these steps to stake your node.