├── 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 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
35 |
--------------------------------------------------------------------------------
/web/src/components/Nav.vue:
--------------------------------------------------------------------------------
1 |
2 |
5 | Bridge to Destination Chain
16 |
17 | Send token back to Original Chain
28 |
29 |
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 |
2 |
3 |
4 | Bridge from {{originNetwork}} to {{destinationNetwork}}
5 |
6 |
7 |
8 | This bridge allows you to send ChainstackDollars (D-CHSD) from {{originNetwork}} to {{destinationNetwork}}
9 |
10 |
11 |
18 |
19 |
72 |
76 | Tokens sent to {{ destinationNetwork }}
77 |
78 |
79 |
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 |
2 |
3 |
4 | Bridge from {{destinationNetwork}} to {{originNetwork}}
5 |
6 |
7 |
8 | This bridge allows you to send ChainstackDollars (D-CHSD) from {{destinationNetwork}} back to {{originNetwork}}
9 |
10 |
11 |
19 |
20 |
71 |
72 |
73 |
74 |
200 |
--------------------------------------------------------------------------------
/web/src/components/Navbar.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
74 |
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 |
--------------------------------------------------------------------------------