├── Article.md ├── web ├── src │ ├── css │ │ └── index.css │ ├── assets │ │ ├── logo.png │ │ └── chainstack-white.svg │ ├── artifacts │ │ ├── hardhat │ │ │ └── console.sol │ │ │ │ ├── console.dbg.json │ │ │ │ └── console.json │ │ ├── contracts │ │ │ ├── OriginToken.sol │ │ │ │ ├── ChainstackDollars.dbg.json │ │ │ │ └── ChainstackDollars.json │ │ │ └── DestinationToken.sol │ │ │ │ └── DChainstackDollars.dbg.json │ │ └── @openzeppelin │ │ │ └── contracts │ │ │ ├── utils │ │ │ └── Context.sol │ │ │ │ ├── Context.dbg.json │ │ │ │ └── Context.json │ │ │ └── token │ │ │ └── ERC20 │ │ │ ├── ERC20.sol │ │ │ ├── ERC20.dbg.json │ │ │ └── ERC20.json │ │ │ ├── IERC20.sol │ │ │ ├── IERC20.dbg.json │ │ │ └── IERC20.json │ │ │ └── extensions │ │ │ ├── ERC20Burnable.sol │ │ │ ├── ERC20Burnable.dbg.json │ │ │ └── ERC20Burnable.json │ │ │ └── IERC20Metadata.sol │ │ │ ├── IERC20Metadata.dbg.json │ │ │ └── IERC20Metadata.json │ ├── main.ts │ ├── env.d.ts │ ├── stores │ │ ├── wallet.ts │ │ └── global.ts │ ├── router │ │ └── index.ts │ ├── App.vue │ ├── components │ │ ├── Nav.vue │ │ ├── Footer.vue │ │ ├── WalletConnect.vue │ │ └── Navbar.vue │ └── views │ │ ├── Origin.vue │ │ └── Destination.vue ├── public │ └── favicon.ico ├── postcss.config.js ├── .gitignore ├── tailwind.config.js ├── .env.example ├── vite.config.ts ├── index.html ├── tsconfig.json └── package.json ├── backend ├── .gitignore ├── package.json ├── .env.example ├── contracts │ └── QChainstackDollars.sol ├── event-watcher.js ├── contract-methods.js └── ChainstackDollars.json ├── solidity ├── .env.example ├── .gitignore ├── test │ ├── sample-test.js │ ├── OriginToken.spec.js │ └── DestinationToken.spec.js ├── contracts │ ├── OriginToken.sol │ └── DestinationToken.sol ├── package.json ├── scripts │ ├── deployOrigin.js │ ├── deployDestination.js │ └── sample-script.js └── hardhat.config.js ├── .gitignore └── README.md /Article.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/src/css/index.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | -------------------------------------------------------------------------------- /backend/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .DS_Store 3 | dist 4 | dist-ssr 5 | *.local 6 | .vscode 7 | .env 8 | -------------------------------------------------------------------------------- /web/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chainstacklabs/evm-blockchain-bridge/HEAD/web/public/favicon.ico -------------------------------------------------------------------------------- /web/src/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chainstacklabs/evm-blockchain-bridge/HEAD/web/src/assets/logo.png -------------------------------------------------------------------------------- /solidity/.env.example: -------------------------------------------------------------------------------- 1 | DEPLOY_ENDPOINT_ORIGIN= 2 | DEPLOY_ACC_KEY= 3 | DEPLOY_ENDPOINT_DESTINATION= 4 | BRIDGE_WALLET= 5 | -------------------------------------------------------------------------------- /web/postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | } 7 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .DS_Store 3 | dist 4 | dist-ssr 5 | *.local 6 | .vscode 7 | .env 8 | *.env 9 | Notes.md 10 | -------------------------------------------------------------------------------- /web/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .DS_Store 3 | *.DS_Store 4 | dist 5 | dist-ssr 6 | *.local 7 | .vscode 8 | .env 9 | *.env 10 | -------------------------------------------------------------------------------- /solidity/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .env 3 | coverage 4 | coverage.json 5 | typechain 6 | 7 | #Hardhat files 8 | cache 9 | artifacts 10 | -------------------------------------------------------------------------------- /web/src/artifacts/hardhat/console.sol/console.dbg.json: -------------------------------------------------------------------------------- 1 | { 2 | "_format": "hh-sol-dbg-1", 3 | "buildInfo": "../../build-info/4f577d6f9db5a65fed38c66aa21b3263.json" 4 | } 5 | -------------------------------------------------------------------------------- /web/src/artifacts/contracts/OriginToken.sol/ChainstackDollars.dbg.json: -------------------------------------------------------------------------------- 1 | { 2 | "_format": "hh-sol-dbg-1", 3 | "buildInfo": "../../build-info/12193231e147b55a6e02f900beba5c9a.json" 4 | } 5 | -------------------------------------------------------------------------------- /web/src/artifacts/contracts/DestinationToken.sol/DChainstackDollars.dbg.json: -------------------------------------------------------------------------------- 1 | { 2 | "_format": "hh-sol-dbg-1", 3 | "buildInfo": "../../build-info/956dc73a00cbe6da9c148041c7228f7a.json" 4 | } 5 | -------------------------------------------------------------------------------- /web/src/artifacts/@openzeppelin/contracts/utils/Context.sol/Context.dbg.json: -------------------------------------------------------------------------------- 1 | { 2 | "_format": "hh-sol-dbg-1", 3 | "buildInfo": "../../../../build-info/4f577d6f9db5a65fed38c66aa21b3263.json" 4 | } 5 | -------------------------------------------------------------------------------- /web/src/artifacts/@openzeppelin/contracts/token/ERC20/ERC20.sol/ERC20.dbg.json: -------------------------------------------------------------------------------- 1 | { 2 | "_format": "hh-sol-dbg-1", 3 | "buildInfo": "../../../../../build-info/4f577d6f9db5a65fed38c66aa21b3263.json" 4 | } 5 | -------------------------------------------------------------------------------- /web/src/artifacts/@openzeppelin/contracts/token/ERC20/IERC20.sol/IERC20.dbg.json: -------------------------------------------------------------------------------- 1 | { 2 | "_format": "hh-sol-dbg-1", 3 | "buildInfo": "../../../../../build-info/4f577d6f9db5a65fed38c66aa21b3263.json" 4 | } 5 | -------------------------------------------------------------------------------- /web/tailwind.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | content: ['./index.html', './src/**/*.{vue,js,ts,jsx,tsx}'], 3 | theme: { 4 | extend: {}, 5 | }, 6 | plugins: [require('@tailwindcss/forms')], 7 | } 8 | -------------------------------------------------------------------------------- /web/src/artifacts/@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol/ERC20Burnable.dbg.json: -------------------------------------------------------------------------------- 1 | { 2 | "_format": "hh-sol-dbg-1", 3 | "buildInfo": "../../../../../../build-info/4f577d6f9db5a65fed38c66aa21b3263.json" 4 | } 5 | -------------------------------------------------------------------------------- /web/src/artifacts/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol/IERC20Metadata.dbg.json: -------------------------------------------------------------------------------- 1 | { 2 | "_format": "hh-sol-dbg-1", 3 | "buildInfo": "../../../../../../build-info/4f577d6f9db5a65fed38c66aa21b3263.json" 4 | } 5 | -------------------------------------------------------------------------------- /web/src/main.ts: -------------------------------------------------------------------------------- 1 | import { createApp } from 'vue' 2 | import App from './App.vue' 3 | 4 | import router from './router' 5 | 6 | import './css/index.css' 7 | 8 | import { createPinia } from 'pinia' 9 | 10 | createApp(App).use(router).use(createPinia()).mount('#app') 11 | -------------------------------------------------------------------------------- /web/.env.example: -------------------------------------------------------------------------------- 1 | VITE_ORIGIN_NETWORK_NAME=Ropsten 2 | VITE_ORIGIN_NETWORK_ID=0x3 3 | VITE_DESTINATION_NETWORK_NAME=Harmony-Testnet 4 | VITE_DESTINATION_NETWORK_ID=0x6357d2e0 5 | VITE_DESTINATION_NETWORK_RPC= 6 | VITE_ORIGIN_TOKEN_ADDRESS= 7 | VITE_DESTINATION_TOKEN_ADDRESS= 8 | VITE_BRIDGE_WALLET= 9 | -------------------------------------------------------------------------------- /web/src/env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | 3 | declare module '*.vue' { 4 | import { DefineComponent } from 'vue' 5 | // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/ban-types 6 | const component: DefineComponent<{}, {}, any> 7 | export default component 8 | } 9 | -------------------------------------------------------------------------------- /web/vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite' 2 | import vue from '@vitejs/plugin-vue' 3 | 4 | import path from 'path' 5 | 6 | // https://vitejs.dev/config/ 7 | export default defineConfig({ 8 | plugins: [vue()], 9 | resolve: { 10 | alias: { 11 | '@/': `${path.resolve(__dirname, 'src')}/`, 12 | }, 13 | }, 14 | }) 15 | -------------------------------------------------------------------------------- /web/src/artifacts/@openzeppelin/contracts/utils/Context.sol/Context.json: -------------------------------------------------------------------------------- 1 | { 2 | "_format": "hh-sol-artifact-1", 3 | "contractName": "Context", 4 | "sourceName": "@openzeppelin/contracts/utils/Context.sol", 5 | "abi": [], 6 | "bytecode": "0x", 7 | "deployedBytecode": "0x", 8 | "linkReferences": {}, 9 | "deployedLinkReferences": {} 10 | } 11 | -------------------------------------------------------------------------------- /backend/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "backend", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "event-watcher.js", 6 | "scripts": { 7 | "start": "node event-watcher.js", 8 | "test": "echo \"Error: no test specified\" && exit 1" 9 | }, 10 | "author": "", 11 | "license": "ISC", 12 | "dependencies": { 13 | "dotenv": "^16.0.0", 14 | "web3": "^1.7.0" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /backend/.env.example: -------------------------------------------------------------------------------- 1 | ORIGIN_WSS_ENDPOINT= 2 | ORIGIN_HTTPS_ENDPOINT= 3 | ORIGIN_TOKEN_CONTRACT_ADDRESS= 4 | DESTINATION_WSS_ENDPOINT= 5 | DESTINATION_HTTPS_ENDPOINT= 6 | DESTINATION_TOKEN_CONTRACT_ADDRESS= 7 | BRIDGE_WALLET= 8 | BRIDGE_PRIV_KEY= 9 | ORIGIN_EXPLORER=https://ropsten.etherscan.io/tx/ 10 | DESTINATION_EXPLORER=https://explorer.pops.one/ 11 | WALLET_ZERO=0x0000000000000000000000000000000000000000 12 | -------------------------------------------------------------------------------- /web/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Blockchain bridge 8 | 9 | 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /web/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "esnext", 4 | "useDefineForClassFields": true, 5 | "module": "esnext", 6 | "moduleResolution": "node", 7 | "strict": true, 8 | "jsx": "preserve", 9 | "sourceMap": true, 10 | "resolveJsonModule": true, 11 | "esModuleInterop": true, 12 | "lib": ["esnext", "dom"] 13 | }, 14 | "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"] 15 | } 16 | -------------------------------------------------------------------------------- /web/src/stores/wallet.ts: -------------------------------------------------------------------------------- 1 | import { defineStore } from 'pinia' 2 | 3 | interface WalletData { 4 | address: string 5 | network: string 6 | } 7 | 8 | export const useWalletStore = defineStore('wallet', { 9 | state: () => { 10 | return { 11 | address: '', 12 | provider: null, 13 | acc_short: '', 14 | } 15 | }, 16 | 17 | actions: { 18 | //@ts-ignore 19 | saveWalletData(payload: WalletData) { 20 | this.address = payload.address 21 | this.network = payload.network 22 | this.acc_short = `${payload.address.slice( 23 | 0, 24 | 2 25 | )}...${payload.address.slice(-4)}` 26 | }, 27 | }, 28 | }) 29 | -------------------------------------------------------------------------------- /web/src/stores/global.ts: -------------------------------------------------------------------------------- 1 | import { defineStore } from 'pinia' 2 | 3 | export const useGlobalStore = defineStore('global', { 4 | state: () => { 5 | return { 6 | ethTokenAddress: '', 7 | qTokenAddress: '', 8 | provider: {}, 9 | ethTokenContract: null, 10 | } 11 | }, 12 | 13 | actions: { 14 | //@ts-ignore 15 | // saveWalletData(payload: WalletData) { 16 | // this.address = payload.address 17 | // this.acc_short = `${payload.address.slice( 18 | // 0, 19 | // 2 20 | // )}...${payload.address.slice(-4)}` 21 | // }, 22 | //TODO: save contract provider and contract itself to use it in all views 23 | }, 24 | }) 25 | -------------------------------------------------------------------------------- /web/src/router/index.ts: -------------------------------------------------------------------------------- 1 | import { createRouter, createWebHistory, RouteRecordRaw } from 'vue-router' 2 | import Home from '@/views/Origin.vue' 3 | 4 | const routes: Array = [ 5 | { 6 | path: '/', 7 | name: 'Home', 8 | component: Home, 9 | }, 10 | 11 | { 12 | path: '/bridge-back', 13 | name: 'Destination', 14 | 15 | component: () => import('../views/Destination.vue'), 16 | }, 17 | 18 | // TODO: for 404 errors 19 | // { 20 | // path: '/:catchAll(.*)', 21 | // component: NotFoundComponent, 22 | // name: 'NotFound', 23 | // }, 24 | ] 25 | 26 | const router = createRouter({ 27 | history: createWebHistory(), 28 | 29 | routes, 30 | }) 31 | 32 | export default router 33 | -------------------------------------------------------------------------------- /solidity/test/sample-test.js: -------------------------------------------------------------------------------- 1 | // const { expect } = require("chai"); 2 | // const { ethers } = require("hardhat"); 3 | 4 | // describe("Greeter", function () { 5 | // it("Should return the new greeting once it's changed", async function () { 6 | // const Greeter = await ethers.getContractFactory("Greeter"); 7 | // const greeter = await Greeter.deploy("Hello, world!"); 8 | // await greeter.deployed(); 9 | 10 | // expect(await greeter.greet()).to.equal("Hello, world!"); 11 | 12 | // const setGreetingTx = await greeter.setGreeting("Hola, mundo!"); 13 | 14 | // // wait until the transaction is mined 15 | // await setGreetingTx.wait(); 16 | 17 | // expect(await greeter.greet()).to.equal("Hola, mundo!"); 18 | // }); 19 | // }); 20 | -------------------------------------------------------------------------------- /web/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "blockchain-bridge", 3 | "version": "0.0.0", 4 | "scripts": { 5 | "dev": "vite", 6 | "build": "vite build", 7 | "preview": "vite preview" 8 | }, 9 | "dependencies": { 10 | "@tailwindcss/forms": "^0.4.0", 11 | "ethers": "^5.5.4", 12 | "pinia": "^2.0.6", 13 | "vue": "^3.2.25", 14 | "vue-router": "^4.0.0-0" 15 | }, 16 | "devDependencies": { 17 | "@types/node": "^17.0.1", 18 | "@vitejs/plugin-vue": "^2.0.0", 19 | "autoprefixer": "^10.4.0", 20 | "postcss": "^8.4.5", 21 | "tailwindcss": "^3.0.7", 22 | "typescript": "^4.4.4", 23 | "vite": "^2.7.2", 24 | "vue-tsc": "^0.29.8" 25 | } 26 | } -------------------------------------------------------------------------------- /solidity/contracts/OriginToken.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | pragma solidity ^0.8.4; 3 | 4 | import "hardhat/console.sol"; 5 | 6 | // Import ERC20 7 | import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; 8 | 9 | contract ChainstackDollars is ERC20 { 10 | // create the token passing the name and symbol 11 | constructor( 12 | string memory _name, 13 | string memory _symbol, 14 | uint256 _initialSupply 15 | ) ERC20(_name, _symbol) { 16 | // mint all tokens and send them to the deployer's wallet 17 | _mint(msg.sender, _initialSupply * (10**uint256(18))); 18 | console.log("Tokens minted %s", _initialSupply); 19 | console.log("Deployed! Tokens sent to %s", msg.sender); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /web/src/artifacts/hardhat/console.sol/console.json: -------------------------------------------------------------------------------- 1 | { 2 | "_format": "hh-sol-artifact-1", 3 | "contractName": "console", 4 | "sourceName": "hardhat/console.sol", 5 | "abi": [], 6 | "bytecode": "0x60566050600b82828239805160001a6073146043577f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212201066baf0131e6eab0b5e9cc6cb6d59b6b1ce6f56164f850f45f0e1316d420ed964736f6c63430008040033", 7 | "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212201066baf0131e6eab0b5e9cc6cb6d59b6b1ce6f56164f850f45f0e1316d420ed964736f6c63430008040033", 8 | "linkReferences": {}, 9 | "deployedLinkReferences": {} 10 | } 11 | -------------------------------------------------------------------------------- /solidity/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "hardhat-project", 3 | "devDependencies": { 4 | "@nomiclabs/hardhat-ethers": "^2.0.5", 5 | "@nomiclabs/hardhat-waffle": "^2.0.2", 6 | "chai": "^4.3.6", 7 | "ethereum-waffle": "^3.4.0", 8 | "ethers": "^5.5.4", 9 | "hardhat": "^2.8.4" 10 | }, 11 | "dependencies": { 12 | "@openzeppelin/contracts": "^4.5.0", 13 | "@openzeppelin/test-helpers": "^0.5.15", 14 | "dotenv": "^16.0.0" 15 | }, 16 | "scripts": { 17 | "deploy": "npx hardhat run ./scripts/deploy.js --network localhost", 18 | "deploy:ori": "npx hardhat run ./scripts/deployOrigin.js --network origin", 19 | "deploy:dest": "npx hardhat run ./scripts/deployDestination.js --network destination", 20 | "test": "npx hardhat test", 21 | "dev": "cd web && npm run dev" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /solidity/scripts/deployOrigin.js: -------------------------------------------------------------------------------- 1 | const main = async () => { 2 | const [deployer] = await hre.ethers.getSigners() 3 | const accountBalance = await deployer.getBalance() 4 | 5 | console.log('Deploying contracts with account: ', deployer.address) 6 | console.log('Account balance: ', accountBalance.toString()) 7 | 8 | let contractFactory = await hre.ethers.getContractFactory('ChainstackDollars') 9 | let contract = await contractFactory.deploy( 10 | 'ChainstackDollars', 11 | 'CHSD', 12 | 1000000 13 | ) 14 | 15 | await contract.deployed() 16 | 17 | console.log( 18 | 'contract ChainstackDollars deployed to address: ', 19 | contract.address 20 | ) 21 | } 22 | 23 | const runMain = async () => { 24 | try { 25 | await main() 26 | process.exit(0) 27 | } catch (error) { 28 | console.error(error) 29 | process.exit(1) 30 | } 31 | } 32 | 33 | runMain() 34 | -------------------------------------------------------------------------------- /solidity/scripts/deployDestination.js: -------------------------------------------------------------------------------- 1 | //load env file 2 | require('dotenv').config() 3 | 4 | const main = async () => { 5 | const [deployer] = await hre.ethers.getSigners() 6 | const accountBalance = await deployer.getBalance() 7 | 8 | console.log('Deploying contracts with account: ', deployer.address) 9 | console.log('Account balance: ', accountBalance.toString()) 10 | 11 | let contractFactory = await hre.ethers.getContractFactory( 12 | 'DChainstackDollars' 13 | ) 14 | let contract = await contractFactory.deploy(process.env.BRIDGE_WALLET) 15 | 16 | await contract.deployed() 17 | 18 | console.log( 19 | 'contract DChainstackDollars deployed to address: ', 20 | contract.address 21 | ) 22 | } 23 | 24 | const runMain = async () => { 25 | try { 26 | await main() 27 | process.exit(0) 28 | } catch (error) { 29 | console.error(error) 30 | process.exit(1) 31 | } 32 | } 33 | 34 | runMain() 35 | -------------------------------------------------------------------------------- /web/src/App.vue: -------------------------------------------------------------------------------- 1 | 17 | 18 | 26 | 27 | 35 | -------------------------------------------------------------------------------- /web/src/components/Nav.vue: -------------------------------------------------------------------------------- 1 | 30 | -------------------------------------------------------------------------------- /solidity/scripts/sample-script.js: -------------------------------------------------------------------------------- 1 | // We require the Hardhat Runtime Environment explicitly here. This is optional 2 | // but useful for running the script in a standalone fashion through `node 157 | -------------------------------------------------------------------------------- /backend/event-watcher.js: -------------------------------------------------------------------------------- 1 | const Web3 = require('web3') 2 | 3 | //load env file 4 | require('dotenv').config() 5 | 6 | const { 7 | mintTokens, 8 | approveForBurn, 9 | burnTokens, 10 | transferToEthWallet, 11 | } = require('./contract-methods.js') 12 | 13 | const ORIGIN_TOKEN_CONTRACT_ADDRESS = process.env.ORIGIN_TOKEN_CONTRACT_ADDRESS 14 | const DESTINATION_TOKEN_CONTRACT_ADDRESS = 15 | process.env.DESTINATION_TOKEN_CONTRACT_ADDRESS 16 | const BRIDGE_WALLET = process.env.BRIDGE_WALLET 17 | 18 | const BRIDGE_WALLET_KEY = process.env.BRIDGE_PRIV_KEY 19 | 20 | const CHSD_ABIJSON = require('./ChainstackDollars.json') 21 | const QCHSD_ABIJSON = require('./DChainstackDollars.json') 22 | 23 | const handleEthEvent = async (event, provider, contract) => { 24 | console.log('handleEthEvent') 25 | const { from, to, value } = event.returnValues 26 | console.log('to :>> ', to) 27 | console.log('from :>> ', from) 28 | console.log('value :>> ', value) 29 | console.log('============================') 30 | 31 | if (from == BRIDGE_WALLET) { 32 | console.log('Transfer is a bridge back') 33 | return 34 | } 35 | if (to == BRIDGE_WALLET && to != from) { 36 | console.log('Tokens received on bridge from ETH chain! Time to bridge!') 37 | 38 | try { 39 | const tokensMinted = await mintTokens(provider, contract, value, from) 40 | if (!tokensMinted) return 41 | console.log('🌈🌈🌈🌈🌈 Bridge to destination completed') 42 | } catch (err) { 43 | console.error('Error processing transaction', err) 44 | // TODO: return funds 45 | } 46 | } else { 47 | console.log('Another transfer') 48 | } 49 | } 50 | 51 | const handleDestinationEvent = async ( 52 | event, 53 | provider, 54 | contract, 55 | providerDest, 56 | contractDest 57 | ) => { 58 | const { from, to, value } = event.returnValues 59 | console.log('handleDestinationEvent') 60 | console.log('to :>> ', to) 61 | console.log('from :>> ', from) 62 | console.log('value :>> ', value) 63 | console.log('============================') 64 | 65 | if (from == process.env.WALLET_ZERO) { 66 | console.log('Tokens minted') 67 | return 68 | } 69 | 70 | if (to == BRIDGE_WALLET && to != from) { 71 | console.log( 72 | 'Tokens received on bridge from destination chain! Time to bridge back!' 73 | ) 74 | 75 | try { 76 | // we need to approve burn, then burn 77 | const tokenBurnApproved = await approveForBurn( 78 | providerDest, 79 | contractDest, 80 | value 81 | ) 82 | if (!tokenBurnApproved) return 83 | console.log('Tokens approved to be burnt') 84 | const tokensBurnt = await burnTokens(providerDest, contractDest, value) 85 | 86 | if (!tokensBurnt) return 87 | console.log( 88 | 'Tokens burnt on destination, time to transfer tokens in ETH side' 89 | ) 90 | const transferBack = await transferToEthWallet( 91 | provider, 92 | contract, 93 | value, 94 | from 95 | ) 96 | if (!transferBack) return 97 | 98 | console.log('Tokens transfered to ETH wallet') 99 | console.log('🌈🌈🌈🌈🌈 Bridge back operation completed') 100 | } catch (err) { 101 | console.error('Error processing transaction', err) 102 | // TODO: return funds 103 | } 104 | } else { 105 | console.log('Something else triggered Transfer event') 106 | } 107 | } 108 | 109 | const main = async () => { 110 | const originWebSockerProvider = new Web3(process.env.ORIGIN_WSS_ENDPOINT) 111 | const destinationWebSockerProvider = new Web3( 112 | process.env.DESTINATION_WSS_ENDPOINT 113 | ) 114 | // adds account to sign transactions 115 | originWebSockerProvider.eth.accounts.wallet.add(BRIDGE_WALLET_KEY) 116 | destinationWebSockerProvider.eth.accounts.wallet.add(BRIDGE_WALLET_KEY) 117 | 118 | const oriNetworkId = await originWebSockerProvider.eth.net.getId() 119 | const destNetworkId = await destinationWebSockerProvider.eth.net.getId() 120 | 121 | console.log('oriNetworkId :>> ', oriNetworkId) 122 | console.log('destNetworkId :>> ', destNetworkId) 123 | 124 | const originTokenContract = new originWebSockerProvider.eth.Contract( 125 | CHSD_ABIJSON.abi, 126 | ORIGIN_TOKEN_CONTRACT_ADDRESS 127 | ) 128 | 129 | const destinationTokenContract = 130 | new destinationWebSockerProvider.eth.Contract( 131 | QCHSD_ABIJSON.abi, 132 | DESTINATION_TOKEN_CONTRACT_ADDRESS 133 | ) 134 | 135 | let options = { 136 | // filter: { 137 | // value: ['1000', '1337'], //Only get events where transfer value was 1000 or 1337 138 | // }, 139 | // fromBlock: 0, //Number || "earliest" || "pending" || "latest" 140 | // toBlock: 'latest', 141 | } 142 | 143 | originTokenContract.events 144 | .Transfer(options) 145 | .on('data', async (event) => { 146 | await handleEthEvent( 147 | event, 148 | destinationWebSockerProvider, 149 | destinationTokenContract 150 | ) 151 | }) 152 | .on('error', (err) => { 153 | console.error('Error: ', err) 154 | }) 155 | console.log(`Waiting for Transfer events on ${ORIGIN_TOKEN_CONTRACT_ADDRESS}`) 156 | 157 | destinationTokenContract.events 158 | .Transfer(options) 159 | .on('data', async (event) => { 160 | await handleDestinationEvent( 161 | event, 162 | originWebSockerProvider, 163 | originTokenContract, 164 | destinationWebSockerProvider, 165 | destinationTokenContract 166 | ) 167 | }) 168 | .on('error', (err) => { 169 | console.error('Error: ', err) 170 | }) 171 | 172 | console.log( 173 | `Waiting for Transfer events on ${DESTINATION_TOKEN_CONTRACT_ADDRESS}` 174 | ) 175 | } 176 | 177 | main() 178 | -------------------------------------------------------------------------------- /web/src/artifacts/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol/IERC20Metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "_format": "hh-sol-artifact-1", 3 | "contractName": "IERC20Metadata", 4 | "sourceName": "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol", 5 | "abi": [ 6 | { 7 | "anonymous": false, 8 | "inputs": [ 9 | { 10 | "indexed": true, 11 | "internalType": "address", 12 | "name": "owner", 13 | "type": "address" 14 | }, 15 | { 16 | "indexed": true, 17 | "internalType": "address", 18 | "name": "spender", 19 | "type": "address" 20 | }, 21 | { 22 | "indexed": false, 23 | "internalType": "uint256", 24 | "name": "value", 25 | "type": "uint256" 26 | } 27 | ], 28 | "name": "Approval", 29 | "type": "event" 30 | }, 31 | { 32 | "anonymous": false, 33 | "inputs": [ 34 | { 35 | "indexed": true, 36 | "internalType": "address", 37 | "name": "from", 38 | "type": "address" 39 | }, 40 | { 41 | "indexed": true, 42 | "internalType": "address", 43 | "name": "to", 44 | "type": "address" 45 | }, 46 | { 47 | "indexed": false, 48 | "internalType": "uint256", 49 | "name": "value", 50 | "type": "uint256" 51 | } 52 | ], 53 | "name": "Transfer", 54 | "type": "event" 55 | }, 56 | { 57 | "inputs": [ 58 | { 59 | "internalType": "address", 60 | "name": "owner", 61 | "type": "address" 62 | }, 63 | { 64 | "internalType": "address", 65 | "name": "spender", 66 | "type": "address" 67 | } 68 | ], 69 | "name": "allowance", 70 | "outputs": [ 71 | { 72 | "internalType": "uint256", 73 | "name": "", 74 | "type": "uint256" 75 | } 76 | ], 77 | "stateMutability": "view", 78 | "type": "function" 79 | }, 80 | { 81 | "inputs": [ 82 | { 83 | "internalType": "address", 84 | "name": "spender", 85 | "type": "address" 86 | }, 87 | { 88 | "internalType": "uint256", 89 | "name": "amount", 90 | "type": "uint256" 91 | } 92 | ], 93 | "name": "approve", 94 | "outputs": [ 95 | { 96 | "internalType": "bool", 97 | "name": "", 98 | "type": "bool" 99 | } 100 | ], 101 | "stateMutability": "nonpayable", 102 | "type": "function" 103 | }, 104 | { 105 | "inputs": [ 106 | { 107 | "internalType": "address", 108 | "name": "account", 109 | "type": "address" 110 | } 111 | ], 112 | "name": "balanceOf", 113 | "outputs": [ 114 | { 115 | "internalType": "uint256", 116 | "name": "", 117 | "type": "uint256" 118 | } 119 | ], 120 | "stateMutability": "view", 121 | "type": "function" 122 | }, 123 | { 124 | "inputs": [], 125 | "name": "decimals", 126 | "outputs": [ 127 | { 128 | "internalType": "uint8", 129 | "name": "", 130 | "type": "uint8" 131 | } 132 | ], 133 | "stateMutability": "view", 134 | "type": "function" 135 | }, 136 | { 137 | "inputs": [], 138 | "name": "name", 139 | "outputs": [ 140 | { 141 | "internalType": "string", 142 | "name": "", 143 | "type": "string" 144 | } 145 | ], 146 | "stateMutability": "view", 147 | "type": "function" 148 | }, 149 | { 150 | "inputs": [], 151 | "name": "symbol", 152 | "outputs": [ 153 | { 154 | "internalType": "string", 155 | "name": "", 156 | "type": "string" 157 | } 158 | ], 159 | "stateMutability": "view", 160 | "type": "function" 161 | }, 162 | { 163 | "inputs": [], 164 | "name": "totalSupply", 165 | "outputs": [ 166 | { 167 | "internalType": "uint256", 168 | "name": "", 169 | "type": "uint256" 170 | } 171 | ], 172 | "stateMutability": "view", 173 | "type": "function" 174 | }, 175 | { 176 | "inputs": [ 177 | { 178 | "internalType": "address", 179 | "name": "to", 180 | "type": "address" 181 | }, 182 | { 183 | "internalType": "uint256", 184 | "name": "amount", 185 | "type": "uint256" 186 | } 187 | ], 188 | "name": "transfer", 189 | "outputs": [ 190 | { 191 | "internalType": "bool", 192 | "name": "", 193 | "type": "bool" 194 | } 195 | ], 196 | "stateMutability": "nonpayable", 197 | "type": "function" 198 | }, 199 | { 200 | "inputs": [ 201 | { 202 | "internalType": "address", 203 | "name": "from", 204 | "type": "address" 205 | }, 206 | { 207 | "internalType": "address", 208 | "name": "to", 209 | "type": "address" 210 | }, 211 | { 212 | "internalType": "uint256", 213 | "name": "amount", 214 | "type": "uint256" 215 | } 216 | ], 217 | "name": "transferFrom", 218 | "outputs": [ 219 | { 220 | "internalType": "bool", 221 | "name": "", 222 | "type": "bool" 223 | } 224 | ], 225 | "stateMutability": "nonpayable", 226 | "type": "function" 227 | } 228 | ], 229 | "bytecode": "0x", 230 | "deployedBytecode": "0x", 231 | "linkReferences": {}, 232 | "deployedLinkReferences": {} 233 | } 234 | -------------------------------------------------------------------------------- /web/src/views/Origin.vue: -------------------------------------------------------------------------------- 1 | 80 | 81 | 182 | -------------------------------------------------------------------------------- /backend/contract-methods.js: -------------------------------------------------------------------------------- 1 | const BRIDGE_WALLET = process.env.BRIDGE_WALLET 2 | const ORIGIN_TOKEN_CONTRACT_ADDRESS = process.env.ORIGIN_TOKEN_CONTRACT_ADDRESS 3 | const DESTINATION_TOKEN_CONTRACT_ADDRESS = 4 | process.env.DESTINATION_TOKEN_CONTRACT_ADDRESS 5 | 6 | const mintTokens = async (provider, contract, amount, address) => { 7 | try { 8 | const trx = contract.methods.mint(address, amount) 9 | 10 | const gas = await trx.estimateGas({ from: BRIDGE_WALLET }) 11 | console.log('gas :>> ', gas) 12 | const gasPrice = await provider.eth.getGasPrice() 13 | console.log('gasPrice :>> ', gasPrice) 14 | const data = trx.encodeABI() 15 | console.log('data :>> ', data) 16 | const nonce = await provider.eth.getTransactionCount(BRIDGE_WALLET) 17 | 18 | console.log('nonce :>> ', nonce) 19 | 20 | const trxData = { 21 | // trx is sent from the bridge wallet 22 | from: BRIDGE_WALLET, 23 | // destination of the transaction is the ERC20 token address 24 | to: DESTINATION_TOKEN_CONTRACT_ADDRESS, 25 | 26 | data, 27 | gas, 28 | gasPrice, 29 | nonce, 30 | } 31 | 32 | console.log('Transaction ready to be sent') 33 | 34 | const receipt = await provider.eth.sendTransaction(trxData) 35 | console.log(`Transaction sent, hash is ${receipt.transactionHash}`) 36 | console.log( 37 | `mintTokens > You can see this transaction in ${process.env.DESTINATION_EXPLORER}${receipt.transactionHash}` 38 | ) 39 | } catch (error) { 40 | console.error('Error in mintTokens >', error) 41 | return false 42 | } 43 | } 44 | 45 | const transferToEthWallet = async (provider, contract, amount, address) => { 46 | try { 47 | console.log('Transfering tokens to ETH wallet 💸💸💸💸💸') 48 | console.log('address :>> ', address) 49 | console.log('amount :>> ', amount) 50 | const trx = contract.methods.transfer(address, amount) 51 | 52 | const gas = await trx.estimateGas({ from: BRIDGE_WALLET }) 53 | console.log('gas :>> ', gas) 54 | const gasPrice = await provider.eth.getGasPrice() 55 | console.log('gasPrice :>> ', gasPrice) 56 | const data = trx.encodeABI() 57 | console.log('data :>> ', data) 58 | const nonce = await provider.eth.getTransactionCount(BRIDGE_WALLET) 59 | 60 | console.log('nonce :>> ', nonce) 61 | 62 | const trxData = { 63 | // trx is sent from the bridge wallet 64 | from: BRIDGE_WALLET, 65 | // destination of the transaction is the ERC20 token address 66 | to: ORIGIN_TOKEN_CONTRACT_ADDRESS, 67 | // data contains the amount and receiver params for transfer 68 | data, 69 | // TO TEST!!! 70 | gas: Math.ceil(gas * 1.2), 71 | gasPrice, 72 | nonce, 73 | } 74 | 75 | // console.log('signedTrx :>> ', signedTrx.rawTransaction) 76 | 77 | console.log('Transaction ready to be sent') 78 | 79 | const receipt = await provider.eth.sendTransaction(trxData) 80 | console.log(`Transaction sent, hash is ${receipt.transactionHash}`) 81 | console.log( 82 | `transferToEthWallet > You can see this transaction in ${process.env.ORIGIN_EXPLORER}${receipt.transactionHash}` 83 | ) 84 | return true 85 | } catch (error) { 86 | console.error('Error in transferToEthWallet >', error) 87 | return false 88 | } 89 | } 90 | const approveForBurn = async (provider, contract, amount) => { 91 | try { 92 | console.log('Approving token burn 🔥🔥🔥🔥🔥') 93 | console.log('amount :>> ', amount) 94 | console.log('contract.options.address :>> ', contract.options.address) 95 | const trx = contract.methods.approve(BRIDGE_WALLET, amount) 96 | 97 | const gas = await trx.estimateGas({ from: BRIDGE_WALLET }) 98 | console.log('gas :>> ', gas) 99 | const gasPrice = await provider.eth.getGasPrice() 100 | console.log('gasPrice :>> ', gasPrice) 101 | const data = trx.encodeABI() 102 | console.log('data :>> ', data) 103 | const nonce = await provider.eth.getTransactionCount(BRIDGE_WALLET) 104 | 105 | console.log('nonce :>> ', nonce) 106 | 107 | const trxData = { 108 | // trx is sent from the bridge wallet 109 | from: BRIDGE_WALLET, 110 | // destination of the transaction is the ERC20 token address 111 | to: contract.options.address, 112 | data, 113 | // hardcoded gasPrice as estimation is not correct 114 | gas: 60000, 115 | gasPrice, 116 | nonce, 117 | } 118 | 119 | console.log('Transaction ready to be sent') 120 | 121 | const receipt = await provider.eth.sendTransaction(trxData) 122 | console.log(`Transaction sent, hash is ${receipt.transactionHash}`) 123 | console.log( 124 | `approveForBurn > You can see this transaction in ${process.env.DESTINATION_EXPLORER}${receipt.transactionHash}` 125 | ) 126 | return true 127 | } catch (err) { 128 | console.error('Error in approveForBurn > ', err) 129 | return false 130 | } 131 | } 132 | 133 | const burnTokens = async (provider, contract, amount) => { 134 | try { 135 | console.log('Burning tokens from wallet 🔥🔥🔥🔥🔥') 136 | console.log('amount :>> ', amount) 137 | console.log('contract.options.address :>> ', contract.options.address) 138 | const trx = contract.methods.burnFrom(BRIDGE_WALLET, amount) 139 | 140 | const gas = await trx.estimateGas({ from: BRIDGE_WALLET }) 141 | console.log('gas :>> ', gas) 142 | const gasPrice = await provider.eth.getGasPrice() 143 | console.log('gasPrice :>> ', gasPrice) 144 | const data = trx.encodeABI() 145 | console.log('data :>> ', data) 146 | const nonce = await provider.eth.getTransactionCount(BRIDGE_WALLET) 147 | 148 | console.log('nonce :>> ', nonce) 149 | 150 | const trxData = { 151 | // trx is sent from the bridge wallet 152 | from: BRIDGE_WALLET, 153 | // destination of the transaction is the ERC20 token address 154 | to: contract.options.address, 155 | data, 156 | // hardcoded gasPrice as estimation is not correct 157 | gas, 158 | gasPrice, 159 | nonce, 160 | } 161 | 162 | console.log('Transaction ready to be sent') 163 | 164 | const receipt = await provider.eth.sendTransaction(trxData) 165 | console.log(`Transaction sent, hash is ${receipt.transactionHash}`) 166 | console.log( 167 | `burnTokens > You can see this transaction in ${process.env.DESTINATION_EXPLORER}${receipt.transactionHash}` 168 | ) 169 | return true 170 | } catch (err) { 171 | console.error('Error in burnTokens > ', err) 172 | return false 173 | } 174 | } 175 | 176 | module.exports = { 177 | mintTokens, 178 | approveForBurn, 179 | burnTokens, 180 | transferToEthWallet, 181 | } 182 | -------------------------------------------------------------------------------- /web/src/views/Destination.vue: -------------------------------------------------------------------------------- 1 | 73 | 74 | 200 | -------------------------------------------------------------------------------- /web/src/components/Navbar.vue: -------------------------------------------------------------------------------- 1 | 75 | 76 | 110 | -------------------------------------------------------------------------------- /web/src/artifacts/@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol/ERC20Burnable.json: -------------------------------------------------------------------------------- 1 | { 2 | "_format": "hh-sol-artifact-1", 3 | "contractName": "ERC20Burnable", 4 | "sourceName": "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol", 5 | "abi": [ 6 | { 7 | "anonymous": false, 8 | "inputs": [ 9 | { 10 | "indexed": true, 11 | "internalType": "address", 12 | "name": "owner", 13 | "type": "address" 14 | }, 15 | { 16 | "indexed": true, 17 | "internalType": "address", 18 | "name": "spender", 19 | "type": "address" 20 | }, 21 | { 22 | "indexed": false, 23 | "internalType": "uint256", 24 | "name": "value", 25 | "type": "uint256" 26 | } 27 | ], 28 | "name": "Approval", 29 | "type": "event" 30 | }, 31 | { 32 | "anonymous": false, 33 | "inputs": [ 34 | { 35 | "indexed": true, 36 | "internalType": "address", 37 | "name": "from", 38 | "type": "address" 39 | }, 40 | { 41 | "indexed": true, 42 | "internalType": "address", 43 | "name": "to", 44 | "type": "address" 45 | }, 46 | { 47 | "indexed": false, 48 | "internalType": "uint256", 49 | "name": "value", 50 | "type": "uint256" 51 | } 52 | ], 53 | "name": "Transfer", 54 | "type": "event" 55 | }, 56 | { 57 | "inputs": [ 58 | { 59 | "internalType": "address", 60 | "name": "owner", 61 | "type": "address" 62 | }, 63 | { 64 | "internalType": "address", 65 | "name": "spender", 66 | "type": "address" 67 | } 68 | ], 69 | "name": "allowance", 70 | "outputs": [ 71 | { 72 | "internalType": "uint256", 73 | "name": "", 74 | "type": "uint256" 75 | } 76 | ], 77 | "stateMutability": "view", 78 | "type": "function" 79 | }, 80 | { 81 | "inputs": [ 82 | { 83 | "internalType": "address", 84 | "name": "spender", 85 | "type": "address" 86 | }, 87 | { 88 | "internalType": "uint256", 89 | "name": "amount", 90 | "type": "uint256" 91 | } 92 | ], 93 | "name": "approve", 94 | "outputs": [ 95 | { 96 | "internalType": "bool", 97 | "name": "", 98 | "type": "bool" 99 | } 100 | ], 101 | "stateMutability": "nonpayable", 102 | "type": "function" 103 | }, 104 | { 105 | "inputs": [ 106 | { 107 | "internalType": "address", 108 | "name": "account", 109 | "type": "address" 110 | } 111 | ], 112 | "name": "balanceOf", 113 | "outputs": [ 114 | { 115 | "internalType": "uint256", 116 | "name": "", 117 | "type": "uint256" 118 | } 119 | ], 120 | "stateMutability": "view", 121 | "type": "function" 122 | }, 123 | { 124 | "inputs": [ 125 | { 126 | "internalType": "uint256", 127 | "name": "amount", 128 | "type": "uint256" 129 | } 130 | ], 131 | "name": "burn", 132 | "outputs": [], 133 | "stateMutability": "nonpayable", 134 | "type": "function" 135 | }, 136 | { 137 | "inputs": [ 138 | { 139 | "internalType": "address", 140 | "name": "account", 141 | "type": "address" 142 | }, 143 | { 144 | "internalType": "uint256", 145 | "name": "amount", 146 | "type": "uint256" 147 | } 148 | ], 149 | "name": "burnFrom", 150 | "outputs": [], 151 | "stateMutability": "nonpayable", 152 | "type": "function" 153 | }, 154 | { 155 | "inputs": [], 156 | "name": "decimals", 157 | "outputs": [ 158 | { 159 | "internalType": "uint8", 160 | "name": "", 161 | "type": "uint8" 162 | } 163 | ], 164 | "stateMutability": "view", 165 | "type": "function" 166 | }, 167 | { 168 | "inputs": [ 169 | { 170 | "internalType": "address", 171 | "name": "spender", 172 | "type": "address" 173 | }, 174 | { 175 | "internalType": "uint256", 176 | "name": "subtractedValue", 177 | "type": "uint256" 178 | } 179 | ], 180 | "name": "decreaseAllowance", 181 | "outputs": [ 182 | { 183 | "internalType": "bool", 184 | "name": "", 185 | "type": "bool" 186 | } 187 | ], 188 | "stateMutability": "nonpayable", 189 | "type": "function" 190 | }, 191 | { 192 | "inputs": [ 193 | { 194 | "internalType": "address", 195 | "name": "spender", 196 | "type": "address" 197 | }, 198 | { 199 | "internalType": "uint256", 200 | "name": "addedValue", 201 | "type": "uint256" 202 | } 203 | ], 204 | "name": "increaseAllowance", 205 | "outputs": [ 206 | { 207 | "internalType": "bool", 208 | "name": "", 209 | "type": "bool" 210 | } 211 | ], 212 | "stateMutability": "nonpayable", 213 | "type": "function" 214 | }, 215 | { 216 | "inputs": [], 217 | "name": "name", 218 | "outputs": [ 219 | { 220 | "internalType": "string", 221 | "name": "", 222 | "type": "string" 223 | } 224 | ], 225 | "stateMutability": "view", 226 | "type": "function" 227 | }, 228 | { 229 | "inputs": [], 230 | "name": "symbol", 231 | "outputs": [ 232 | { 233 | "internalType": "string", 234 | "name": "", 235 | "type": "string" 236 | } 237 | ], 238 | "stateMutability": "view", 239 | "type": "function" 240 | }, 241 | { 242 | "inputs": [], 243 | "name": "totalSupply", 244 | "outputs": [ 245 | { 246 | "internalType": "uint256", 247 | "name": "", 248 | "type": "uint256" 249 | } 250 | ], 251 | "stateMutability": "view", 252 | "type": "function" 253 | }, 254 | { 255 | "inputs": [ 256 | { 257 | "internalType": "address", 258 | "name": "to", 259 | "type": "address" 260 | }, 261 | { 262 | "internalType": "uint256", 263 | "name": "amount", 264 | "type": "uint256" 265 | } 266 | ], 267 | "name": "transfer", 268 | "outputs": [ 269 | { 270 | "internalType": "bool", 271 | "name": "", 272 | "type": "bool" 273 | } 274 | ], 275 | "stateMutability": "nonpayable", 276 | "type": "function" 277 | }, 278 | { 279 | "inputs": [ 280 | { 281 | "internalType": "address", 282 | "name": "from", 283 | "type": "address" 284 | }, 285 | { 286 | "internalType": "address", 287 | "name": "to", 288 | "type": "address" 289 | }, 290 | { 291 | "internalType": "uint256", 292 | "name": "amount", 293 | "type": "uint256" 294 | } 295 | ], 296 | "name": "transferFrom", 297 | "outputs": [ 298 | { 299 | "internalType": "bool", 300 | "name": "", 301 | "type": "bool" 302 | } 303 | ], 304 | "stateMutability": "nonpayable", 305 | "type": "function" 306 | } 307 | ], 308 | "bytecode": "0x", 309 | "deployedBytecode": "0x", 310 | "linkReferences": {}, 311 | "deployedLinkReferences": {} 312 | } 313 | -------------------------------------------------------------------------------- /web/src/artifacts/@openzeppelin/contracts/token/ERC20/ERC20.sol/ERC20.json: -------------------------------------------------------------------------------- 1 | { 2 | "_format": "hh-sol-artifact-1", 3 | "contractName": "ERC20", 4 | "sourceName": "@openzeppelin/contracts/token/ERC20/ERC20.sol", 5 | "abi": [ 6 | { 7 | "inputs": [ 8 | { 9 | "internalType": "string", 10 | "name": "name_", 11 | "type": "string" 12 | }, 13 | { 14 | "internalType": "string", 15 | "name": "symbol_", 16 | "type": "string" 17 | } 18 | ], 19 | "stateMutability": "nonpayable", 20 | "type": "constructor" 21 | }, 22 | { 23 | "anonymous": false, 24 | "inputs": [ 25 | { 26 | "indexed": true, 27 | "internalType": "address", 28 | "name": "owner", 29 | "type": "address" 30 | }, 31 | { 32 | "indexed": true, 33 | "internalType": "address", 34 | "name": "spender", 35 | "type": "address" 36 | }, 37 | { 38 | "indexed": false, 39 | "internalType": "uint256", 40 | "name": "value", 41 | "type": "uint256" 42 | } 43 | ], 44 | "name": "Approval", 45 | "type": "event" 46 | }, 47 | { 48 | "anonymous": false, 49 | "inputs": [ 50 | { 51 | "indexed": true, 52 | "internalType": "address", 53 | "name": "from", 54 | "type": "address" 55 | }, 56 | { 57 | "indexed": true, 58 | "internalType": "address", 59 | "name": "to", 60 | "type": "address" 61 | }, 62 | { 63 | "indexed": false, 64 | "internalType": "uint256", 65 | "name": "value", 66 | "type": "uint256" 67 | } 68 | ], 69 | "name": "Transfer", 70 | "type": "event" 71 | }, 72 | { 73 | "inputs": [ 74 | { 75 | "internalType": "address", 76 | "name": "owner", 77 | "type": "address" 78 | }, 79 | { 80 | "internalType": "address", 81 | "name": "spender", 82 | "type": "address" 83 | } 84 | ], 85 | "name": "allowance", 86 | "outputs": [ 87 | { 88 | "internalType": "uint256", 89 | "name": "", 90 | "type": "uint256" 91 | } 92 | ], 93 | "stateMutability": "view", 94 | "type": "function" 95 | }, 96 | { 97 | "inputs": [ 98 | { 99 | "internalType": "address", 100 | "name": "spender", 101 | "type": "address" 102 | }, 103 | { 104 | "internalType": "uint256", 105 | "name": "amount", 106 | "type": "uint256" 107 | } 108 | ], 109 | "name": "approve", 110 | "outputs": [ 111 | { 112 | "internalType": "bool", 113 | "name": "", 114 | "type": "bool" 115 | } 116 | ], 117 | "stateMutability": "nonpayable", 118 | "type": "function" 119 | }, 120 | { 121 | "inputs": [ 122 | { 123 | "internalType": "address", 124 | "name": "account", 125 | "type": "address" 126 | } 127 | ], 128 | "name": "balanceOf", 129 | "outputs": [ 130 | { 131 | "internalType": "uint256", 132 | "name": "", 133 | "type": "uint256" 134 | } 135 | ], 136 | "stateMutability": "view", 137 | "type": "function" 138 | }, 139 | { 140 | "inputs": [], 141 | "name": "decimals", 142 | "outputs": [ 143 | { 144 | "internalType": "uint8", 145 | "name": "", 146 | "type": "uint8" 147 | } 148 | ], 149 | "stateMutability": "view", 150 | "type": "function" 151 | }, 152 | { 153 | "inputs": [ 154 | { 155 | "internalType": "address", 156 | "name": "spender", 157 | "type": "address" 158 | }, 159 | { 160 | "internalType": "uint256", 161 | "name": "subtractedValue", 162 | "type": "uint256" 163 | } 164 | ], 165 | "name": "decreaseAllowance", 166 | "outputs": [ 167 | { 168 | "internalType": "bool", 169 | "name": "", 170 | "type": "bool" 171 | } 172 | ], 173 | "stateMutability": "nonpayable", 174 | "type": "function" 175 | }, 176 | { 177 | "inputs": [ 178 | { 179 | "internalType": "address", 180 | "name": "spender", 181 | "type": "address" 182 | }, 183 | { 184 | "internalType": "uint256", 185 | "name": "addedValue", 186 | "type": "uint256" 187 | } 188 | ], 189 | "name": "increaseAllowance", 190 | "outputs": [ 191 | { 192 | "internalType": "bool", 193 | "name": "", 194 | "type": "bool" 195 | } 196 | ], 197 | "stateMutability": "nonpayable", 198 | "type": "function" 199 | }, 200 | { 201 | "inputs": [], 202 | "name": "name", 203 | "outputs": [ 204 | { 205 | "internalType": "string", 206 | "name": "", 207 | "type": "string" 208 | } 209 | ], 210 | "stateMutability": "view", 211 | "type": "function" 212 | }, 213 | { 214 | "inputs": [], 215 | "name": "symbol", 216 | "outputs": [ 217 | { 218 | "internalType": "string", 219 | "name": "", 220 | "type": "string" 221 | } 222 | ], 223 | "stateMutability": "view", 224 | "type": "function" 225 | }, 226 | { 227 | "inputs": [], 228 | "name": "totalSupply", 229 | "outputs": [ 230 | { 231 | "internalType": "uint256", 232 | "name": "", 233 | "type": "uint256" 234 | } 235 | ], 236 | "stateMutability": "view", 237 | "type": "function" 238 | }, 239 | { 240 | "inputs": [ 241 | { 242 | "internalType": "address", 243 | "name": "to", 244 | "type": "address" 245 | }, 246 | { 247 | "internalType": "uint256", 248 | "name": "amount", 249 | "type": "uint256" 250 | } 251 | ], 252 | "name": "transfer", 253 | "outputs": [ 254 | { 255 | "internalType": "bool", 256 | "name": "", 257 | "type": "bool" 258 | } 259 | ], 260 | "stateMutability": "nonpayable", 261 | "type": "function" 262 | }, 263 | { 264 | "inputs": [ 265 | { 266 | "internalType": "address", 267 | "name": "from", 268 | "type": "address" 269 | }, 270 | { 271 | "internalType": "address", 272 | "name": "to", 273 | "type": "address" 274 | }, 275 | { 276 | "internalType": "uint256", 277 | "name": "amount", 278 | "type": "uint256" 279 | } 280 | ], 281 | "name": "transferFrom", 282 | "outputs": [ 283 | { 284 | "internalType": "bool", 285 | "name": "", 286 | "type": "bool" 287 | } 288 | ], 289 | "stateMutability": "nonpayable", 290 | "type": "function" 291 | } 292 | ], 293 | "bytecode": "0x60806040523480156200001157600080fd5b50604051620016bf380380620016bf833981810160405281019062000037919062000193565b81600390805190602001906200004f92919062000071565b5080600490805190602001906200006892919062000071565b50505062000376565b8280546200007f906200029b565b90600052602060002090601f016020900481019282620000a35760008555620000ef565b82601f10620000be57805160ff1916838001178555620000ef565b82800160010185558215620000ef579182015b82811115620000ee578251825591602001919060010190620000d1565b5b509050620000fe919062000102565b5090565b5b808211156200011d57600081600090555060010162000103565b5090565b60006200013862000132846200022f565b62000206565b9050828152602081018484840111156200015157600080fd5b6200015e84828562000265565b509392505050565b600082601f8301126200017857600080fd5b81516200018a84826020860162000121565b91505092915050565b60008060408385031215620001a757600080fd5b600083015167ffffffffffffffff811115620001c257600080fd5b620001d08582860162000166565b925050602083015167ffffffffffffffff811115620001ee57600080fd5b620001fc8582860162000166565b9150509250929050565b60006200021262000225565b9050620002208282620002d1565b919050565b6000604051905090565b600067ffffffffffffffff8211156200024d576200024c62000336565b5b620002588262000365565b9050602081019050919050565b60005b838110156200028557808201518184015260208101905062000268565b8381111562000295576000848401525b50505050565b60006002820490506001821680620002b457607f821691505b60208210811415620002cb57620002ca62000307565b5b50919050565b620002dc8262000365565b810181811067ffffffffffffffff82111715620002fe57620002fd62000336565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b61133980620003866000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461016857806370a082311461019857806395d89b41146101c8578063a457c2d7146101e6578063a9059cbb14610216578063dd62ed3e14610246576100a9565b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100fc57806323b872dd1461011a578063313ce5671461014a575b600080fd5b6100b6610276565b6040516100c39190610dff565b60405180910390f35b6100e660048036038101906100e19190610c4d565b610308565b6040516100f39190610de4565b60405180910390f35b61010461032b565b6040516101119190610f01565b60405180910390f35b610134600480360381019061012f9190610bfe565b610335565b6040516101419190610de4565b60405180910390f35b610152610364565b60405161015f9190610f1c565b60405180910390f35b610182600480360381019061017d9190610c4d565b61036d565b60405161018f9190610de4565b60405180910390f35b6101b260048036038101906101ad9190610b99565b610417565b6040516101bf9190610f01565b60405180910390f35b6101d061045f565b6040516101dd9190610dff565b60405180910390f35b61020060048036038101906101fb9190610c4d565b6104f1565b60405161020d9190610de4565b60405180910390f35b610230600480360381019061022b9190610c4d565b6105db565b60405161023d9190610de4565b60405180910390f35b610260600480360381019061025b9190610bc2565b6105fe565b60405161026d9190610f01565b60405180910390f35b60606003805461028590611031565b80601f01602080910402602001604051908101604052809291908181526020018280546102b190611031565b80156102fe5780601f106102d3576101008083540402835291602001916102fe565b820191906000526020600020905b8154815290600101906020018083116102e157829003601f168201915b5050505050905090565b600080610313610685565b905061032081858561068d565b600191505092915050565b6000600254905090565b600080610340610685565b905061034d858285610858565b6103588585856108e4565b60019150509392505050565b60006012905090565b600080610378610685565b905061040c818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546104079190610f53565b61068d565b600191505092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60606004805461046e90611031565b80601f016020809104026020016040519081016040528092919081815260200182805461049a90611031565b80156104e75780601f106104bc576101008083540402835291602001916104e7565b820191906000526020600020905b8154815290600101906020018083116104ca57829003601f168201915b5050505050905090565b6000806104fc610685565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156105c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105b990610ee1565b60405180910390fd5b6105cf828686840361068d565b60019250505092915050565b6000806105e6610685565b90506105f38185856108e4565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156106fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f490610ec1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561076d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076490610e41565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161084b9190610f01565b60405180910390a3505050565b600061086484846105fe565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146108de57818110156108d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c790610e61565b60405180910390fd5b6108dd848484840361068d565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610954576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094b90610ea1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156109c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109bb90610e21565b60405180910390fd5b6109cf838383610b65565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610a55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4c90610e81565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610ae89190610f53565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610b4c9190610f01565b60405180910390a3610b5f848484610b6a565b50505050565b505050565b505050565b600081359050610b7e816112d5565b92915050565b600081359050610b93816112ec565b92915050565b600060208284031215610bab57600080fd5b6000610bb984828501610b6f565b91505092915050565b60008060408385031215610bd557600080fd5b6000610be385828601610b6f565b9250506020610bf485828601610b6f565b9150509250929050565b600080600060608486031215610c1357600080fd5b6000610c2186828701610b6f565b9350506020610c3286828701610b6f565b9250506040610c4386828701610b84565b9150509250925092565b60008060408385031215610c6057600080fd5b6000610c6e85828601610b6f565b9250506020610c7f85828601610b84565b9150509250929050565b610c9281610fbb565b82525050565b6000610ca382610f37565b610cad8185610f42565b9350610cbd818560208601610ffe565b610cc6816110c1565b840191505092915050565b6000610cde602383610f42565b9150610ce9826110d2565b604082019050919050565b6000610d01602283610f42565b9150610d0c82611121565b604082019050919050565b6000610d24601d83610f42565b9150610d2f82611170565b602082019050919050565b6000610d47602683610f42565b9150610d5282611199565b604082019050919050565b6000610d6a602583610f42565b9150610d75826111e8565b604082019050919050565b6000610d8d602483610f42565b9150610d9882611237565b604082019050919050565b6000610db0602583610f42565b9150610dbb82611286565b604082019050919050565b610dcf81610fe7565b82525050565b610dde81610ff1565b82525050565b6000602082019050610df96000830184610c89565b92915050565b60006020820190508181036000830152610e198184610c98565b905092915050565b60006020820190508181036000830152610e3a81610cd1565b9050919050565b60006020820190508181036000830152610e5a81610cf4565b9050919050565b60006020820190508181036000830152610e7a81610d17565b9050919050565b60006020820190508181036000830152610e9a81610d3a565b9050919050565b60006020820190508181036000830152610eba81610d5d565b9050919050565b60006020820190508181036000830152610eda81610d80565b9050919050565b60006020820190508181036000830152610efa81610da3565b9050919050565b6000602082019050610f166000830184610dc6565b92915050565b6000602082019050610f316000830184610dd5565b92915050565b600081519050919050565b600082825260208201905092915050565b6000610f5e82610fe7565b9150610f6983610fe7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115610f9e57610f9d611063565b5b828201905092915050565b6000610fb482610fc7565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b8381101561101c578082015181840152602081019050611001565b8381111561102b576000848401525b50505050565b6000600282049050600182168061104957607f821691505b6020821081141561105d5761105c611092565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6112de81610fa9565b81146112e957600080fd5b50565b6112f581610fe7565b811461130057600080fd5b5056fea26469706673582212208fc6053c86f71290ea94ee4e882d106938d10f3b81ae900586424ac573fba6fb64736f6c63430008040033", 294 | "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461016857806370a082311461019857806395d89b41146101c8578063a457c2d7146101e6578063a9059cbb14610216578063dd62ed3e14610246576100a9565b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100fc57806323b872dd1461011a578063313ce5671461014a575b600080fd5b6100b6610276565b6040516100c39190610dff565b60405180910390f35b6100e660048036038101906100e19190610c4d565b610308565b6040516100f39190610de4565b60405180910390f35b61010461032b565b6040516101119190610f01565b60405180910390f35b610134600480360381019061012f9190610bfe565b610335565b6040516101419190610de4565b60405180910390f35b610152610364565b60405161015f9190610f1c565b60405180910390f35b610182600480360381019061017d9190610c4d565b61036d565b60405161018f9190610de4565b60405180910390f35b6101b260048036038101906101ad9190610b99565b610417565b6040516101bf9190610f01565b60405180910390f35b6101d061045f565b6040516101dd9190610dff565b60405180910390f35b61020060048036038101906101fb9190610c4d565b6104f1565b60405161020d9190610de4565b60405180910390f35b610230600480360381019061022b9190610c4d565b6105db565b60405161023d9190610de4565b60405180910390f35b610260600480360381019061025b9190610bc2565b6105fe565b60405161026d9190610f01565b60405180910390f35b60606003805461028590611031565b80601f01602080910402602001604051908101604052809291908181526020018280546102b190611031565b80156102fe5780601f106102d3576101008083540402835291602001916102fe565b820191906000526020600020905b8154815290600101906020018083116102e157829003601f168201915b5050505050905090565b600080610313610685565b905061032081858561068d565b600191505092915050565b6000600254905090565b600080610340610685565b905061034d858285610858565b6103588585856108e4565b60019150509392505050565b60006012905090565b600080610378610685565b905061040c818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546104079190610f53565b61068d565b600191505092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60606004805461046e90611031565b80601f016020809104026020016040519081016040528092919081815260200182805461049a90611031565b80156104e75780601f106104bc576101008083540402835291602001916104e7565b820191906000526020600020905b8154815290600101906020018083116104ca57829003601f168201915b5050505050905090565b6000806104fc610685565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156105c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105b990610ee1565b60405180910390fd5b6105cf828686840361068d565b60019250505092915050565b6000806105e6610685565b90506105f38185856108e4565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156106fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f490610ec1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561076d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076490610e41565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161084b9190610f01565b60405180910390a3505050565b600061086484846105fe565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146108de57818110156108d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c790610e61565b60405180910390fd5b6108dd848484840361068d565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610954576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094b90610ea1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156109c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109bb90610e21565b60405180910390fd5b6109cf838383610b65565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610a55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4c90610e81565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610ae89190610f53565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610b4c9190610f01565b60405180910390a3610b5f848484610b6a565b50505050565b505050565b505050565b600081359050610b7e816112d5565b92915050565b600081359050610b93816112ec565b92915050565b600060208284031215610bab57600080fd5b6000610bb984828501610b6f565b91505092915050565b60008060408385031215610bd557600080fd5b6000610be385828601610b6f565b9250506020610bf485828601610b6f565b9150509250929050565b600080600060608486031215610c1357600080fd5b6000610c2186828701610b6f565b9350506020610c3286828701610b6f565b9250506040610c4386828701610b84565b9150509250925092565b60008060408385031215610c6057600080fd5b6000610c6e85828601610b6f565b9250506020610c7f85828601610b84565b9150509250929050565b610c9281610fbb565b82525050565b6000610ca382610f37565b610cad8185610f42565b9350610cbd818560208601610ffe565b610cc6816110c1565b840191505092915050565b6000610cde602383610f42565b9150610ce9826110d2565b604082019050919050565b6000610d01602283610f42565b9150610d0c82611121565b604082019050919050565b6000610d24601d83610f42565b9150610d2f82611170565b602082019050919050565b6000610d47602683610f42565b9150610d5282611199565b604082019050919050565b6000610d6a602583610f42565b9150610d75826111e8565b604082019050919050565b6000610d8d602483610f42565b9150610d9882611237565b604082019050919050565b6000610db0602583610f42565b9150610dbb82611286565b604082019050919050565b610dcf81610fe7565b82525050565b610dde81610ff1565b82525050565b6000602082019050610df96000830184610c89565b92915050565b60006020820190508181036000830152610e198184610c98565b905092915050565b60006020820190508181036000830152610e3a81610cd1565b9050919050565b60006020820190508181036000830152610e5a81610cf4565b9050919050565b60006020820190508181036000830152610e7a81610d17565b9050919050565b60006020820190508181036000830152610e9a81610d3a565b9050919050565b60006020820190508181036000830152610eba81610d5d565b9050919050565b60006020820190508181036000830152610eda81610d80565b9050919050565b60006020820190508181036000830152610efa81610da3565b9050919050565b6000602082019050610f166000830184610dc6565b92915050565b6000602082019050610f316000830184610dd5565b92915050565b600081519050919050565b600082825260208201905092915050565b6000610f5e82610fe7565b9150610f6983610fe7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115610f9e57610f9d611063565b5b828201905092915050565b6000610fb482610fc7565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b8381101561101c578082015181840152602081019050611001565b8381111561102b576000848401525b50505050565b6000600282049050600182168061104957607f821691505b6020821081141561105d5761105c611092565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6112de81610fa9565b81146112e957600080fd5b50565b6112f581610fe7565b811461130057600080fd5b5056fea26469706673582212208fc6053c86f71290ea94ee4e882d106938d10f3b81ae900586424ac573fba6fb64736f6c63430008040033", 295 | "linkReferences": {}, 296 | "deployedLinkReferences": {} 297 | } 298 | -------------------------------------------------------------------------------- /backend/ChainstackDollars.json: -------------------------------------------------------------------------------- 1 | { 2 | "_format": "hh-sol-artifact-1", 3 | "contractName": "ChainstackDollars", 4 | "sourceName": "contracts/OriginToken.sol", 5 | "abi": [ 6 | { 7 | "inputs": [ 8 | { 9 | "internalType": "string", 10 | "name": "_name", 11 | "type": "string" 12 | }, 13 | { 14 | "internalType": "string", 15 | "name": "_symbol", 16 | "type": "string" 17 | }, 18 | { 19 | "internalType": "uint256", 20 | "name": "_initialSupply", 21 | "type": "uint256" 22 | } 23 | ], 24 | "stateMutability": "nonpayable", 25 | "type": "constructor" 26 | }, 27 | { 28 | "anonymous": false, 29 | "inputs": [ 30 | { 31 | "indexed": true, 32 | "internalType": "address", 33 | "name": "owner", 34 | "type": "address" 35 | }, 36 | { 37 | "indexed": true, 38 | "internalType": "address", 39 | "name": "spender", 40 | "type": "address" 41 | }, 42 | { 43 | "indexed": false, 44 | "internalType": "uint256", 45 | "name": "value", 46 | "type": "uint256" 47 | } 48 | ], 49 | "name": "Approval", 50 | "type": "event" 51 | }, 52 | { 53 | "anonymous": false, 54 | "inputs": [ 55 | { 56 | "indexed": true, 57 | "internalType": "address", 58 | "name": "from", 59 | "type": "address" 60 | }, 61 | { 62 | "indexed": true, 63 | "internalType": "address", 64 | "name": "to", 65 | "type": "address" 66 | }, 67 | { 68 | "indexed": false, 69 | "internalType": "uint256", 70 | "name": "value", 71 | "type": "uint256" 72 | } 73 | ], 74 | "name": "Transfer", 75 | "type": "event" 76 | }, 77 | { 78 | "inputs": [ 79 | { 80 | "internalType": "address", 81 | "name": "owner", 82 | "type": "address" 83 | }, 84 | { 85 | "internalType": "address", 86 | "name": "spender", 87 | "type": "address" 88 | } 89 | ], 90 | "name": "allowance", 91 | "outputs": [ 92 | { 93 | "internalType": "uint256", 94 | "name": "", 95 | "type": "uint256" 96 | } 97 | ], 98 | "stateMutability": "view", 99 | "type": "function" 100 | }, 101 | { 102 | "inputs": [ 103 | { 104 | "internalType": "address", 105 | "name": "spender", 106 | "type": "address" 107 | }, 108 | { 109 | "internalType": "uint256", 110 | "name": "amount", 111 | "type": "uint256" 112 | } 113 | ], 114 | "name": "approve", 115 | "outputs": [ 116 | { 117 | "internalType": "bool", 118 | "name": "", 119 | "type": "bool" 120 | } 121 | ], 122 | "stateMutability": "nonpayable", 123 | "type": "function" 124 | }, 125 | { 126 | "inputs": [ 127 | { 128 | "internalType": "address", 129 | "name": "account", 130 | "type": "address" 131 | } 132 | ], 133 | "name": "balanceOf", 134 | "outputs": [ 135 | { 136 | "internalType": "uint256", 137 | "name": "", 138 | "type": "uint256" 139 | } 140 | ], 141 | "stateMutability": "view", 142 | "type": "function" 143 | }, 144 | { 145 | "inputs": [], 146 | "name": "decimals", 147 | "outputs": [ 148 | { 149 | "internalType": "uint8", 150 | "name": "", 151 | "type": "uint8" 152 | } 153 | ], 154 | "stateMutability": "view", 155 | "type": "function" 156 | }, 157 | { 158 | "inputs": [ 159 | { 160 | "internalType": "address", 161 | "name": "spender", 162 | "type": "address" 163 | }, 164 | { 165 | "internalType": "uint256", 166 | "name": "subtractedValue", 167 | "type": "uint256" 168 | } 169 | ], 170 | "name": "decreaseAllowance", 171 | "outputs": [ 172 | { 173 | "internalType": "bool", 174 | "name": "", 175 | "type": "bool" 176 | } 177 | ], 178 | "stateMutability": "nonpayable", 179 | "type": "function" 180 | }, 181 | { 182 | "inputs": [ 183 | { 184 | "internalType": "address", 185 | "name": "spender", 186 | "type": "address" 187 | }, 188 | { 189 | "internalType": "uint256", 190 | "name": "addedValue", 191 | "type": "uint256" 192 | } 193 | ], 194 | "name": "increaseAllowance", 195 | "outputs": [ 196 | { 197 | "internalType": "bool", 198 | "name": "", 199 | "type": "bool" 200 | } 201 | ], 202 | "stateMutability": "nonpayable", 203 | "type": "function" 204 | }, 205 | { 206 | "inputs": [], 207 | "name": "name", 208 | "outputs": [ 209 | { 210 | "internalType": "string", 211 | "name": "", 212 | "type": "string" 213 | } 214 | ], 215 | "stateMutability": "view", 216 | "type": "function" 217 | }, 218 | { 219 | "inputs": [], 220 | "name": "symbol", 221 | "outputs": [ 222 | { 223 | "internalType": "string", 224 | "name": "", 225 | "type": "string" 226 | } 227 | ], 228 | "stateMutability": "view", 229 | "type": "function" 230 | }, 231 | { 232 | "inputs": [], 233 | "name": "totalSupply", 234 | "outputs": [ 235 | { 236 | "internalType": "uint256", 237 | "name": "", 238 | "type": "uint256" 239 | } 240 | ], 241 | "stateMutability": "view", 242 | "type": "function" 243 | }, 244 | { 245 | "inputs": [ 246 | { 247 | "internalType": "address", 248 | "name": "to", 249 | "type": "address" 250 | }, 251 | { 252 | "internalType": "uint256", 253 | "name": "amount", 254 | "type": "uint256" 255 | } 256 | ], 257 | "name": "transfer", 258 | "outputs": [ 259 | { 260 | "internalType": "bool", 261 | "name": "", 262 | "type": "bool" 263 | } 264 | ], 265 | "stateMutability": "nonpayable", 266 | "type": "function" 267 | }, 268 | { 269 | "inputs": [ 270 | { 271 | "internalType": "address", 272 | "name": "from", 273 | "type": "address" 274 | }, 275 | { 276 | "internalType": "address", 277 | "name": "to", 278 | "type": "address" 279 | }, 280 | { 281 | "internalType": "uint256", 282 | "name": "amount", 283 | "type": "uint256" 284 | } 285 | ], 286 | "name": "transferFrom", 287 | "outputs": [ 288 | { 289 | "internalType": "bool", 290 | "name": "", 291 | "type": "bool" 292 | } 293 | ], 294 | "stateMutability": "nonpayable", 295 | "type": "function" 296 | } 297 | ], 298 | "bytecode": "0x60806040523480156200001157600080fd5b50604051620020de380380620020de83398181016040528101906200003791906200056d565b828281600390805190602001906200005192919062000434565b5080600490805190602001906200006a92919062000434565b5050506200009b336012600a62000082919062000859565b836200008f919062000996565b6200013c60201b60201c565b620000e76040518060400160405280601081526020017f546f6b656e73206d696e7465642025730000000000000000000000000000000081525082620002b560201b620006851760201c565b620001336040518060400160405280601b81526020017f4465706c6f7965642120546f6b656e732073656e7420746f2025730000000000815250336200035b60201b620007211760201c565b50505062000bc5565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620001af576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001a690620006e7565b60405180910390fd5b620001c3600083836200040160201b60201c565b8060026000828254620001d79190620007a1565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200022e9190620007a1565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000295919062000709565b60405180910390a3620002b1600083836200040660201b60201c565b5050565b620003578282604051602401620002ce929190620006b3565b6040516020818303038152906040527f9710a9d0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506200040b60201b60201c565b5050565b620003fd8282604051602401620003749291906200067f565b6040516020818303038152906040527f319af333000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506200040b60201b60201c565b5050565b505050565b505050565b60008151905060006a636f6e736f6c652e6c6f679050602083016000808483855afa5050505050565b828054620004429062000a6b565b90600052602060002090601f016020900481019282620004665760008555620004b2565b82601f106200048157805160ff1916838001178555620004b2565b82800160010185558215620004b2579182015b82811115620004b157825182559160200191906001019062000494565b5b509050620004c19190620004c5565b5090565b5b80821115620004e0576000816000905550600101620004c6565b5090565b6000620004fb620004f5846200074f565b62000726565b9050828152602081018484840111156200051457600080fd5b6200052184828562000a35565b509392505050565b600082601f8301126200053b57600080fd5b81516200054d848260208601620004e4565b91505092915050565b600081519050620005678162000bab565b92915050565b6000806000606084860312156200058357600080fd5b600084015167ffffffffffffffff8111156200059e57600080fd5b620005ac8682870162000529565b935050602084015167ffffffffffffffff811115620005ca57600080fd5b620005d88682870162000529565b9250506040620005eb8682870162000556565b9150509250925092565b6200060081620009f7565b82525050565b6000620006138262000785565b6200061f818562000790565b93506200063181856020860162000a35565b6200063c8162000b64565b840191505092915050565b600062000656601f8362000790565b9150620006638262000b82565b602082019050919050565b620006798162000a2b565b82525050565b600060408201905081810360008301526200069b818562000606565b9050620006ac6020830184620005f5565b9392505050565b60006040820190508181036000830152620006cf818562000606565b9050620006e060208301846200066e565b9392505050565b60006020820190508181036000830152620007028162000647565b9050919050565b60006020820190506200072060008301846200066e565b92915050565b60006200073262000745565b905062000740828262000aa1565b919050565b6000604051905090565b600067ffffffffffffffff8211156200076d576200076c62000b35565b5b620007788262000b64565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b6000620007ae8262000a2b565b9150620007bb8362000a2b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620007f357620007f262000ad7565b5b828201905092915050565b6000808291508390505b6001851115620008505780860481111562000828576200082762000ad7565b5b6001851615620008385780820291505b8081029050620008488562000b75565b945062000808565b94509492505050565b6000620008668262000a2b565b9150620008738362000a2b565b9250620008a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620008aa565b905092915050565b600082620008bc57600190506200098f565b81620008cc57600090506200098f565b8160018114620008e55760028114620008f05762000926565b60019150506200098f565b60ff84111562000905576200090462000ad7565b5b8360020a9150848211156200091f576200091e62000ad7565b5b506200098f565b5060208310610133831016604e8410600b8410161715620009605782820a9050838111156200095a576200095962000ad7565b5b6200098f565b6200096f8484846001620007fe565b9250905081840481111562000989576200098862000ad7565b5b81810290505b9392505050565b6000620009a38262000a2b565b9150620009b08362000a2b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620009ec57620009eb62000ad7565b5b828202905092915050565b600062000a048262000a0b565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b8381101562000a5557808201518184015260208101905062000a38565b8381111562000a65576000848401525b50505050565b6000600282049050600182168062000a8457607f821691505b6020821081141562000a9b5762000a9a62000b06565b5b50919050565b62000aac8262000b64565b810181811067ffffffffffffffff8211171562000ace5762000acd62000b35565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b62000bb68162000a2b565b811462000bc257600080fd5b50565b6115098062000bd56000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461016857806370a082311461019857806395d89b41146101c8578063a457c2d7146101e6578063a9059cbb14610216578063dd62ed3e14610246576100a9565b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100fc57806323b872dd1461011a578063313ce5671461014a575b600080fd5b6100b6610276565b6040516100c39190610f6f565b60405180910390f35b6100e660048036038101906100e19190610dae565b610308565b6040516100f39190610f54565b60405180910390f35b61010461032b565b60405161011191906110d1565b60405180910390f35b610134600480360381019061012f9190610d5f565b610335565b6040516101419190610f54565b60405180910390f35b610152610364565b60405161015f91906110ec565b60405180910390f35b610182600480360381019061017d9190610dae565b61036d565b60405161018f9190610f54565b60405180910390f35b6101b260048036038101906101ad9190610cfa565b610417565b6040516101bf91906110d1565b60405180910390f35b6101d061045f565b6040516101dd9190610f6f565b60405180910390f35b61020060048036038101906101fb9190610dae565b6104f1565b60405161020d9190610f54565b60405180910390f35b610230600480360381019061022b9190610dae565b6105db565b60405161023d9190610f54565b60405180910390f35b610260600480360381019061025b9190610d23565b6105fe565b60405161026d91906110d1565b60405180910390f35b60606003805461028590611201565b80601f01602080910402602001604051908101604052809291908181526020018280546102b190611201565b80156102fe5780601f106102d3576101008083540402835291602001916102fe565b820191906000526020600020905b8154815290600101906020018083116102e157829003601f168201915b5050505050905090565b6000806103136107bd565b90506103208185856107c5565b600191505092915050565b6000600254905090565b6000806103406107bd565b905061034d858285610990565b610358858585610a1c565b60019150509392505050565b60006012905090565b6000806103786107bd565b905061040c818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546104079190611123565b6107c5565b600191505092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60606004805461046e90611201565b80601f016020809104026020016040519081016040528092919081815260200182805461049a90611201565b80156104e75780601f106104bc576101008083540402835291602001916104e7565b820191906000526020600020905b8154815290600101906020018083116104ca57829003601f168201915b5050505050905090565b6000806104fc6107bd565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156105c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105b9906110b1565b60405180910390fd5b6105cf82868684036107c5565b60019250505092915050565b6000806105e66107bd565b90506105f3818585610a1c565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61071d828260405160240161069b929190610fc1565b6040516020818303038152906040527f9710a9d0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610c9d565b5050565b6107b98282604051602401610737929190610f91565b6040516020818303038152906040527f319af333000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610c9d565b5050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610835576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082c90611091565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156108a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089c90611011565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161098391906110d1565b60405180910390a3505050565b600061099c84846105fe565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610a165781811015610a08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ff90611031565b60405180910390fd5b610a1584848484036107c5565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8390611071565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610afc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af390610ff1565b60405180910390fd5b610b07838383610cc6565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610b8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8490611051565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610c209190611123565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610c8491906110d1565b60405180910390a3610c97848484610ccb565b50505050565b60008151905060006a636f6e736f6c652e6c6f679050602083016000808483855afa5050505050565b505050565b505050565b600081359050610cdf816114a5565b92915050565b600081359050610cf4816114bc565b92915050565b600060208284031215610d0c57600080fd5b6000610d1a84828501610cd0565b91505092915050565b60008060408385031215610d3657600080fd5b6000610d4485828601610cd0565b9250506020610d5585828601610cd0565b9150509250929050565b600080600060608486031215610d7457600080fd5b6000610d8286828701610cd0565b9350506020610d9386828701610cd0565b9250506040610da486828701610ce5565b9150509250925092565b60008060408385031215610dc157600080fd5b6000610dcf85828601610cd0565b9250506020610de085828601610ce5565b9150509250929050565b610df381611179565b82525050565b610e028161118b565b82525050565b6000610e1382611107565b610e1d8185611112565b9350610e2d8185602086016111ce565b610e3681611291565b840191505092915050565b6000610e4e602383611112565b9150610e59826112a2565b604082019050919050565b6000610e71602283611112565b9150610e7c826112f1565b604082019050919050565b6000610e94601d83611112565b9150610e9f82611340565b602082019050919050565b6000610eb7602683611112565b9150610ec282611369565b604082019050919050565b6000610eda602583611112565b9150610ee5826113b8565b604082019050919050565b6000610efd602483611112565b9150610f0882611407565b604082019050919050565b6000610f20602583611112565b9150610f2b82611456565b604082019050919050565b610f3f816111b7565b82525050565b610f4e816111c1565b82525050565b6000602082019050610f696000830184610df9565b92915050565b60006020820190508181036000830152610f898184610e08565b905092915050565b60006040820190508181036000830152610fab8185610e08565b9050610fba6020830184610dea565b9392505050565b60006040820190508181036000830152610fdb8185610e08565b9050610fea6020830184610f36565b9392505050565b6000602082019050818103600083015261100a81610e41565b9050919050565b6000602082019050818103600083015261102a81610e64565b9050919050565b6000602082019050818103600083015261104a81610e87565b9050919050565b6000602082019050818103600083015261106a81610eaa565b9050919050565b6000602082019050818103600083015261108a81610ecd565b9050919050565b600060208201905081810360008301526110aa81610ef0565b9050919050565b600060208201905081810360008301526110ca81610f13565b9050919050565b60006020820190506110e66000830184610f36565b92915050565b60006020820190506111016000830184610f45565b92915050565b600081519050919050565b600082825260208201905092915050565b600061112e826111b7565b9150611139836111b7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561116e5761116d611233565b5b828201905092915050565b600061118482611197565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b838110156111ec5780820151818401526020810190506111d1565b838111156111fb576000848401525b50505050565b6000600282049050600182168061121957607f821691505b6020821081141561122d5761122c611262565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6114ae81611179565b81146114b957600080fd5b50565b6114c5816111b7565b81146114d057600080fd5b5056fea2646970667358221220d64f0f85ed813ab09f6725f12cc3cfe613bb2b8ca3670dd4fb5067053c4e07f064736f6c63430008040033", 299 | "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461016857806370a082311461019857806395d89b41146101c8578063a457c2d7146101e6578063a9059cbb14610216578063dd62ed3e14610246576100a9565b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100fc57806323b872dd1461011a578063313ce5671461014a575b600080fd5b6100b6610276565b6040516100c39190610f6f565b60405180910390f35b6100e660048036038101906100e19190610dae565b610308565b6040516100f39190610f54565b60405180910390f35b61010461032b565b60405161011191906110d1565b60405180910390f35b610134600480360381019061012f9190610d5f565b610335565b6040516101419190610f54565b60405180910390f35b610152610364565b60405161015f91906110ec565b60405180910390f35b610182600480360381019061017d9190610dae565b61036d565b60405161018f9190610f54565b60405180910390f35b6101b260048036038101906101ad9190610cfa565b610417565b6040516101bf91906110d1565b60405180910390f35b6101d061045f565b6040516101dd9190610f6f565b60405180910390f35b61020060048036038101906101fb9190610dae565b6104f1565b60405161020d9190610f54565b60405180910390f35b610230600480360381019061022b9190610dae565b6105db565b60405161023d9190610f54565b60405180910390f35b610260600480360381019061025b9190610d23565b6105fe565b60405161026d91906110d1565b60405180910390f35b60606003805461028590611201565b80601f01602080910402602001604051908101604052809291908181526020018280546102b190611201565b80156102fe5780601f106102d3576101008083540402835291602001916102fe565b820191906000526020600020905b8154815290600101906020018083116102e157829003601f168201915b5050505050905090565b6000806103136107bd565b90506103208185856107c5565b600191505092915050565b6000600254905090565b6000806103406107bd565b905061034d858285610990565b610358858585610a1c565b60019150509392505050565b60006012905090565b6000806103786107bd565b905061040c818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546104079190611123565b6107c5565b600191505092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60606004805461046e90611201565b80601f016020809104026020016040519081016040528092919081815260200182805461049a90611201565b80156104e75780601f106104bc576101008083540402835291602001916104e7565b820191906000526020600020905b8154815290600101906020018083116104ca57829003601f168201915b5050505050905090565b6000806104fc6107bd565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156105c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105b9906110b1565b60405180910390fd5b6105cf82868684036107c5565b60019250505092915050565b6000806105e66107bd565b90506105f3818585610a1c565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61071d828260405160240161069b929190610fc1565b6040516020818303038152906040527f9710a9d0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610c9d565b5050565b6107b98282604051602401610737929190610f91565b6040516020818303038152906040527f319af333000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610c9d565b5050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610835576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082c90611091565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156108a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089c90611011565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161098391906110d1565b60405180910390a3505050565b600061099c84846105fe565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610a165781811015610a08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ff90611031565b60405180910390fd5b610a1584848484036107c5565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8390611071565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610afc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af390610ff1565b60405180910390fd5b610b07838383610cc6565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610b8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8490611051565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610c209190611123565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610c8491906110d1565b60405180910390a3610c97848484610ccb565b50505050565b60008151905060006a636f6e736f6c652e6c6f679050602083016000808483855afa5050505050565b505050565b505050565b600081359050610cdf816114a5565b92915050565b600081359050610cf4816114bc565b92915050565b600060208284031215610d0c57600080fd5b6000610d1a84828501610cd0565b91505092915050565b60008060408385031215610d3657600080fd5b6000610d4485828601610cd0565b9250506020610d5585828601610cd0565b9150509250929050565b600080600060608486031215610d7457600080fd5b6000610d8286828701610cd0565b9350506020610d9386828701610cd0565b9250506040610da486828701610ce5565b9150509250925092565b60008060408385031215610dc157600080fd5b6000610dcf85828601610cd0565b9250506020610de085828601610ce5565b9150509250929050565b610df381611179565b82525050565b610e028161118b565b82525050565b6000610e1382611107565b610e1d8185611112565b9350610e2d8185602086016111ce565b610e3681611291565b840191505092915050565b6000610e4e602383611112565b9150610e59826112a2565b604082019050919050565b6000610e71602283611112565b9150610e7c826112f1565b604082019050919050565b6000610e94601d83611112565b9150610e9f82611340565b602082019050919050565b6000610eb7602683611112565b9150610ec282611369565b604082019050919050565b6000610eda602583611112565b9150610ee5826113b8565b604082019050919050565b6000610efd602483611112565b9150610f0882611407565b604082019050919050565b6000610f20602583611112565b9150610f2b82611456565b604082019050919050565b610f3f816111b7565b82525050565b610f4e816111c1565b82525050565b6000602082019050610f696000830184610df9565b92915050565b60006020820190508181036000830152610f898184610e08565b905092915050565b60006040820190508181036000830152610fab8185610e08565b9050610fba6020830184610dea565b9392505050565b60006040820190508181036000830152610fdb8185610e08565b9050610fea6020830184610f36565b9392505050565b6000602082019050818103600083015261100a81610e41565b9050919050565b6000602082019050818103600083015261102a81610e64565b9050919050565b6000602082019050818103600083015261104a81610e87565b9050919050565b6000602082019050818103600083015261106a81610eaa565b9050919050565b6000602082019050818103600083015261108a81610ecd565b9050919050565b600060208201905081810360008301526110aa81610ef0565b9050919050565b600060208201905081810360008301526110ca81610f13565b9050919050565b60006020820190506110e66000830184610f36565b92915050565b60006020820190506111016000830184610f45565b92915050565b600081519050919050565b600082825260208201905092915050565b600061112e826111b7565b9150611139836111b7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561116e5761116d611233565b5b828201905092915050565b600061118482611197565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b838110156111ec5780820151818401526020810190506111d1565b838111156111fb576000848401525b50505050565b6000600282049050600182168061121957607f821691505b6020821081141561122d5761122c611262565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6114ae81611179565b81146114b957600080fd5b50565b6114c5816111b7565b81146114d057600080fd5b5056fea2646970667358221220d64f0f85ed813ab09f6725f12cc3cfe613bb2b8ca3670dd4fb5067053c4e07f064736f6c63430008040033", 300 | "linkReferences": {}, 301 | "deployedLinkReferences": {} 302 | } 303 | -------------------------------------------------------------------------------- /web/src/artifacts/contracts/OriginToken.sol/ChainstackDollars.json: -------------------------------------------------------------------------------- 1 | { 2 | "_format": "hh-sol-artifact-1", 3 | "contractName": "ChainstackDollars", 4 | "sourceName": "contracts/OriginToken.sol", 5 | "abi": [ 6 | { 7 | "inputs": [ 8 | { 9 | "internalType": "string", 10 | "name": "_name", 11 | "type": "string" 12 | }, 13 | { 14 | "internalType": "string", 15 | "name": "_symbol", 16 | "type": "string" 17 | }, 18 | { 19 | "internalType": "uint256", 20 | "name": "_initialSupply", 21 | "type": "uint256" 22 | } 23 | ], 24 | "stateMutability": "nonpayable", 25 | "type": "constructor" 26 | }, 27 | { 28 | "anonymous": false, 29 | "inputs": [ 30 | { 31 | "indexed": true, 32 | "internalType": "address", 33 | "name": "owner", 34 | "type": "address" 35 | }, 36 | { 37 | "indexed": true, 38 | "internalType": "address", 39 | "name": "spender", 40 | "type": "address" 41 | }, 42 | { 43 | "indexed": false, 44 | "internalType": "uint256", 45 | "name": "value", 46 | "type": "uint256" 47 | } 48 | ], 49 | "name": "Approval", 50 | "type": "event" 51 | }, 52 | { 53 | "anonymous": false, 54 | "inputs": [ 55 | { 56 | "indexed": true, 57 | "internalType": "address", 58 | "name": "from", 59 | "type": "address" 60 | }, 61 | { 62 | "indexed": true, 63 | "internalType": "address", 64 | "name": "to", 65 | "type": "address" 66 | }, 67 | { 68 | "indexed": false, 69 | "internalType": "uint256", 70 | "name": "value", 71 | "type": "uint256" 72 | } 73 | ], 74 | "name": "Transfer", 75 | "type": "event" 76 | }, 77 | { 78 | "inputs": [ 79 | { 80 | "internalType": "address", 81 | "name": "owner", 82 | "type": "address" 83 | }, 84 | { 85 | "internalType": "address", 86 | "name": "spender", 87 | "type": "address" 88 | } 89 | ], 90 | "name": "allowance", 91 | "outputs": [ 92 | { 93 | "internalType": "uint256", 94 | "name": "", 95 | "type": "uint256" 96 | } 97 | ], 98 | "stateMutability": "view", 99 | "type": "function" 100 | }, 101 | { 102 | "inputs": [ 103 | { 104 | "internalType": "address", 105 | "name": "spender", 106 | "type": "address" 107 | }, 108 | { 109 | "internalType": "uint256", 110 | "name": "amount", 111 | "type": "uint256" 112 | } 113 | ], 114 | "name": "approve", 115 | "outputs": [ 116 | { 117 | "internalType": "bool", 118 | "name": "", 119 | "type": "bool" 120 | } 121 | ], 122 | "stateMutability": "nonpayable", 123 | "type": "function" 124 | }, 125 | { 126 | "inputs": [ 127 | { 128 | "internalType": "address", 129 | "name": "account", 130 | "type": "address" 131 | } 132 | ], 133 | "name": "balanceOf", 134 | "outputs": [ 135 | { 136 | "internalType": "uint256", 137 | "name": "", 138 | "type": "uint256" 139 | } 140 | ], 141 | "stateMutability": "view", 142 | "type": "function" 143 | }, 144 | { 145 | "inputs": [], 146 | "name": "decimals", 147 | "outputs": [ 148 | { 149 | "internalType": "uint8", 150 | "name": "", 151 | "type": "uint8" 152 | } 153 | ], 154 | "stateMutability": "view", 155 | "type": "function" 156 | }, 157 | { 158 | "inputs": [ 159 | { 160 | "internalType": "address", 161 | "name": "spender", 162 | "type": "address" 163 | }, 164 | { 165 | "internalType": "uint256", 166 | "name": "subtractedValue", 167 | "type": "uint256" 168 | } 169 | ], 170 | "name": "decreaseAllowance", 171 | "outputs": [ 172 | { 173 | "internalType": "bool", 174 | "name": "", 175 | "type": "bool" 176 | } 177 | ], 178 | "stateMutability": "nonpayable", 179 | "type": "function" 180 | }, 181 | { 182 | "inputs": [ 183 | { 184 | "internalType": "address", 185 | "name": "spender", 186 | "type": "address" 187 | }, 188 | { 189 | "internalType": "uint256", 190 | "name": "addedValue", 191 | "type": "uint256" 192 | } 193 | ], 194 | "name": "increaseAllowance", 195 | "outputs": [ 196 | { 197 | "internalType": "bool", 198 | "name": "", 199 | "type": "bool" 200 | } 201 | ], 202 | "stateMutability": "nonpayable", 203 | "type": "function" 204 | }, 205 | { 206 | "inputs": [], 207 | "name": "name", 208 | "outputs": [ 209 | { 210 | "internalType": "string", 211 | "name": "", 212 | "type": "string" 213 | } 214 | ], 215 | "stateMutability": "view", 216 | "type": "function" 217 | }, 218 | { 219 | "inputs": [], 220 | "name": "symbol", 221 | "outputs": [ 222 | { 223 | "internalType": "string", 224 | "name": "", 225 | "type": "string" 226 | } 227 | ], 228 | "stateMutability": "view", 229 | "type": "function" 230 | }, 231 | { 232 | "inputs": [], 233 | "name": "totalSupply", 234 | "outputs": [ 235 | { 236 | "internalType": "uint256", 237 | "name": "", 238 | "type": "uint256" 239 | } 240 | ], 241 | "stateMutability": "view", 242 | "type": "function" 243 | }, 244 | { 245 | "inputs": [ 246 | { 247 | "internalType": "address", 248 | "name": "to", 249 | "type": "address" 250 | }, 251 | { 252 | "internalType": "uint256", 253 | "name": "amount", 254 | "type": "uint256" 255 | } 256 | ], 257 | "name": "transfer", 258 | "outputs": [ 259 | { 260 | "internalType": "bool", 261 | "name": "", 262 | "type": "bool" 263 | } 264 | ], 265 | "stateMutability": "nonpayable", 266 | "type": "function" 267 | }, 268 | { 269 | "inputs": [ 270 | { 271 | "internalType": "address", 272 | "name": "from", 273 | "type": "address" 274 | }, 275 | { 276 | "internalType": "address", 277 | "name": "to", 278 | "type": "address" 279 | }, 280 | { 281 | "internalType": "uint256", 282 | "name": "amount", 283 | "type": "uint256" 284 | } 285 | ], 286 | "name": "transferFrom", 287 | "outputs": [ 288 | { 289 | "internalType": "bool", 290 | "name": "", 291 | "type": "bool" 292 | } 293 | ], 294 | "stateMutability": "nonpayable", 295 | "type": "function" 296 | } 297 | ], 298 | "bytecode": "0x60806040523480156200001157600080fd5b50604051620020de380380620020de83398181016040528101906200003791906200056d565b828281600390805190602001906200005192919062000434565b5080600490805190602001906200006a92919062000434565b5050506200009b336012600a62000082919062000859565b836200008f919062000996565b6200013c60201b60201c565b620000e76040518060400160405280601081526020017f546f6b656e73206d696e7465642025730000000000000000000000000000000081525082620002b560201b620006851760201c565b620001336040518060400160405280601b81526020017f4465706c6f7965642120546f6b656e732073656e7420746f2025730000000000815250336200035b60201b620007211760201c565b50505062000bc5565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620001af576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001a690620006e7565b60405180910390fd5b620001c3600083836200040160201b60201c565b8060026000828254620001d79190620007a1565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200022e9190620007a1565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000295919062000709565b60405180910390a3620002b1600083836200040660201b60201c565b5050565b620003578282604051602401620002ce929190620006b3565b6040516020818303038152906040527f9710a9d0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506200040b60201b60201c565b5050565b620003fd8282604051602401620003749291906200067f565b6040516020818303038152906040527f319af333000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506200040b60201b60201c565b5050565b505050565b505050565b60008151905060006a636f6e736f6c652e6c6f679050602083016000808483855afa5050505050565b828054620004429062000a6b565b90600052602060002090601f016020900481019282620004665760008555620004b2565b82601f106200048157805160ff1916838001178555620004b2565b82800160010185558215620004b2579182015b82811115620004b157825182559160200191906001019062000494565b5b509050620004c19190620004c5565b5090565b5b80821115620004e0576000816000905550600101620004c6565b5090565b6000620004fb620004f5846200074f565b62000726565b9050828152602081018484840111156200051457600080fd5b6200052184828562000a35565b509392505050565b600082601f8301126200053b57600080fd5b81516200054d848260208601620004e4565b91505092915050565b600081519050620005678162000bab565b92915050565b6000806000606084860312156200058357600080fd5b600084015167ffffffffffffffff8111156200059e57600080fd5b620005ac8682870162000529565b935050602084015167ffffffffffffffff811115620005ca57600080fd5b620005d88682870162000529565b9250506040620005eb8682870162000556565b9150509250925092565b6200060081620009f7565b82525050565b6000620006138262000785565b6200061f818562000790565b93506200063181856020860162000a35565b6200063c8162000b64565b840191505092915050565b600062000656601f8362000790565b9150620006638262000b82565b602082019050919050565b620006798162000a2b565b82525050565b600060408201905081810360008301526200069b818562000606565b9050620006ac6020830184620005f5565b9392505050565b60006040820190508181036000830152620006cf818562000606565b9050620006e060208301846200066e565b9392505050565b60006020820190508181036000830152620007028162000647565b9050919050565b60006020820190506200072060008301846200066e565b92915050565b60006200073262000745565b905062000740828262000aa1565b919050565b6000604051905090565b600067ffffffffffffffff8211156200076d576200076c62000b35565b5b620007788262000b64565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b6000620007ae8262000a2b565b9150620007bb8362000a2b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620007f357620007f262000ad7565b5b828201905092915050565b6000808291508390505b6001851115620008505780860481111562000828576200082762000ad7565b5b6001851615620008385780820291505b8081029050620008488562000b75565b945062000808565b94509492505050565b6000620008668262000a2b565b9150620008738362000a2b565b9250620008a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620008aa565b905092915050565b600082620008bc57600190506200098f565b81620008cc57600090506200098f565b8160018114620008e55760028114620008f05762000926565b60019150506200098f565b60ff84111562000905576200090462000ad7565b5b8360020a9150848211156200091f576200091e62000ad7565b5b506200098f565b5060208310610133831016604e8410600b8410161715620009605782820a9050838111156200095a576200095962000ad7565b5b6200098f565b6200096f8484846001620007fe565b9250905081840481111562000989576200098862000ad7565b5b81810290505b9392505050565b6000620009a38262000a2b565b9150620009b08362000a2b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620009ec57620009eb62000ad7565b5b828202905092915050565b600062000a048262000a0b565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b8381101562000a5557808201518184015260208101905062000a38565b8381111562000a65576000848401525b50505050565b6000600282049050600182168062000a8457607f821691505b6020821081141562000a9b5762000a9a62000b06565b5b50919050565b62000aac8262000b64565b810181811067ffffffffffffffff8211171562000ace5762000acd62000b35565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b62000bb68162000a2b565b811462000bc257600080fd5b50565b6115098062000bd56000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461016857806370a082311461019857806395d89b41146101c8578063a457c2d7146101e6578063a9059cbb14610216578063dd62ed3e14610246576100a9565b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100fc57806323b872dd1461011a578063313ce5671461014a575b600080fd5b6100b6610276565b6040516100c39190610f6f565b60405180910390f35b6100e660048036038101906100e19190610dae565b610308565b6040516100f39190610f54565b60405180910390f35b61010461032b565b60405161011191906110d1565b60405180910390f35b610134600480360381019061012f9190610d5f565b610335565b6040516101419190610f54565b60405180910390f35b610152610364565b60405161015f91906110ec565b60405180910390f35b610182600480360381019061017d9190610dae565b61036d565b60405161018f9190610f54565b60405180910390f35b6101b260048036038101906101ad9190610cfa565b610417565b6040516101bf91906110d1565b60405180910390f35b6101d061045f565b6040516101dd9190610f6f565b60405180910390f35b61020060048036038101906101fb9190610dae565b6104f1565b60405161020d9190610f54565b60405180910390f35b610230600480360381019061022b9190610dae565b6105db565b60405161023d9190610f54565b60405180910390f35b610260600480360381019061025b9190610d23565b6105fe565b60405161026d91906110d1565b60405180910390f35b60606003805461028590611201565b80601f01602080910402602001604051908101604052809291908181526020018280546102b190611201565b80156102fe5780601f106102d3576101008083540402835291602001916102fe565b820191906000526020600020905b8154815290600101906020018083116102e157829003601f168201915b5050505050905090565b6000806103136107bd565b90506103208185856107c5565b600191505092915050565b6000600254905090565b6000806103406107bd565b905061034d858285610990565b610358858585610a1c565b60019150509392505050565b60006012905090565b6000806103786107bd565b905061040c818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546104079190611123565b6107c5565b600191505092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60606004805461046e90611201565b80601f016020809104026020016040519081016040528092919081815260200182805461049a90611201565b80156104e75780601f106104bc576101008083540402835291602001916104e7565b820191906000526020600020905b8154815290600101906020018083116104ca57829003601f168201915b5050505050905090565b6000806104fc6107bd565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156105c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105b9906110b1565b60405180910390fd5b6105cf82868684036107c5565b60019250505092915050565b6000806105e66107bd565b90506105f3818585610a1c565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61071d828260405160240161069b929190610fc1565b6040516020818303038152906040527f9710a9d0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610c9d565b5050565b6107b98282604051602401610737929190610f91565b6040516020818303038152906040527f319af333000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610c9d565b5050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610835576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082c90611091565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156108a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089c90611011565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161098391906110d1565b60405180910390a3505050565b600061099c84846105fe565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610a165781811015610a08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ff90611031565b60405180910390fd5b610a1584848484036107c5565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8390611071565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610afc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af390610ff1565b60405180910390fd5b610b07838383610cc6565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610b8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8490611051565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610c209190611123565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610c8491906110d1565b60405180910390a3610c97848484610ccb565b50505050565b60008151905060006a636f6e736f6c652e6c6f679050602083016000808483855afa5050505050565b505050565b505050565b600081359050610cdf816114a5565b92915050565b600081359050610cf4816114bc565b92915050565b600060208284031215610d0c57600080fd5b6000610d1a84828501610cd0565b91505092915050565b60008060408385031215610d3657600080fd5b6000610d4485828601610cd0565b9250506020610d5585828601610cd0565b9150509250929050565b600080600060608486031215610d7457600080fd5b6000610d8286828701610cd0565b9350506020610d9386828701610cd0565b9250506040610da486828701610ce5565b9150509250925092565b60008060408385031215610dc157600080fd5b6000610dcf85828601610cd0565b9250506020610de085828601610ce5565b9150509250929050565b610df381611179565b82525050565b610e028161118b565b82525050565b6000610e1382611107565b610e1d8185611112565b9350610e2d8185602086016111ce565b610e3681611291565b840191505092915050565b6000610e4e602383611112565b9150610e59826112a2565b604082019050919050565b6000610e71602283611112565b9150610e7c826112f1565b604082019050919050565b6000610e94601d83611112565b9150610e9f82611340565b602082019050919050565b6000610eb7602683611112565b9150610ec282611369565b604082019050919050565b6000610eda602583611112565b9150610ee5826113b8565b604082019050919050565b6000610efd602483611112565b9150610f0882611407565b604082019050919050565b6000610f20602583611112565b9150610f2b82611456565b604082019050919050565b610f3f816111b7565b82525050565b610f4e816111c1565b82525050565b6000602082019050610f696000830184610df9565b92915050565b60006020820190508181036000830152610f898184610e08565b905092915050565b60006040820190508181036000830152610fab8185610e08565b9050610fba6020830184610dea565b9392505050565b60006040820190508181036000830152610fdb8185610e08565b9050610fea6020830184610f36565b9392505050565b6000602082019050818103600083015261100a81610e41565b9050919050565b6000602082019050818103600083015261102a81610e64565b9050919050565b6000602082019050818103600083015261104a81610e87565b9050919050565b6000602082019050818103600083015261106a81610eaa565b9050919050565b6000602082019050818103600083015261108a81610ecd565b9050919050565b600060208201905081810360008301526110aa81610ef0565b9050919050565b600060208201905081810360008301526110ca81610f13565b9050919050565b60006020820190506110e66000830184610f36565b92915050565b60006020820190506111016000830184610f45565b92915050565b600081519050919050565b600082825260208201905092915050565b600061112e826111b7565b9150611139836111b7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561116e5761116d611233565b5b828201905092915050565b600061118482611197565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b838110156111ec5780820151818401526020810190506111d1565b838111156111fb576000848401525b50505050565b6000600282049050600182168061121957607f821691505b6020821081141561122d5761122c611262565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6114ae81611179565b81146114b957600080fd5b50565b6114c5816111b7565b81146114d057600080fd5b5056fea2646970667358221220d64f0f85ed813ab09f6725f12cc3cfe613bb2b8ca3670dd4fb5067053c4e07f064736f6c63430008040033", 299 | "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461016857806370a082311461019857806395d89b41146101c8578063a457c2d7146101e6578063a9059cbb14610216578063dd62ed3e14610246576100a9565b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100fc57806323b872dd1461011a578063313ce5671461014a575b600080fd5b6100b6610276565b6040516100c39190610f6f565b60405180910390f35b6100e660048036038101906100e19190610dae565b610308565b6040516100f39190610f54565b60405180910390f35b61010461032b565b60405161011191906110d1565b60405180910390f35b610134600480360381019061012f9190610d5f565b610335565b6040516101419190610f54565b60405180910390f35b610152610364565b60405161015f91906110ec565b60405180910390f35b610182600480360381019061017d9190610dae565b61036d565b60405161018f9190610f54565b60405180910390f35b6101b260048036038101906101ad9190610cfa565b610417565b6040516101bf91906110d1565b60405180910390f35b6101d061045f565b6040516101dd9190610f6f565b60405180910390f35b61020060048036038101906101fb9190610dae565b6104f1565b60405161020d9190610f54565b60405180910390f35b610230600480360381019061022b9190610dae565b6105db565b60405161023d9190610f54565b60405180910390f35b610260600480360381019061025b9190610d23565b6105fe565b60405161026d91906110d1565b60405180910390f35b60606003805461028590611201565b80601f01602080910402602001604051908101604052809291908181526020018280546102b190611201565b80156102fe5780601f106102d3576101008083540402835291602001916102fe565b820191906000526020600020905b8154815290600101906020018083116102e157829003601f168201915b5050505050905090565b6000806103136107bd565b90506103208185856107c5565b600191505092915050565b6000600254905090565b6000806103406107bd565b905061034d858285610990565b610358858585610a1c565b60019150509392505050565b60006012905090565b6000806103786107bd565b905061040c818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546104079190611123565b6107c5565b600191505092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60606004805461046e90611201565b80601f016020809104026020016040519081016040528092919081815260200182805461049a90611201565b80156104e75780601f106104bc576101008083540402835291602001916104e7565b820191906000526020600020905b8154815290600101906020018083116104ca57829003601f168201915b5050505050905090565b6000806104fc6107bd565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156105c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105b9906110b1565b60405180910390fd5b6105cf82868684036107c5565b60019250505092915050565b6000806105e66107bd565b90506105f3818585610a1c565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61071d828260405160240161069b929190610fc1565b6040516020818303038152906040527f9710a9d0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610c9d565b5050565b6107b98282604051602401610737929190610f91565b6040516020818303038152906040527f319af333000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610c9d565b5050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610835576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082c90611091565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156108a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089c90611011565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161098391906110d1565b60405180910390a3505050565b600061099c84846105fe565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610a165781811015610a08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ff90611031565b60405180910390fd5b610a1584848484036107c5565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8390611071565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610afc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af390610ff1565b60405180910390fd5b610b07838383610cc6565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610b8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8490611051565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610c209190611123565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610c8491906110d1565b60405180910390a3610c97848484610ccb565b50505050565b60008151905060006a636f6e736f6c652e6c6f679050602083016000808483855afa5050505050565b505050565b505050565b600081359050610cdf816114a5565b92915050565b600081359050610cf4816114bc565b92915050565b600060208284031215610d0c57600080fd5b6000610d1a84828501610cd0565b91505092915050565b60008060408385031215610d3657600080fd5b6000610d4485828601610cd0565b9250506020610d5585828601610cd0565b9150509250929050565b600080600060608486031215610d7457600080fd5b6000610d8286828701610cd0565b9350506020610d9386828701610cd0565b9250506040610da486828701610ce5565b9150509250925092565b60008060408385031215610dc157600080fd5b6000610dcf85828601610cd0565b9250506020610de085828601610ce5565b9150509250929050565b610df381611179565b82525050565b610e028161118b565b82525050565b6000610e1382611107565b610e1d8185611112565b9350610e2d8185602086016111ce565b610e3681611291565b840191505092915050565b6000610e4e602383611112565b9150610e59826112a2565b604082019050919050565b6000610e71602283611112565b9150610e7c826112f1565b604082019050919050565b6000610e94601d83611112565b9150610e9f82611340565b602082019050919050565b6000610eb7602683611112565b9150610ec282611369565b604082019050919050565b6000610eda602583611112565b9150610ee5826113b8565b604082019050919050565b6000610efd602483611112565b9150610f0882611407565b604082019050919050565b6000610f20602583611112565b9150610f2b82611456565b604082019050919050565b610f3f816111b7565b82525050565b610f4e816111c1565b82525050565b6000602082019050610f696000830184610df9565b92915050565b60006020820190508181036000830152610f898184610e08565b905092915050565b60006040820190508181036000830152610fab8185610e08565b9050610fba6020830184610dea565b9392505050565b60006040820190508181036000830152610fdb8185610e08565b9050610fea6020830184610f36565b9392505050565b6000602082019050818103600083015261100a81610e41565b9050919050565b6000602082019050818103600083015261102a81610e64565b9050919050565b6000602082019050818103600083015261104a81610e87565b9050919050565b6000602082019050818103600083015261106a81610eaa565b9050919050565b6000602082019050818103600083015261108a81610ecd565b9050919050565b600060208201905081810360008301526110aa81610ef0565b9050919050565b600060208201905081810360008301526110ca81610f13565b9050919050565b60006020820190506110e66000830184610f36565b92915050565b60006020820190506111016000830184610f45565b92915050565b600081519050919050565b600082825260208201905092915050565b600061112e826111b7565b9150611139836111b7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561116e5761116d611233565b5b828201905092915050565b600061118482611197565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b838110156111ec5780820151818401526020810190506111d1565b838111156111fb576000848401525b50505050565b6000600282049050600182168061121957607f821691505b6020821081141561122d5761122c611262565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6114ae81611179565b81146114b957600080fd5b50565b6114c5816111b7565b81146114d057600080fd5b5056fea2646970667358221220d64f0f85ed813ab09f6725f12cc3cfe613bb2b8ca3670dd4fb5067053c4e07f064736f6c63430008040033", 300 | "linkReferences": {}, 301 | "deployedLinkReferences": {} 302 | } 303 | --------------------------------------------------------------------------------