├── Article.md
├── web
├── src
│ ├── css
│ │ └── index.css
│ ├── assets
│ │ ├── logo.png
│ │ └── chainstack-white.svg
│ ├── 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
├── vite.config.ts
├── index.html
├── tsconfig.json
└── package.json
├── backend
├── .gitignore
├── package.json
├── contracts
│ └── QChainstackDollars.sol
├── event-watcher.js
├── contract-methods.js
├── ChainstackDollars.json
└── DChainstackDollars.json
├── .gitignore
├── solidity
├── .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
└── README.md
/Article.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/web/src/css/index.css:
--------------------------------------------------------------------------------
1 | @tailwind base;
2 | @tailwind components;
3 | @tailwind utilities;
4 |
--------------------------------------------------------------------------------
/web/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/alinkon0207/eth_bridge/HEAD/web/public/favicon.ico
--------------------------------------------------------------------------------
/backend/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | .DS_Store
3 | dist
4 | dist-ssr
5 | *.local
6 | .vscode
7 | .env
8 |
--------------------------------------------------------------------------------
/web/src/assets/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/alinkon0207/eth_bridge/HEAD/web/src/assets/logo.png
--------------------------------------------------------------------------------
/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/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/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/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 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/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/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 an receiver params for transfer
68 | data,
69 | // TO TEST!!!
70 | gas: 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 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/backend/DChainstackDollars.json:
--------------------------------------------------------------------------------
1 | {
2 | "_format": "hh-sol-artifact-1",
3 | "contractName": "DChainstackDollars",
4 | "sourceName": "contracts/DestinationToken.sol",
5 | "abi": [
6 | {
7 | "inputs": [
8 | {
9 | "internalType": "address",
10 | "name": "_bridge",
11 | "type": "address"
12 | }
13 | ],
14 | "stateMutability": "nonpayable",
15 | "type": "constructor"
16 | },
17 | {
18 | "anonymous": false,
19 | "inputs": [
20 | {
21 | "indexed": true,
22 | "internalType": "address",
23 | "name": "owner",
24 | "type": "address"
25 | },
26 | {
27 | "indexed": true,
28 | "internalType": "address",
29 | "name": "spender",
30 | "type": "address"
31 | },
32 | {
33 | "indexed": false,
34 | "internalType": "uint256",
35 | "name": "value",
36 | "type": "uint256"
37 | }
38 | ],
39 | "name": "Approval",
40 | "type": "event"
41 | },
42 | {
43 | "anonymous": false,
44 | "inputs": [
45 | {
46 | "indexed": false,
47 | "internalType": "address",
48 | "name": "from",
49 | "type": "address"
50 | },
51 | {
52 | "indexed": false,
53 | "internalType": "uint256",
54 | "name": "amount",
55 | "type": "uint256"
56 | }
57 | ],
58 | "name": "TokensMinted",
59 | "type": "event"
60 | },
61 | {
62 | "anonymous": false,
63 | "inputs": [
64 | {
65 | "indexed": true,
66 | "internalType": "address",
67 | "name": "from",
68 | "type": "address"
69 | },
70 | {
71 | "indexed": true,
72 | "internalType": "address",
73 | "name": "to",
74 | "type": "address"
75 | },
76 | {
77 | "indexed": false,
78 | "internalType": "uint256",
79 | "name": "value",
80 | "type": "uint256"
81 | }
82 | ],
83 | "name": "Transfer",
84 | "type": "event"
85 | },
86 | {
87 | "inputs": [
88 | {
89 | "internalType": "address",
90 | "name": "owner",
91 | "type": "address"
92 | },
93 | {
94 | "internalType": "address",
95 | "name": "spender",
96 | "type": "address"
97 | }
98 | ],
99 | "name": "allowance",
100 | "outputs": [
101 | {
102 | "internalType": "uint256",
103 | "name": "",
104 | "type": "uint256"
105 | }
106 | ],
107 | "stateMutability": "view",
108 | "type": "function"
109 | },
110 | {
111 | "inputs": [
112 | {
113 | "internalType": "address",
114 | "name": "spender",
115 | "type": "address"
116 | },
117 | {
118 | "internalType": "uint256",
119 | "name": "amount",
120 | "type": "uint256"
121 | }
122 | ],
123 | "name": "approve",
124 | "outputs": [
125 | {
126 | "internalType": "bool",
127 | "name": "",
128 | "type": "bool"
129 | }
130 | ],
131 | "stateMutability": "nonpayable",
132 | "type": "function"
133 | },
134 | {
135 | "inputs": [
136 | {
137 | "internalType": "address",
138 | "name": "account",
139 | "type": "address"
140 | }
141 | ],
142 | "name": "balanceOf",
143 | "outputs": [
144 | {
145 | "internalType": "uint256",
146 | "name": "",
147 | "type": "uint256"
148 | }
149 | ],
150 | "stateMutability": "view",
151 | "type": "function"
152 | },
153 | {
154 | "inputs": [
155 | {
156 | "internalType": "uint256",
157 | "name": "amount",
158 | "type": "uint256"
159 | }
160 | ],
161 | "name": "burn",
162 | "outputs": [],
163 | "stateMutability": "nonpayable",
164 | "type": "function"
165 | },
166 | {
167 | "inputs": [
168 | {
169 | "internalType": "address",
170 | "name": "_account",
171 | "type": "address"
172 | },
173 | {
174 | "internalType": "uint256",
175 | "name": "_amount",
176 | "type": "uint256"
177 | }
178 | ],
179 | "name": "burnFrom",
180 | "outputs": [],
181 | "stateMutability": "nonpayable",
182 | "type": "function"
183 | },
184 | {
185 | "inputs": [],
186 | "name": "decimals",
187 | "outputs": [
188 | {
189 | "internalType": "uint8",
190 | "name": "",
191 | "type": "uint8"
192 | }
193 | ],
194 | "stateMutability": "view",
195 | "type": "function"
196 | },
197 | {
198 | "inputs": [
199 | {
200 | "internalType": "address",
201 | "name": "spender",
202 | "type": "address"
203 | },
204 | {
205 | "internalType": "uint256",
206 | "name": "subtractedValue",
207 | "type": "uint256"
208 | }
209 | ],
210 | "name": "decreaseAllowance",
211 | "outputs": [
212 | {
213 | "internalType": "bool",
214 | "name": "",
215 | "type": "bool"
216 | }
217 | ],
218 | "stateMutability": "nonpayable",
219 | "type": "function"
220 | },
221 | {
222 | "inputs": [
223 | {
224 | "internalType": "address",
225 | "name": "spender",
226 | "type": "address"
227 | },
228 | {
229 | "internalType": "uint256",
230 | "name": "addedValue",
231 | "type": "uint256"
232 | }
233 | ],
234 | "name": "increaseAllowance",
235 | "outputs": [
236 | {
237 | "internalType": "bool",
238 | "name": "",
239 | "type": "bool"
240 | }
241 | ],
242 | "stateMutability": "nonpayable",
243 | "type": "function"
244 | },
245 | {
246 | "inputs": [
247 | {
248 | "internalType": "address",
249 | "name": "_recipient",
250 | "type": "address"
251 | },
252 | {
253 | "internalType": "uint256",
254 | "name": "_amount",
255 | "type": "uint256"
256 | }
257 | ],
258 | "name": "mint",
259 | "outputs": [],
260 | "stateMutability": "nonpayable",
261 | "type": "function"
262 | },
263 | {
264 | "inputs": [],
265 | "name": "name",
266 | "outputs": [
267 | {
268 | "internalType": "string",
269 | "name": "",
270 | "type": "string"
271 | }
272 | ],
273 | "stateMutability": "view",
274 | "type": "function"
275 | },
276 | {
277 | "inputs": [],
278 | "name": "symbol",
279 | "outputs": [
280 | {
281 | "internalType": "string",
282 | "name": "",
283 | "type": "string"
284 | }
285 | ],
286 | "stateMutability": "view",
287 | "type": "function"
288 | },
289 | {
290 | "inputs": [],
291 | "name": "totalSupply",
292 | "outputs": [
293 | {
294 | "internalType": "uint256",
295 | "name": "",
296 | "type": "uint256"
297 | }
298 | ],
299 | "stateMutability": "view",
300 | "type": "function"
301 | },
302 | {
303 | "inputs": [
304 | {
305 | "internalType": "address",
306 | "name": "to",
307 | "type": "address"
308 | },
309 | {
310 | "internalType": "uint256",
311 | "name": "amount",
312 | "type": "uint256"
313 | }
314 | ],
315 | "name": "transfer",
316 | "outputs": [
317 | {
318 | "internalType": "bool",
319 | "name": "",
320 | "type": "bool"
321 | }
322 | ],
323 | "stateMutability": "nonpayable",
324 | "type": "function"
325 | },
326 | {
327 | "inputs": [
328 | {
329 | "internalType": "address",
330 | "name": "from",
331 | "type": "address"
332 | },
333 | {
334 | "internalType": "address",
335 | "name": "to",
336 | "type": "address"
337 | },
338 | {
339 | "internalType": "uint256",
340 | "name": "amount",
341 | "type": "uint256"
342 | }
343 | ],
344 | "name": "transferFrom",
345 | "outputs": [
346 | {
347 | "internalType": "bool",
348 | "name": "",
349 | "type": "bool"
350 | }
351 | ],
352 | "stateMutability": "nonpayable",
353 | "type": "function"
354 | }
355 | ],
356 | "bytecode": "0x60806040523480156200001157600080fd5b50604051620021b1380380620021b1833981810160405281019062000037919062000301565b6040518060400160405280601281526020017f44436861696e737461636b446f6c6c61727300000000000000000000000000008152506040518060400160405280600681526020017f442d4348534400000000000000000000000000000000000000000000000000008152508160039080519060200190620000bb9291906200023a565b508060049080519060200190620000d49291906200023a565b50505080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620001646040518060400160405280601881526020017f42726964676520616464726573732073657420746f2025730000000000000000815250826200016b60201b620009211760201c565b50620004c9565b6200020d8282604051602401620001849291906200037f565b6040516020818303038152906040527f319af333000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506200021160201b60201c565b5050565b60008151905060006a636f6e736f6c652e6c6f679050602083016000808483855afa5050505050565b828054620002489062000439565b90600052602060002090601f0160209004810192826200026c5760008555620002b8565b82601f106200028757805160ff1916838001178555620002b8565b82800160010185558215620002b8579182015b82811115620002b75782518255916020019190600101906200029a565b5b509050620002c79190620002cb565b5090565b5b80821115620002e6576000816000905550600101620002cc565b5090565b600081519050620002fb81620004af565b92915050565b6000602082840312156200031457600080fd5b60006200032484828501620002ea565b91505092915050565b6200033881620003cf565b82525050565b60006200034b82620003b3565b620003578185620003be565b93506200036981856020860162000403565b62000374816200049e565b840191505092915050565b600060408201905081810360008301526200039b81856200033e565b9050620003ac60208301846200032d565b9392505050565b600081519050919050565b600082825260208201905092915050565b6000620003dc82620003e3565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60005b838110156200042357808201518184015260208101905062000406565b8381111562000433576000848401525b50505050565b600060028204905060018216806200045257607f821691505b602082108114156200046957620004686200046f565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b620004ba81620003cf565b8114620004c657600080fd5b50565b611cd880620004d96000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c806342966c681161008c57806395d89b411161006657806395d89b411461025d578063a457c2d71461027b578063a9059cbb146102ab578063dd62ed3e146102db576100ea565b806342966c68146101f557806370a082311461021157806379cc679014610241576100ea565b806323b872dd116100c857806323b872dd1461015b578063313ce5671461018b57806339509351146101a957806340c10f19146101d9576100ea565b806306fdde03146100ef578063095ea7b31461010d57806318160ddd1461013d575b600080fd5b6100f761030b565b60405161010491906115a4565b60405180910390f35b61012760048036038101906101229190611305565b61039d565b6040516101349190611589565b60405180910390f35b6101456103c0565b6040516101529190611756565b60405180910390f35b610175600480360381019061017091906112b6565b6103ca565b6040516101829190611589565b60405180910390f35b6101936103f9565b6040516101a09190611771565b60405180910390f35b6101c360048036038101906101be9190611305565b610402565b6040516101d09190611589565b60405180910390f35b6101f360048036038101906101ee9190611305565b6104ac565b005b61020f600480360381019061020a9190611341565b6105c2565b005b61022b60048036038101906102269190611251565b6105d6565b6040516102389190611756565b60405180910390f35b61025b60048036038101906102569190611305565b61061e565b005b6102656106fb565b60405161027291906115a4565b60405180910390f35b61029560048036038101906102909190611305565b61078d565b6040516102a29190611589565b60405180910390f35b6102c560048036038101906102c09190611305565b610877565b6040516102d29190611589565b60405180910390f35b6102f560048036038101906102f0919061127a565b61089a565b6040516103029190611756565b60405180910390f35b60606003805461031a906118ba565b80601f0160208091040260200160405190810160405280929190818152602001828054610346906118ba565b80156103935780601f1061036857610100808354040283529160200191610393565b820191906000526020600020905b81548152906001019060200180831161037657829003601f168201915b5050505050905090565b6000806103a86109bd565b90506103b58185856109c5565b600191505092915050565b6000600254905090565b6000806103d56109bd565b90506103e2858285610b90565b6103ed858585610c1c565b60019150509392505050565b60006012905090565b60008061040d6109bd565b90506104a1818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461049c91906117a8565b6109c5565b600191505092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461053c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610533906116f6565b60405180910390fd5b7f3f2c9d57c068687834f0de942a9babb9e5acab57d516d3480a3c16ee165a4273828260405161056d929190611560565b60405180910390a161057f8282610e9d565b6105be6040518060400160405280601481526020017f546f6b656e73206d696e74656420666f7220257300000000000000000000000081525083610921565b5050565b6105d36105cd6109bd565b82610ffd565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b3373ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146106ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a5906116f6565b60405180910390fd5b6106b882826111d4565b6106f76040518060400160405280601581526020017f546f6b656e73206275726e65642066726f6d202573000000000000000000000081525083610921565b5050565b60606004805461070a906118ba565b80601f0160208091040260200160405190810160405280929190818152602001828054610736906118ba565b80156107835780601f1061075857610100808354040283529160200191610783565b820191906000526020600020905b81548152906001019060200180831161076657829003601f168201915b5050505050905090565b6000806107986109bd565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508381101561085e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085590611716565b60405180910390fd5b61086b82868684036109c5565b60019250505092915050565b6000806108826109bd565b905061088f818585610c1c565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6109b982826040516024016109379291906115c6565b6040516020818303038152906040527f319af333000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506111f4565b5050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2c906116d6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610aa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9c90611636565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610b839190611756565b60405180910390a3505050565b6000610b9c848461089a565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610c165781811015610c08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bff90611656565b60405180910390fd5b610c1584848484036109c5565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c83906116b6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610cfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf3906115f6565b60405180910390fd5b610d0783838361121d565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610d8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8490611676565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610e2091906117a8565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e849190611756565b60405180910390a3610e97848484611222565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0490611736565b60405180910390fd5b610f196000838361121d565b8060026000828254610f2b91906117a8565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610f8091906117a8565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610fe59190611756565b60405180910390a3610ff960008383611222565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561106d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106490611696565b60405180910390fd5b6110798260008361121d565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156110ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f690611616565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816002600082825461115691906117fe565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516111bb9190611756565b60405180910390a36111cf83600084611222565b505050565b6111e6826111e06109bd565b83610b90565b6111f08282610ffd565b5050565b60008151905060006a636f6e736f6c652e6c6f679050602083016000808483855afa5050505050565b505050565b505050565b60008135905061123681611c74565b92915050565b60008135905061124b81611c8b565b92915050565b60006020828403121561126357600080fd5b600061127184828501611227565b91505092915050565b6000806040838503121561128d57600080fd5b600061129b85828601611227565b92505060206112ac85828601611227565b9150509250929050565b6000806000606084860312156112cb57600080fd5b60006112d986828701611227565b93505060206112ea86828701611227565b92505060406112fb8682870161123c565b9150509250925092565b6000806040838503121561131857600080fd5b600061132685828601611227565b92505060206113378582860161123c565b9150509250929050565b60006020828403121561135357600080fd5b60006113618482850161123c565b91505092915050565b61137381611832565b82525050565b61138281611844565b82525050565b60006113938261178c565b61139d8185611797565b93506113ad818560208601611887565b6113b68161194a565b840191505092915050565b60006113ce602383611797565b91506113d98261195b565b604082019050919050565b60006113f1602283611797565b91506113fc826119aa565b604082019050919050565b6000611414602283611797565b915061141f826119f9565b604082019050919050565b6000611437601d83611797565b915061144282611a48565b602082019050919050565b600061145a602683611797565b915061146582611a71565b604082019050919050565b600061147d602183611797565b915061148882611ac0565b604082019050919050565b60006114a0602583611797565b91506114ab82611b0f565b604082019050919050565b60006114c3602483611797565b91506114ce82611b5e565b604082019050919050565b60006114e6603c83611797565b91506114f182611bad565b604082019050919050565b6000611509602583611797565b915061151482611bfc565b604082019050919050565b600061152c601f83611797565b915061153782611c4b565b602082019050919050565b61154b81611870565b82525050565b61155a8161187a565b82525050565b6000604082019050611575600083018561136a565b6115826020830184611542565b9392505050565b600060208201905061159e6000830184611379565b92915050565b600060208201905081810360008301526115be8184611388565b905092915050565b600060408201905081810360008301526115e08185611388565b90506115ef602083018461136a565b9392505050565b6000602082019050818103600083015261160f816113c1565b9050919050565b6000602082019050818103600083015261162f816113e4565b9050919050565b6000602082019050818103600083015261164f81611407565b9050919050565b6000602082019050818103600083015261166f8161142a565b9050919050565b6000602082019050818103600083015261168f8161144d565b9050919050565b600060208201905081810360008301526116af81611470565b9050919050565b600060208201905081810360008301526116cf81611493565b9050919050565b600060208201905081810360008301526116ef816114b6565b9050919050565b6000602082019050818103600083015261170f816114d9565b9050919050565b6000602082019050818103600083015261172f816114fc565b9050919050565b6000602082019050818103600083015261174f8161151f565b9050919050565b600060208201905061176b6000830184611542565b92915050565b60006020820190506117866000830184611551565b92915050565b600081519050919050565b600082825260208201905092915050565b60006117b382611870565b91506117be83611870565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156117f3576117f26118ec565b5b828201905092915050565b600061180982611870565b915061181483611870565b925082821015611827576118266118ec565b5b828203905092915050565b600061183d82611850565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b838110156118a557808201518184015260208101905061188a565b838111156118b4576000848401525b50505050565b600060028204905060018216806118d257607f821691505b602082108114156118e6576118e561191b565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f44436861696e737461636b446f6c6c6172733a206f6e6c79207468652062726960008201527f6467652063616e20747269676765722074686973206d6574686f642100000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b611c7d81611832565b8114611c8857600080fd5b50565b611c9481611870565b8114611c9f57600080fd5b5056fea2646970667358221220d3bd3b5deb77b8946daae572d79bbaeef48b3d3e7e8f714ccaf697ffc04523e664736f6c63430008040033",
357 | "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c806342966c681161008c57806395d89b411161006657806395d89b411461025d578063a457c2d71461027b578063a9059cbb146102ab578063dd62ed3e146102db576100ea565b806342966c68146101f557806370a082311461021157806379cc679014610241576100ea565b806323b872dd116100c857806323b872dd1461015b578063313ce5671461018b57806339509351146101a957806340c10f19146101d9576100ea565b806306fdde03146100ef578063095ea7b31461010d57806318160ddd1461013d575b600080fd5b6100f761030b565b60405161010491906115a4565b60405180910390f35b61012760048036038101906101229190611305565b61039d565b6040516101349190611589565b60405180910390f35b6101456103c0565b6040516101529190611756565b60405180910390f35b610175600480360381019061017091906112b6565b6103ca565b6040516101829190611589565b60405180910390f35b6101936103f9565b6040516101a09190611771565b60405180910390f35b6101c360048036038101906101be9190611305565b610402565b6040516101d09190611589565b60405180910390f35b6101f360048036038101906101ee9190611305565b6104ac565b005b61020f600480360381019061020a9190611341565b6105c2565b005b61022b60048036038101906102269190611251565b6105d6565b6040516102389190611756565b60405180910390f35b61025b60048036038101906102569190611305565b61061e565b005b6102656106fb565b60405161027291906115a4565b60405180910390f35b61029560048036038101906102909190611305565b61078d565b6040516102a29190611589565b60405180910390f35b6102c560048036038101906102c09190611305565b610877565b6040516102d29190611589565b60405180910390f35b6102f560048036038101906102f0919061127a565b61089a565b6040516103029190611756565b60405180910390f35b60606003805461031a906118ba565b80601f0160208091040260200160405190810160405280929190818152602001828054610346906118ba565b80156103935780601f1061036857610100808354040283529160200191610393565b820191906000526020600020905b81548152906001019060200180831161037657829003601f168201915b5050505050905090565b6000806103a86109bd565b90506103b58185856109c5565b600191505092915050565b6000600254905090565b6000806103d56109bd565b90506103e2858285610b90565b6103ed858585610c1c565b60019150509392505050565b60006012905090565b60008061040d6109bd565b90506104a1818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461049c91906117a8565b6109c5565b600191505092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461053c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610533906116f6565b60405180910390fd5b7f3f2c9d57c068687834f0de942a9babb9e5acab57d516d3480a3c16ee165a4273828260405161056d929190611560565b60405180910390a161057f8282610e9d565b6105be6040518060400160405280601481526020017f546f6b656e73206d696e74656420666f7220257300000000000000000000000081525083610921565b5050565b6105d36105cd6109bd565b82610ffd565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b3373ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146106ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a5906116f6565b60405180910390fd5b6106b882826111d4565b6106f76040518060400160405280601581526020017f546f6b656e73206275726e65642066726f6d202573000000000000000000000081525083610921565b5050565b60606004805461070a906118ba565b80601f0160208091040260200160405190810160405280929190818152602001828054610736906118ba565b80156107835780601f1061075857610100808354040283529160200191610783565b820191906000526020600020905b81548152906001019060200180831161076657829003601f168201915b5050505050905090565b6000806107986109bd565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508381101561085e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085590611716565b60405180910390fd5b61086b82868684036109c5565b60019250505092915050565b6000806108826109bd565b905061088f818585610c1c565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6109b982826040516024016109379291906115c6565b6040516020818303038152906040527f319af333000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506111f4565b5050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2c906116d6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610aa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9c90611636565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610b839190611756565b60405180910390a3505050565b6000610b9c848461089a565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610c165781811015610c08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bff90611656565b60405180910390fd5b610c1584848484036109c5565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c83906116b6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610cfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf3906115f6565b60405180910390fd5b610d0783838361121d565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610d8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8490611676565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610e2091906117a8565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e849190611756565b60405180910390a3610e97848484611222565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0490611736565b60405180910390fd5b610f196000838361121d565b8060026000828254610f2b91906117a8565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610f8091906117a8565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610fe59190611756565b60405180910390a3610ff960008383611222565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561106d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106490611696565b60405180910390fd5b6110798260008361121d565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156110ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f690611616565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816002600082825461115691906117fe565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516111bb9190611756565b60405180910390a36111cf83600084611222565b505050565b6111e6826111e06109bd565b83610b90565b6111f08282610ffd565b5050565b60008151905060006a636f6e736f6c652e6c6f679050602083016000808483855afa5050505050565b505050565b505050565b60008135905061123681611c74565b92915050565b60008135905061124b81611c8b565b92915050565b60006020828403121561126357600080fd5b600061127184828501611227565b91505092915050565b6000806040838503121561128d57600080fd5b600061129b85828601611227565b92505060206112ac85828601611227565b9150509250929050565b6000806000606084860312156112cb57600080fd5b60006112d986828701611227565b93505060206112ea86828701611227565b92505060406112fb8682870161123c565b9150509250925092565b6000806040838503121561131857600080fd5b600061132685828601611227565b92505060206113378582860161123c565b9150509250929050565b60006020828403121561135357600080fd5b60006113618482850161123c565b91505092915050565b61137381611832565b82525050565b61138281611844565b82525050565b60006113938261178c565b61139d8185611797565b93506113ad818560208601611887565b6113b68161194a565b840191505092915050565b60006113ce602383611797565b91506113d98261195b565b604082019050919050565b60006113f1602283611797565b91506113fc826119aa565b604082019050919050565b6000611414602283611797565b915061141f826119f9565b604082019050919050565b6000611437601d83611797565b915061144282611a48565b602082019050919050565b600061145a602683611797565b915061146582611a71565b604082019050919050565b600061147d602183611797565b915061148882611ac0565b604082019050919050565b60006114a0602583611797565b91506114ab82611b0f565b604082019050919050565b60006114c3602483611797565b91506114ce82611b5e565b604082019050919050565b60006114e6603c83611797565b91506114f182611bad565b604082019050919050565b6000611509602583611797565b915061151482611bfc565b604082019050919050565b600061152c601f83611797565b915061153782611c4b565b602082019050919050565b61154b81611870565b82525050565b61155a8161187a565b82525050565b6000604082019050611575600083018561136a565b6115826020830184611542565b9392505050565b600060208201905061159e6000830184611379565b92915050565b600060208201905081810360008301526115be8184611388565b905092915050565b600060408201905081810360008301526115e08185611388565b90506115ef602083018461136a565b9392505050565b6000602082019050818103600083015261160f816113c1565b9050919050565b6000602082019050818103600083015261162f816113e4565b9050919050565b6000602082019050818103600083015261164f81611407565b9050919050565b6000602082019050818103600083015261166f8161142a565b9050919050565b6000602082019050818103600083015261168f8161144d565b9050919050565b600060208201905081810360008301526116af81611470565b9050919050565b600060208201905081810360008301526116cf81611493565b9050919050565b600060208201905081810360008301526116ef816114b6565b9050919050565b6000602082019050818103600083015261170f816114d9565b9050919050565b6000602082019050818103600083015261172f816114fc565b9050919050565b6000602082019050818103600083015261174f8161151f565b9050919050565b600060208201905061176b6000830184611542565b92915050565b60006020820190506117866000830184611551565b92915050565b600081519050919050565b600082825260208201905092915050565b60006117b382611870565b91506117be83611870565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156117f3576117f26118ec565b5b828201905092915050565b600061180982611870565b915061181483611870565b925082821015611827576118266118ec565b5b828203905092915050565b600061183d82611850565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b838110156118a557808201518184015260208101905061188a565b838111156118b4576000848401525b50505050565b600060028204905060018216806118d257607f821691505b602082108114156118e6576118e561191b565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f44436861696e737461636b446f6c6c6172733a206f6e6c79207468652062726960008201527f6467652063616e20747269676765722074686973206d6574686f642100000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b611c7d81611832565b8114611c8857600080fd5b50565b611c9481611870565b8114611c9f57600080fd5b5056fea2646970667358221220d3bd3b5deb77b8946daae572d79bbaeef48b3d3e7e8f714ccaf697ffc04523e664736f6c63430008040033",
358 | "linkReferences": {},
359 | "deployedLinkReferences": {}
360 | }
361 |
--------------------------------------------------------------------------------