From fe8d32940e7ab97ef37d13088b17518814fb8e2d Mon Sep 17 00:00:00 2001 From: Chandu J S Date: Wed, 21 Mar 2018 18:26:42 +0530 Subject: [PATCH 001/180] radar image changed --- src/images/radar.png | Bin 123925 -> 97695 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/images/radar.png b/src/images/radar.png index 87cc9483f114a34ebffb86eee072eba8caa000c8..d5a299f371bab1bec7f57960186265571f552269 100644 GIT binary patch literal 97695 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

>z|9&#_ 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

Y^WU*-MxR`$F`L$k=tgbut96 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®g1HKfFXOY6Ai&WcqJf;%r)4T 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­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

y2qdg3X&1e^@xsjdL1ei8MZ8(ALl;W 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 Date: Wed, 21 Mar 2018 15:26:27 +0100 Subject: [PATCH 002/180] updated drone icon --- src/images/icon_drone.png | Bin 3762 -> 5852 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/images/icon_drone.png b/src/images/icon_drone.png index 4948d8e320e338a731291d9a490d5b2c0e3b99e5..5d645ed20132d961e5c33433ab370a55678a7eff 100644 GIT binary patch literal 5852 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≥%q@uxzXfh)Hx zlYCa{<22q~;q~%9dQgBmWS{0TGsTbCgTBK}wvr;ZrW{&oS}^?eaj%5d&0S z*>Oh@--vX4eoN*c>WP#|G9*@5>p3lXM3keY*b+@>DMFDG|I|L^8b=b9?SDTbX%cbt zKgQD*7Ii{YSE+P&4XFU~f%2BP7big_h)_S5^MR0)ByDw2MHf#haDHqbXQGVGu<1T8x9$MWj7B?W}6^QP Date: Wed, 21 Mar 2018 09:10:15 -0600 Subject: [PATCH 003/180] Issue 111 change background-color of .big-button to #FF6A46(red)in common.css --- src/common.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/common.css b/src/common.css index f4bd513..58e04d2 100644 --- a/src/common.css +++ b/src/common.css @@ -111,7 +111,7 @@ h1 { color: #fff; font-weight: 700; font-size: 17px; - background-color: #2BCA81; + background-color: #FF6A46; padding: 20px 20px; } From 6c46cfec1800cfc41abd267039c4d28bf84406bc Mon Sep 17 00:00:00 2001 From: cg-cnu Date: Wed, 21 Mar 2018 22:37:57 +0530 Subject: [PATCH 004/180] updated radar image --- src/images/radar.png | Bin 97695 -> 93208 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/images/radar.png b/src/images/radar.png index d5a299f371bab1bec7f57960186265571f552269..833cf33934bbf4f7ae823244458e0b81de1a7e90 100644 GIT binary patch literal 93208 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%0A=^m=fKs7v^UsT+sgQ`DfyviJ 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ß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 literal 97695 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

>z|9&#_ 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 W$Cq(Pv$0|T0000 Date: Wed, 21 Mar 2018 22:32:36 +0100 Subject: [PATCH 005/180] update size_letter icon in missions (first-timers-only) #122 --- src/images/size_letter.svg | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/images/size_letter.svg b/src/images/size_letter.svg index b600d42..4ac23d4 100644 --- a/src/images/size_letter.svg +++ b/src/images/size_letter.svg @@ -1,17 +1,17 @@ - + mail Created with Sketch. - - + + - + - - + + From 052bd776204677da67c08baedc1339ac17301446 Mon Sep 17 00:00:00 2001 From: Josh Berry Date: Wed, 21 Mar 2018 13:51:56 -0800 Subject: [PATCH 006/180] updating size_pizza icon #120 swapped out sag code for pizza icon coloring. --- src/images/size_pizza.svg | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/images/size_pizza.svg b/src/images/size_pizza.svg index f1b899e..9b355b9 100644 --- a/src/images/size_pizza.svg +++ b/src/images/size_pizza.svg @@ -1,22 +1,22 @@ - + pizza Created with Sketch. - - - - - - - - - - - - + + + + + + + + + + + + From 9c513b593647e7db79b79f5d2518b60cd9070311 Mon Sep 17 00:00:00 2001 From: Bennet11 Date: Wed, 21 Mar 2018 17:04:18 -0700 Subject: [PATCH 007/180] update size_can icon from blue to red #119 --- src/images/size_can.svg | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/images/size_can.svg b/src/images/size_can.svg index abbd6b1..ea32f36 100644 --- a/src/images/size_can.svg +++ b/src/images/size_can.svg @@ -1,16 +1,16 @@ - + soda Created with Sketch. - - + + - - + + From 8220fd5e315bc2874cee0cb6bd8bb45f841bf560 Mon Sep 17 00:00:00 2001 From: kwin555 Date: Thu, 22 Mar 2018 09:30:01 -0500 Subject: [PATCH 008/180] update size box icon --- src/images/size_box.svg | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/images/size_box.svg b/src/images/size_box.svg index 1093f1a..fed5e18 100644 --- a/src/images/size_box.svg +++ b/src/images/size_box.svg @@ -1,6 +1,6 @@ - + box Created with Sketch. @@ -9,12 +9,12 @@ - + - + - + From 31e2d3940fa745ae3b15aae26aade6cfef1e8720 Mon Sep 17 00:00:00 2001 From: Justin McLaren Date: Fri, 23 Mar 2018 09:30:17 -0700 Subject: [PATCH 009/180] updated src/images/arrow-left.svg --- src/images/arrow-left.svg | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/images/arrow-left.svg b/src/images/arrow-left.svg index d611f98..e7623a4 100644 --- a/src/images/arrow-left.svg +++ b/src/images/arrow-left.svg @@ -1,12 +1,12 @@ - + arrow-left Created with Sketch. - - + + From eea43357909be06972d7e513f8d0f9b17def47cd Mon Sep 17 00:00:00 2001 From: Hank Chan Date: Fri, 23 Mar 2018 16:41:21 -0700 Subject: [PATCH 010/180] Update color of selected svgs --- src/components/IconSelector.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/IconSelector.css b/src/components/IconSelector.css index 361744d..f11fcfd 100644 --- a/src/components/IconSelector.css +++ b/src/components/IconSelector.css @@ -20,7 +20,7 @@ .selected { transition: background-color 0.3s ease; - background-color: rgba(116, 67, 250, 1); + background-color: #FF6A46; } .svgSelected { From 8aa199551056a158249df055791fb7a0acbe2b3a Mon Sep 17 00:00:00 2001 From: manp3104 Date: Sat, 24 Mar 2018 07:40:44 +0530 Subject: [PATCH 011/180] Changed drone dropoff location --- src/images/pin-dropoff.svg | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/src/images/pin-dropoff.svg b/src/images/pin-dropoff.svg index b0b0ab0..a938faf 100644 --- a/src/images/pin-dropoff.svg +++ b/src/images/pin-dropoff.svg @@ -1,23 +1,21 @@ - - - Group 11 + + + Group 7 Created with Sketch. - - - - - - - - - - - - + + + + + + + + + + From 28440d73ff57240658dfb30843e920b6aae5cddc Mon Sep 17 00:00:00 2001 From: Zi Ying Date: Fri, 23 Mar 2018 22:39:11 -0700 Subject: [PATCH 012/180] issue 132 --- src/common.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/common.css b/src/common.css index 58e04d2..49756c0 100644 --- a/src/common.css +++ b/src/common.css @@ -134,7 +134,7 @@ h1 { color: #fff; font-weight: 500; font-size: 11px; - background-color: #2BCA81; + background-color: #ff6a46; padding: 6px 8px; } From cf8912c0099757e93d1699ce5c7cbe870df9beb4 Mon Sep 17 00:00:00 2001 From: waves7 Date: Sat, 24 Mar 2018 11:59:42 +0530 Subject: [PATCH 013/180] fixed issue number #131 drone pickup locaiton icon --- src/images/pin-pickup.svg | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/src/images/pin-pickup.svg b/src/images/pin-pickup.svg index 6316002..f6da5fc 100644 --- a/src/images/pin-pickup.svg +++ b/src/images/pin-pickup.svg @@ -1,23 +1,21 @@ - - - Group 9 + + + Group 4 Created with Sketch. - - - - - - - - - - - + + + + + + + + + From 83682864c1e3a6a13d4b3c0e322db3a9670b1c17 Mon Sep 17 00:00:00 2001 From: cg-cnu Date: Sat, 24 Mar 2018 16:20:34 +0530 Subject: [PATCH 014/180] refactored variable names for adding and removing terminals --- src/components/Map.jsx | 10 +++++----- src/lib/map.js | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/components/Map.jsx b/src/components/Map.jsx index 9d61299..a4edc6e 100644 --- a/src/components/Map.jsx +++ b/src/components/Map.jsx @@ -1,6 +1,6 @@ import React, { Component } from 'react'; import PropTypes from 'prop-types'; -import { createMap, updateMap, initiateZoomTransition, clearPins, addTerminalPinSources} from '../lib/map'; +import { createMap, updateMap, initiateZoomTransition, clearTerminals, addTerminals} from '../lib/map'; import './Map.css'; class Map extends Component { @@ -20,17 +20,17 @@ class Map extends Component { if(this.props.orderStage === 'draft' && nextProps.orderStage === 'searching') { initiateZoomTransition(this.map, nextProps.pickup, nextProps.pickup,{maxZoom:14}); - addTerminalPinSources(this.map); + addTerminals(this.map); } if (nextProps.missionStatus === 'completed') { - clearPins(this.map); + clearTerminals(this.map); } if(['searching', 'choosing', 'signing'].includes(this.props.orderStage) && nextProps.orderStage === 'draft') { - clearPins(this.map); + clearTerminals(this.map); } else { - addTerminalPinSources(this.map); + addTerminals(this.map); } if (nextProps.orderStage === 'in_mission') { diff --git a/src/lib/map.js b/src/lib/map.js index 2101005..52e5ef2 100644 --- a/src/lib/map.js +++ b/src/lib/map.js @@ -158,7 +158,7 @@ export const initiateZoomTransition = (map, pickup, dropoff,options) => { }); }; -export const clearPins = map => { +export const clearTerminals = map => { if (map.getSource('pickup') && map.getSource('dropoff')){ map.removeLayer('pickup'); map.removeLayer('dropoff'); @@ -167,7 +167,7 @@ export const clearPins = map => { } }; -export const addTerminalPinSources = map => { +export const addTerminals = map => { if (!map.getSource('pickup') && !map.getSource('dropoff')) { map.addSource('pickup', { type: 'geojson', From 0bea4ed000ce072b314026ae5ff5817025765af3 Mon Sep 17 00:00:00 2001 From: Ganesh R Date: Sat, 24 Mar 2018 19:57:58 +0530 Subject: [PATCH 015/180] Change time icon --- src/images/time.svg | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/images/time.svg b/src/images/time.svg index a90f783..9f24e0f 100644 --- a/src/images/time.svg +++ b/src/images/time.svg @@ -1,13 +1,15 @@ - + time Created with Sketch. - - - - + + + + + + \ No newline at end of file From 14c28517e11498213e758b179eea25a4cd35298c Mon Sep 17 00:00:00 2001 From: jason116 Date: Sat, 24 Mar 2018 17:51:30 +0000 Subject: [PATCH 016/180] Changed connector image from blue to red. --- src/images/and-connector.svg | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/src/images/and-connector.svg b/src/images/and-connector.svg index db4677d..602ad21 100644 --- a/src/images/and-connector.svg +++ b/src/images/and-connector.svg @@ -1,26 +1,22 @@ - - Group 11 + + and Created with Sketch. - + - - - - - - - - - - - AND - - + + + + + + + + AND + From 6658520e212ab688bd1d13bc1ca1b157ca984250 Mon Sep 17 00:00:00 2001 From: itstimeforanap Date: Sun, 25 Mar 2018 07:39:40 +1100 Subject: [PATCH 017/180] Changed the DAV logo. Fixes issue #138 --- src/images/dav.svg | 68 ++++++++++++++-------------------------------- 1 file changed, 20 insertions(+), 48 deletions(-) diff --git a/src/images/dav.svg b/src/images/dav.svg index 9604721..2ed940c 100644 --- a/src/images/dav.svg +++ b/src/images/dav.svg @@ -1,48 +1,20 @@ - -image/svg+xml \ No newline at end of file + + + + Page 1 + Created with Sketch. + + + + + + + + + + + + + + + \ No newline at end of file From 66f8e45798aeb09aecdc7108b3a8aeaea546a513 Mon Sep 17 00:00:00 2001 From: Durgesh Agrawal <33284183+durgeshra@users.noreply.github.com> Date: Sun, 25 Mar 2018 07:14:32 +0530 Subject: [PATCH 018/180] changed logo file's name --- src/components/MainScreen.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/MainScreen.jsx b/src/components/MainScreen.jsx index adb7b55..3e0ef17 100644 --- a/src/components/MainScreen.jsx +++ b/src/components/MainScreen.jsx @@ -2,7 +2,7 @@ import React, { Component } from 'react'; import PropTypes from 'prop-types'; import Link from '../containers/LinkContainer.jsx'; import './MainScreen.css'; -import logo from '../images/logo_missions.png'; +import logo from '../images/logo_missions.svg'; class MainScreen extends Component { componentDidMount() { From 7f5c6bff40504d68657720d8fbe585fcd28cac22 Mon Sep 17 00:00:00 2001 From: Durgesh Agrawal <33284183+durgeshra@users.noreply.github.com> Date: Sun, 25 Mar 2018 07:14:50 +0530 Subject: [PATCH 019/180] Delete logo_missions.png --- src/images/logo_missions.png | Bin 20866 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 src/images/logo_missions.png diff --git a/src/images/logo_missions.png b/src/images/logo_missions.png deleted file mode 100644 index 6ea047b2b19d2380354ab4cdeb75f859ed20e52b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20866 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 From 751643ce1d1be5b96e2c663a04a8e961808100bb Mon Sep 17 00:00:00 2001 From: Durgesh Agrawal <33284183+durgeshra@users.noreply.github.com> Date: Sun, 25 Mar 2018 07:15:20 +0530 Subject: [PATCH 020/180] Added logo_missions.svg --- src/images/logo_missions.svg | 39 ++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 src/images/logo_missions.svg diff --git a/src/images/logo_missions.svg b/src/images/logo_missions.svg new file mode 100644 index 0000000..ae14424 --- /dev/null +++ b/src/images/logo_missions.svg @@ -0,0 +1,39 @@ + + + + Missions Logo + Created with Sketch. + + + + + + + + + \ No newline at end of file From 8149233b6d8f7564c12683cab8eacd36e94b5ee5 Mon Sep 17 00:00:00 2001 From: harshitbshah Date: Mon, 26 Mar 2018 12:25:19 -0400 Subject: [PATCH 021/180] Change GPS Icon --- src/images/gps_point.svg | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/images/gps_point.svg b/src/images/gps_point.svg index 8c69e8e..f2995b4 100644 --- a/src/images/gps_point.svg +++ b/src/images/gps_point.svg @@ -1,10 +1,12 @@ - + gps_point Created with Sketch. - - + + + + - \ No newline at end of file + From 0ca61710685bbe24e2901ac29652ce2506bf2048 Mon Sep 17 00:00:00 2001 From: Anatoly T Date: Mon, 26 Mar 2018 19:42:18 +0300 Subject: [PATCH 022/180] add dav-js dep update webpack tools --- Makefile | 4 ++++ package.json | 11 ++++++----- webpack.common.js | 43 +++++++++++++++++++++++++------------------ webpack.dev.js | 1 + webpack.prod.js | 1 + 5 files changed, 37 insertions(+), 23 deletions(-) diff --git a/Makefile b/Makefile index f549184..bc147f2 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,10 @@ BUCKET=s3://missions.io/ ## deploy to staging STG_BUCKET=s3://missions-stg/ + +link-dav-js: + npm link ../dav-js + all: setup: diff --git a/package.json b/package.json index 471f957..2ad06a4 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,7 @@ "test": "jest" }, "dependencies": { + "@davfoundation/dav-js": "^0.1.8", "@turf/turf": "^5.1.6", "mapbox-gl": "~0.44.1", "moment": "^2.20.1", @@ -44,18 +45,18 @@ "copy-webpack-plugin": "^4.4.1", "css-loader": "^0.28.9", "eslint": "^4.18.1", - "eslint-loader": "^1.9.0", + "eslint-loader": "^2.0.0", "eslint-plugin-react": "^7.7.0", "extract-text-webpack-plugin": "^3.0.2", "file-loader": "^1.1.9", - "html-webpack-plugin": "^2.30.1", + "html-webpack-plugin": "^3.1.0", "jest": "^22.4.0", "style-loader": "^0.20.2", "uglifyjs-webpack-plugin": "^1.2.0", "url-loader": "^0.6.2", - "webpack": "^3.11.0", - "webpack-dev-server": "^2.11.1", - "webpack-merge": "^4.1.1" + "webpack": "^4.2.0", + "webpack-dev-server": "^3.1.1", + "webpack-merge": "^4.1.2" }, "jest": { "moduleNameMapper": { diff --git a/webpack.common.js b/webpack.common.js index e7297c4..c41afc9 100644 --- a/webpack.common.js +++ b/webpack.common.js @@ -1,6 +1,4 @@ const path = require('path'); -const webpack = require('webpack'); -const ExtractTextPlugin = require('extract-text-webpack-plugin'); module.exports = (env = 'development') => { return { @@ -8,6 +6,7 @@ module.exports = (env = 'development') => { drone_simulation: './src/apps/drone_simulation/Main.jsx', delivery_drones: './src/apps/delivery_drones/Main.jsx', vendor: [ + '@davfoundation/dav-js', 'mapbox-gl', 'react', 'react-dom', @@ -26,27 +25,32 @@ module.exports = (env = 'development') => { sourceMapFilename: '[file].map', }, module: { - loaders: [ + rules: [ { test: /\.jsx?$/, exclude: /node_modules/, - loader: 'babel-loader', + use: [ + { loader: 'babel-loader' }, + ] }, { test: /\.jsx?$/, exclude: /node_modules/, - loader: 'eslint-loader', + use: [ + { loader: 'eslint-loader', } + ] }, { test: /\.css$/, - use: env === 'production' - ? ExtractTextPlugin.extract( - { - fallback: 'style-loader', - use: [{ loader: 'css-loader', options: { minimize: true } }], + use: [ + { loader: 'style-loader', }, + { + loader: 'css-loader', + options: { + minimize: env === 'production' ? true : false } - ) - : ['style-loader', 'css-loader'], + } + ] }, { test: /\.(png|jpg|gif|svg)$/, @@ -61,11 +65,14 @@ module.exports = (env = 'development') => { }, ], }, - plugins: [ - new webpack.optimize.CommonsChunkPlugin({ - name: 'vendor', - filename: 'vendor.bundle.[chunkhash:8].js', - }), - ], + optimization: { + splitChunks: { + cacheGroups: { + vendor: { + filename: 'vendor.bundle.[chunkhash:8].js', + } + } + }, + }, }; }; diff --git a/webpack.dev.js b/webpack.dev.js index 6fd7b96..644131c 100644 --- a/webpack.dev.js +++ b/webpack.dev.js @@ -7,6 +7,7 @@ const HtmlWebpackPlugin = require('html-webpack-plugin'); process.env.NODE_ENV = 'development'; module.exports = merge(getCommon(process.env.NODE_ENV), { + mode: 'development', devtool: 'eval-source-map', devServer: { inline: true, diff --git a/webpack.prod.js b/webpack.prod.js index 90a3baf..9178353 100644 --- a/webpack.prod.js +++ b/webpack.prod.js @@ -11,6 +11,7 @@ const ExtractTextPlugin = require('extract-text-webpack-plugin'); process.env.NODE_ENV = 'production'; module.exports = merge(getCommon(process.env.NODE_ENV), { + mode: 'production', devtool: 'cheap-module-source-map', plugins: [ new CleanWebpackPlugin(['dist']), From a1c5336edf00c7ac06d0904077fc83b0a9e98ce4 Mon Sep 17 00:00:00 2001 From: Anatoly T Date: Tue, 27 Mar 2018 22:45:53 +0300 Subject: [PATCH 023/180] feat: dav-js register davId --- package.json | 1 + src/actions/index.js | 16 +++++ src/components/OrderScreen.css | 31 +++++++++ src/components/OrderScreen.jsx | 83 ++++++++++++++++++++++--- src/containers/OrderScreenContainer.jsx | 17 ++++- src/lib/api.js | 2 +- src/lib/dav.js | 60 ++++++++++++++++++ src/reducers/order.js | 17 ++++- src/reducers/settings.js | 15 +++-- webpack.dev.js | 2 +- webpack.prod.js | 2 +- webpack.stg.js | 2 +- 12 files changed, 226 insertions(+), 22 deletions(-) create mode 100644 src/lib/dav.js diff --git a/package.json b/package.json index 2ad06a4..ec54718 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,7 @@ "dependencies": { "@davfoundation/dav-js": "^0.1.8", "@turf/turf": "^5.1.6", + "callback-timeout": "^3.0.1", "mapbox-gl": "~0.44.1", "moment": "^2.20.1", "randomstring": "^1.1.5", diff --git a/src/actions/index.js b/src/actions/index.js index 1e7c495..34d4e2e 100644 --- a/src/actions/index.js +++ b/src/actions/index.js @@ -7,12 +7,28 @@ import { confirmTakeoff as apiConfirmTakeoff, } from '../lib/api'; +import { initWeb3, registeredDavId } from '../lib/dav'; + export const updateApp = createAction('UPDATE_APP'); export const updateStatus = createAction('UPDATE_STATUS', apiFetchStatus); export const updateStatusFulfilled = createAction('UPDATE_STATUS_FULFILLED'); +export const verifyDavId = createAction('VERIFY_DAV_ID', initWeb3); + +export const updateDavId = createAction('UPDATE_DAV_ID'); + +export const registerDavIdFulfilled = createAction('REGISTER_DAV_ID_FULFILLED'); + +export const registerDavId = createAction('REGISTER_DAV_ID', registeredDavId); + +export const unregisteredDavId = createAction('UNREGISTERED_DAV_ID'); + +export const unlockWallet = createAction('UNLOCK_WALLET'); + +export const closeWalletDialog = createAction('CLOSE_WALLET_DIALOG'); + export const updateMapCoords = createAction('UPDATE_MAP_COORDS'); export const updateOrderDetails = createAction('UPDATE_ORDER_DETAILS'); diff --git a/src/components/OrderScreen.css b/src/components/OrderScreen.css index 9096699..4ce8692 100644 --- a/src/components/OrderScreen.css +++ b/src/components/OrderScreen.css @@ -68,3 +68,34 @@ a.form-submit-button { .geosuggest__item__matched-text { font-weight: bold; } + +.swallet-dialog__close-button { + position: absolute; + top: 10px; + right: 19px; +} + +.wallet-dialog { + text-align: center; +} + +.wallet-dialog p { + text-align:center; + margin: 25px; +} + +.wallet-dialog h1 { + font-size: 20px; +} + +.wallet-dialog span { + display: block; + font-size: 12px; + margin: 10px; +} + +.wallet-dialog button.big-button { + font-weight: normal; + padding: 15px 80px; + margin: auto; +} \ No newline at end of file diff --git a/src/components/OrderScreen.jsx b/src/components/OrderScreen.jsx index f35cd1b..db48fb0 100644 --- a/src/components/OrderScreen.jsx +++ b/src/components/OrderScreen.jsx @@ -7,6 +7,7 @@ import IconSelector from './IconSelector.jsx'; import getConfig from '../config'; import { packageSizeOptions } from '../lib/utils'; import Geosuggest from 'react-geosuggest'; +import x_button from '../images/x_button.svg'; class OrderScreen extends Component { constructor(props) { @@ -33,6 +34,12 @@ class OrderScreen extends Component { this.props.onMount(); } + componentWillReceiveProps(nextProps) { + if(nextProps.registration_step === 'register_fulfilled') { + this.submitForm(); + } + } + createOrderDetailsObject() { const { pickup, dropoff, packageSize } = this.state; return { @@ -56,9 +63,10 @@ class OrderScreen extends Component { } submitForm() { - this.updateStoreFromForm({ stage: 'searching' }); + this.updateStoreFromForm({ stage: 'searching', registration_step: 'registered' }); let needDetails = this.createOrderDetailsObject(); this.props.createNeed(needDetails); + this.props.history.push(this.props.appPath+'/searching'); } selectPackageSize(size) { @@ -69,10 +77,63 @@ class OrderScreen extends Component { getSizeContainer() { } + dismissDialog() { + this.props.closeWalletDialog(); + } + + verifyIdentity() { + this.props.verifyIdentity(); + } + + registerIdentity() { + this.props.registerIdentity(); + } + render() { const { weight } = this.props; // size const pickup_at = this.props.pickup_at || new Date().toTimeString().slice(0, 5); + let showSignInToWalletDialog = this.props.registration_step === 'unlock_wallet'; + const signInToWalletDialog = ( +

+
+
+
+

Please Sign in To A Wallet

+

It seems that you are not signed in to
+ an existing wallet in your browser.
+ Please sign in, or create a new wallet.

+ +
+
+
); + + let showRegisterDavIdDialog = this.props.registration_step === 'register_id'; + const registerDavIdDialog = ( +
+
+
+
+
+ close button +
+

Missing DAV ID

+

This wallet is not connected to a DAV ID

+ + + Note: This is an Ethereum transaction that will
+ cost you some Gas +
+
+
+
); + return (
@@ -153,20 +214,19 @@ class OrderScreen extends Component { }} />
- + + { showSignInToWalletDialog === false ? (
) : signInToWalletDialog } + { showRegisterDavIdDialog === false ? (
) : registerDavIdDialog}
); } } OrderScreen.propTypes = { + history: PropTypes.object.isRequired, + appPath: PropTypes.string, userCoords: PropTypes.object, defaultDropoff: PropTypes.object, pickup: PropTypes.object, @@ -174,9 +234,14 @@ OrderScreen.propTypes = { pickup_at: PropTypes.string, size: PropTypes.string, weight: PropTypes.string, + registration_step: PropTypes.string.isRequired, + fetching: PropTypes.bool.isRequired, updateOrderDetails: PropTypes.func.isRequired, createNeed: PropTypes.func.isRequired, - onMount: PropTypes.func.isRequired + onMount: PropTypes.func.isRequired, + verifyIdentity: PropTypes.func.isRequired, + registerIdentity: PropTypes.func.isRequired, + closeWalletDialog: PropTypes.func.isRequired, }; export default OrderScreen; diff --git a/src/containers/OrderScreenContainer.jsx b/src/containers/OrderScreenContainer.jsx index 313367e..1d9c17d 100644 --- a/src/containers/OrderScreenContainer.jsx +++ b/src/containers/OrderScreenContainer.jsx @@ -1,12 +1,22 @@ import { connect } from 'react-redux'; +import { withRouter } from 'react-router-dom'; import OrderScreen from '../components/OrderScreen.jsx'; import { shiftCoords } from '../lib/utils'; -import { updateOrderDetails, createNeed } from '../actions'; +import { + updateOrderDetails, + createNeed, + verifyDavId, + registerDavId, + closeWalletDialog +} from '../actions'; const mapDispatchToProps = (dispatch) => ({ updateOrderDetails: (details) => dispatch(updateOrderDetails(details)), createNeed: (need) => dispatch(createNeed(need)), onMount: () => dispatch(updateOrderDetails({ stage: 'draft' })), + verifyIdentity: () => dispatch(verifyDavId()), + registerIdentity: () => dispatch(registerDavId()), + closeWalletDialog: () => dispatch(closeWalletDialog()) }); export default connect( @@ -20,7 +30,10 @@ export default connect( pickup_at: state.order.pickup_at, size: state.order.size, weight: state.order.weight, + registration_step: state.order.registration_step, + fetching: state.order.fetching, + appPath: state.app.path }; }, mapDispatchToProps -)(OrderScreen); +)(withRouter(OrderScreen)); diff --git a/src/lib/api.js b/src/lib/api.js index e4b142f..9746f60 100644 --- a/src/lib/api.js +++ b/src/lib/api.js @@ -2,7 +2,7 @@ import store from '../store'; import { packageSizeOptions } from '../lib/utils'; import moment from 'moment'; -const apiRoot = process.env.MISSION_CONTROL_HOST; +const apiRoot = process.env.MISSION_CONTROL_URL; export const fetchStatus = ({ id, lat, long, needId }) => { const missionId = store.getState().mission.id; diff --git a/src/lib/dav.js b/src/lib/dav.js new file mode 100644 index 0000000..f39a85a --- /dev/null +++ b/src/lib/dav.js @@ -0,0 +1,60 @@ +import store from '../store'; +import timeout from 'callback-timeout'; +import { + updateDavId, + unlockWallet, + unregisteredDavId, + registerDavIdFulfilled +} from '../actions'; +import { davJS, web3 } from '@davfoundation/dav-js'; + +let davSDK; + +export const initWeb3 = () => { + if(process.env.BLOCKCHAIN_TYPE === 'NONE') { + store.dispatch(registerDavIdFulfilled()); + return Promise.resolve('Blockchain is disabled'); + } + return new Promise (function (resolve, reject) { + web3.eth.getAccounts(timeout((error, accounts) => { + if(error) { + console.log(error); + store.dispatch(unlockWallet()); + resolve(error); + } else if(accounts.length > 0) { + let davId = accounts[0]; + store.dispatch(updateDavId({ davId })); + return isRegistered(davId); + } else { + // unlock metamask + store.dispatch(unlockWallet()); + console.log('The wallet locked, please unlock it to continue.'); + resolve('The wallet locked, please unlock it to continue.'); + } + reject(); + }, 1500)); + }); +}; + +export const isRegistered = (davId) => { + davSDK = new davJS(davId, davId); + davSDK.isRegistered().then((isRegistered) => { + if(isRegistered) { + store.dispatch(registerDavIdFulfilled()); + } else { + store.dispatch(unregisteredDavId()); + } + }).catch(err => { + console.log(err); + }); +}; + +export const registeredDavId = () => { + davSDK.registerSimple().then((isRegistered) => { + if(isRegistered === true) { + store.dispatch(registerDavIdFulfilled()); + } + }).catch(err => { + console.log(err); + }); +}; diff --git a/src/reducers/order.js b/src/reducers/order.js index 470f808..08ee898 100644 --- a/src/reducers/order.js +++ b/src/reducers/order.js @@ -1,12 +1,15 @@ import {handleActions} from 'redux-actions'; import { updateOrderDetails, createNeedFulfilled, updateStatusFulfilled, - resetOrderDetails, chooseBidPending, updateBidsFulfilled + resetOrderDetails, chooseBidPending, updateBidsFulfilled, + unlockWallet, unregisteredDavId, registerDavIdFulfilled, closeWalletDialog } from '../actions'; import getConfig from '../config'; const defaultState = { stage: 'draft', // draft | searching | choosing | signing | in_mission + registration_step: 'none', // none | unlock_wallet | register_id | register_fulfilled | registered + fetching: false, pickup: undefined, dropoff: undefined, pickup_at: undefined, @@ -16,6 +19,18 @@ const defaultState = { export default handleActions({ + [unlockWallet]: (state) => { + return {...state, registration_step: 'unlock_wallet', fetching: false}; + }, + [unregisteredDavId]: (state) => { + return {...state, registration_step: 'register_id', fetching: false}; + }, + [registerDavIdFulfilled]: (state) => { + return {...state, registration_step: 'register_fulfilled', fetching: false}; + }, + [closeWalletDialog]: (state) => { + return {...state, registration_step: 'none'}; + }, [updateOrderDetails]: (state, {payload}) => { return {...state, ...payload}; }, diff --git a/src/reducers/settings.js b/src/reducers/settings.js index cea2fae..2198f93 100644 --- a/src/reducers/settings.js +++ b/src/reducers/settings.js @@ -1,4 +1,6 @@ import { randomDavAddress } from '../lib/utils'; +import { handleActions } from 'redux-actions'; +import { updateDavId } from '../actions'; const defaultState = { welcome_seen: false, // Has user finished/skipped/closed on-boarding process? @@ -6,9 +8,10 @@ const defaultState = { user_icon: '/images/noam.jpg', }; -export default (state = defaultState, action) => { - switch (action.type) { - default: - return state; - } -}; +export default handleActions({ + + [updateDavId]: (state, {payload: { davId }}) => { + return {...state, user_id: davId}; + }, + +}, defaultState); diff --git a/webpack.dev.js b/webpack.dev.js index 644131c..22eb051 100644 --- a/webpack.dev.js +++ b/webpack.dev.js @@ -31,7 +31,7 @@ module.exports = merge(getCommon(process.env.NODE_ENV), { new webpack.DefinePlugin({ 'process.env': { NODE_ENV: JSON.stringify(process.env.NODE_ENV), - MISSION_CONTROL_HOST: JSON.stringify('http://localhost:8888'), + MISSION_CONTROL_URL: JSON.stringify('http://localhost:8888'), }, }), ], diff --git a/webpack.prod.js b/webpack.prod.js index 9178353..ee2cf5a 100644 --- a/webpack.prod.js +++ b/webpack.prod.js @@ -18,7 +18,7 @@ module.exports = merge(getCommon(process.env.NODE_ENV), { new webpack.DefinePlugin({ 'process.env': { NODE_ENV: JSON.stringify(process.env.NODE_ENV), - MISSION_CONTROL_HOST: JSON.stringify('https://ctrl.missions.io'), + MISSION_CONTROL_URL: JSON.stringify('https://ctrl.missions.io'), }, }), new HtmlWebpackPlugin({ diff --git a/webpack.stg.js b/webpack.stg.js index 01474b0..3bb449f 100644 --- a/webpack.stg.js +++ b/webpack.stg.js @@ -17,7 +17,7 @@ module.exports = merge(getCommon(process.env.NODE_ENV), { new webpack.DefinePlugin({ 'process.env': { NODE_ENV: JSON.stringify(process.env.NODE_ENV), - MISSION_CONTROL_HOST: JSON.stringify('http://missioncontrol-stg.us-east-1.elasticbeanstalk.com'), + MISSION_CONTROL_URL: JSON.stringify('http://missioncontrol-stg.us-east-1.elasticbeanstalk.com'), }, }), new HtmlWebpackPlugin({ From 91ae5d76ae25e462ee777cf7af193f588e0344cc Mon Sep 17 00:00:00 2001 From: Anatoly T Date: Wed, 28 Mar 2018 01:46:08 +0300 Subject: [PATCH 024/180] feat: create mission transacton [WIP] --- src/actions/index.js | 12 ++++++++++-- src/components/VehicleBid.jsx | 2 +- src/containers/SearchingScreenContainer.jsx | 2 +- src/lib/api.js | 4 +++- src/lib/dav.js | 18 ++++++++++++++++-- 5 files changed, 31 insertions(+), 7 deletions(-) diff --git a/src/actions/index.js b/src/actions/index.js index 34d4e2e..57aedaa 100644 --- a/src/actions/index.js +++ b/src/actions/index.js @@ -7,7 +7,11 @@ import { confirmTakeoff as apiConfirmTakeoff, } from '../lib/api'; -import { initWeb3, registeredDavId } from '../lib/dav'; +import { + initWeb3, + registerDavId as davRegisterDavId, + createMissionTransaction as davCreateMissionTransaction +} from '../lib/dav'; export const updateApp = createAction('UPDATE_APP'); @@ -21,7 +25,7 @@ export const updateDavId = createAction('UPDATE_DAV_ID'); export const registerDavIdFulfilled = createAction('REGISTER_DAV_ID_FULFILLED'); -export const registerDavId = createAction('REGISTER_DAV_ID', registeredDavId); +export const registerDavId = createAction('REGISTER_DAV_ID', davRegisterDavId); export const unregisteredDavId = createAction('UNREGISTERED_DAV_ID'); @@ -49,6 +53,10 @@ export const chooseBidPending = createAction('CHOOSE_BID_PENDING'); export const chooseBidFulfilled = createAction('CHOOSE_BID_FULFILLED'); +export const createMissionTransaction = createAction('CREATE_MISSION_TRANSACTION', davCreateMissionTransaction); + +export const createMissionTransactionFulfilled = createAction('CREATE_MISSION_TRANSACTION_FULFILLED'); + export const confirmTakeoff = createAction( 'CONFIRM_TAKEOFF', apiConfirmTakeoff, diff --git a/src/components/VehicleBid.jsx b/src/components/VehicleBid.jsx index bd57d32..59e4d13 100644 --- a/src/components/VehicleBid.jsx +++ b/src/components/VehicleBid.jsx @@ -6,7 +6,7 @@ import currencyImage from '../images/dav.svg'; const VehicleBid = ({bid, vehicle, shown, chooseBid}) => { const clickChooseBid = (e) => { e.preventDefault(); - chooseBid(bid.id); + chooseBid(bid.id, bid.dav_id, bid.price); }; let classNames = ['vehicle-bid-card']; diff --git a/src/containers/SearchingScreenContainer.jsx b/src/containers/SearchingScreenContainer.jsx index eadf0e1..ae4dbd5 100644 --- a/src/containers/SearchingScreenContainer.jsx +++ b/src/containers/SearchingScreenContainer.jsx @@ -7,7 +7,7 @@ import { cancelNeed } from '../lib/api'; const mapDispatchToProps = (dispatch) => ({ cancelSearch: () => cancelNeed().then(dispatch(resetOrderDetails())), - chooseBid: (bidId) => dispatch(chooseBid(bidId)), + chooseBid: (bidId, vehicle_id, price) => dispatch(chooseBid(bidId, vehicle_id, price)), }); export default connect( diff --git a/src/lib/api.js b/src/lib/api.js index 9746f60..6ea16d1 100644 --- a/src/lib/api.js +++ b/src/lib/api.js @@ -1,6 +1,7 @@ import store from '../store'; import { packageSizeOptions } from '../lib/utils'; import moment from 'moment'; +import { createMissionTransaction } from '../actions'; const apiRoot = process.env.MISSION_CONTROL_URL; @@ -39,7 +40,8 @@ export const createNeed = ({ pickup, dropoff, pickup_at, size, weight }) => { return fetchWithUserId(url, 'POST', body); }; -export const chooseBid = bidId => { +export const chooseBid = (bidId, vehicle_id, price) => { + store.dispatch(createMissionTransaction(vehicle_id, price)); let url = new URL(`/bids/${bidId}/choose`, apiRoot); return fetchWithUserId(url, 'PUT'); }; diff --git a/src/lib/dav.js b/src/lib/dav.js index f39a85a..75ed993 100644 --- a/src/lib/dav.js +++ b/src/lib/dav.js @@ -4,7 +4,8 @@ import { updateDavId, unlockWallet, unregisteredDavId, - registerDavIdFulfilled + registerDavIdFulfilled, + createMissionTransactionFulfilled } from '../actions'; import { davJS, web3 } from '@davfoundation/dav-js'; @@ -49,7 +50,7 @@ export const isRegistered = (davId) => { }); }; -export const registeredDavId = () => { +export const registerDavId = () => { davSDK.registerSimple().then((isRegistered) => { if(isRegistered === true) { store.dispatch(registerDavIdFulfilled()); @@ -58,3 +59,16 @@ export const registeredDavId = () => { console.log(err); }); }; + +export const createMissionTransaction = (vehicle_id, price) => { + if(process.env.BLOCKCHAIN_TYPE === 'NONE') { + store.dispatch(createMissionTransactionFulfilled()); + return Promise.resolve('Blockchain is disabled'); + } + davSDK.createMissionTransaction(vehicle_id, price).then((response) => { + console.log(response); + store.dispatch(createMissionTransactionFulfilled()); + }).catch(err => { + console.log(err); + }); +}; From 515fa53163095a407aa449cb1d08044d2297d868 Mon Sep 17 00:00:00 2001 From: cg-cnu Date: Wed, 28 Mar 2018 07:55:55 +0530 Subject: [PATCH 025/180] renamed and refactored getCoordinatesFromString function --- src/lib/utils.js | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/lib/utils.js b/src/lib/utils.js index f8c5d4f..52d96fc 100644 --- a/src/lib/utils.js +++ b/src/lib/utils.js @@ -32,11 +32,9 @@ export const getShortCoordsString = ( ); }; -export const coordsFromString = strCoords => { - const [lat, long] = strCoords.replace(/[^\d.,-]/gi, '').split(','); - return lat && long - ? { lat: parseFloat(lat), long: parseFloat(long) } - : undefined; +export const getCoordinatesFromString = coordinatesString => { + const [lat, long] = coordinatesString.replace(/[^\d.,-]/gi, '').split(','); + if (lat && long) return { lat: parseFloat(lat), long: parseFloat(long) }; }; export const humanReadableVehicleStatus = { From a60baf0129110ab839a71b7a1f16a514be34880a Mon Sep 17 00:00:00 2001 From: srfrnk Date: Wed, 28 Mar 2018 08:03:48 +0300 Subject: [PATCH 026/180] Revert "feat: create mission transacton [WIP]" This reverts commit 91ae5d76ae25e462ee777cf7af193f588e0344cc. --- src/actions/index.js | 12 ++---------- src/components/VehicleBid.jsx | 2 +- src/containers/SearchingScreenContainer.jsx | 2 +- src/lib/api.js | 4 +--- src/lib/dav.js | 18 ++---------------- 5 files changed, 7 insertions(+), 31 deletions(-) diff --git a/src/actions/index.js b/src/actions/index.js index 57aedaa..34d4e2e 100644 --- a/src/actions/index.js +++ b/src/actions/index.js @@ -7,11 +7,7 @@ import { confirmTakeoff as apiConfirmTakeoff, } from '../lib/api'; -import { - initWeb3, - registerDavId as davRegisterDavId, - createMissionTransaction as davCreateMissionTransaction -} from '../lib/dav'; +import { initWeb3, registeredDavId } from '../lib/dav'; export const updateApp = createAction('UPDATE_APP'); @@ -25,7 +21,7 @@ export const updateDavId = createAction('UPDATE_DAV_ID'); export const registerDavIdFulfilled = createAction('REGISTER_DAV_ID_FULFILLED'); -export const registerDavId = createAction('REGISTER_DAV_ID', davRegisterDavId); +export const registerDavId = createAction('REGISTER_DAV_ID', registeredDavId); export const unregisteredDavId = createAction('UNREGISTERED_DAV_ID'); @@ -53,10 +49,6 @@ export const chooseBidPending = createAction('CHOOSE_BID_PENDING'); export const chooseBidFulfilled = createAction('CHOOSE_BID_FULFILLED'); -export const createMissionTransaction = createAction('CREATE_MISSION_TRANSACTION', davCreateMissionTransaction); - -export const createMissionTransactionFulfilled = createAction('CREATE_MISSION_TRANSACTION_FULFILLED'); - export const confirmTakeoff = createAction( 'CONFIRM_TAKEOFF', apiConfirmTakeoff, diff --git a/src/components/VehicleBid.jsx b/src/components/VehicleBid.jsx index 59e4d13..bd57d32 100644 --- a/src/components/VehicleBid.jsx +++ b/src/components/VehicleBid.jsx @@ -6,7 +6,7 @@ import currencyImage from '../images/dav.svg'; const VehicleBid = ({bid, vehicle, shown, chooseBid}) => { const clickChooseBid = (e) => { e.preventDefault(); - chooseBid(bid.id, bid.dav_id, bid.price); + chooseBid(bid.id); }; let classNames = ['vehicle-bid-card']; diff --git a/src/containers/SearchingScreenContainer.jsx b/src/containers/SearchingScreenContainer.jsx index ae4dbd5..eadf0e1 100644 --- a/src/containers/SearchingScreenContainer.jsx +++ b/src/containers/SearchingScreenContainer.jsx @@ -7,7 +7,7 @@ import { cancelNeed } from '../lib/api'; const mapDispatchToProps = (dispatch) => ({ cancelSearch: () => cancelNeed().then(dispatch(resetOrderDetails())), - chooseBid: (bidId, vehicle_id, price) => dispatch(chooseBid(bidId, vehicle_id, price)), + chooseBid: (bidId) => dispatch(chooseBid(bidId)), }); export default connect( diff --git a/src/lib/api.js b/src/lib/api.js index 6ea16d1..9746f60 100644 --- a/src/lib/api.js +++ b/src/lib/api.js @@ -1,7 +1,6 @@ import store from '../store'; import { packageSizeOptions } from '../lib/utils'; import moment from 'moment'; -import { createMissionTransaction } from '../actions'; const apiRoot = process.env.MISSION_CONTROL_URL; @@ -40,8 +39,7 @@ export const createNeed = ({ pickup, dropoff, pickup_at, size, weight }) => { return fetchWithUserId(url, 'POST', body); }; -export const chooseBid = (bidId, vehicle_id, price) => { - store.dispatch(createMissionTransaction(vehicle_id, price)); +export const chooseBid = bidId => { let url = new URL(`/bids/${bidId}/choose`, apiRoot); return fetchWithUserId(url, 'PUT'); }; diff --git a/src/lib/dav.js b/src/lib/dav.js index 75ed993..f39a85a 100644 --- a/src/lib/dav.js +++ b/src/lib/dav.js @@ -4,8 +4,7 @@ import { updateDavId, unlockWallet, unregisteredDavId, - registerDavIdFulfilled, - createMissionTransactionFulfilled + registerDavIdFulfilled } from '../actions'; import { davJS, web3 } from '@davfoundation/dav-js'; @@ -50,7 +49,7 @@ export const isRegistered = (davId) => { }); }; -export const registerDavId = () => { +export const registeredDavId = () => { davSDK.registerSimple().then((isRegistered) => { if(isRegistered === true) { store.dispatch(registerDavIdFulfilled()); @@ -59,16 +58,3 @@ export const registerDavId = () => { console.log(err); }); }; - -export const createMissionTransaction = (vehicle_id, price) => { - if(process.env.BLOCKCHAIN_TYPE === 'NONE') { - store.dispatch(createMissionTransactionFulfilled()); - return Promise.resolve('Blockchain is disabled'); - } - davSDK.createMissionTransaction(vehicle_id, price).then((response) => { - console.log(response); - store.dispatch(createMissionTransactionFulfilled()); - }).catch(err => { - console.log(err); - }); -}; From 7ac70d4308bf8a0bd183f3703fc6ae640c14a632 Mon Sep 17 00:00:00 2001 From: srfrnk Date: Wed, 28 Mar 2018 08:04:07 +0300 Subject: [PATCH 027/180] Revert "feat: dav-js register davId" This reverts commit a1c5336edf00c7ac06d0904077fc83b0a9e98ce4. --- package.json | 1 - src/actions/index.js | 16 ----- src/components/OrderScreen.css | 31 --------- src/components/OrderScreen.jsx | 83 +++---------------------- src/containers/OrderScreenContainer.jsx | 17 +---- src/lib/api.js | 2 +- src/lib/dav.js | 60 ------------------ src/reducers/order.js | 17 +---- src/reducers/settings.js | 15 ++--- webpack.dev.js | 2 +- webpack.prod.js | 2 +- webpack.stg.js | 2 +- 12 files changed, 22 insertions(+), 226 deletions(-) delete mode 100644 src/lib/dav.js diff --git a/package.json b/package.json index ec54718..2ad06a4 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,6 @@ "dependencies": { "@davfoundation/dav-js": "^0.1.8", "@turf/turf": "^5.1.6", - "callback-timeout": "^3.0.1", "mapbox-gl": "~0.44.1", "moment": "^2.20.1", "randomstring": "^1.1.5", diff --git a/src/actions/index.js b/src/actions/index.js index 34d4e2e..1e7c495 100644 --- a/src/actions/index.js +++ b/src/actions/index.js @@ -7,28 +7,12 @@ import { confirmTakeoff as apiConfirmTakeoff, } from '../lib/api'; -import { initWeb3, registeredDavId } from '../lib/dav'; - export const updateApp = createAction('UPDATE_APP'); export const updateStatus = createAction('UPDATE_STATUS', apiFetchStatus); export const updateStatusFulfilled = createAction('UPDATE_STATUS_FULFILLED'); -export const verifyDavId = createAction('VERIFY_DAV_ID', initWeb3); - -export const updateDavId = createAction('UPDATE_DAV_ID'); - -export const registerDavIdFulfilled = createAction('REGISTER_DAV_ID_FULFILLED'); - -export const registerDavId = createAction('REGISTER_DAV_ID', registeredDavId); - -export const unregisteredDavId = createAction('UNREGISTERED_DAV_ID'); - -export const unlockWallet = createAction('UNLOCK_WALLET'); - -export const closeWalletDialog = createAction('CLOSE_WALLET_DIALOG'); - export const updateMapCoords = createAction('UPDATE_MAP_COORDS'); export const updateOrderDetails = createAction('UPDATE_ORDER_DETAILS'); diff --git a/src/components/OrderScreen.css b/src/components/OrderScreen.css index 4ce8692..9096699 100644 --- a/src/components/OrderScreen.css +++ b/src/components/OrderScreen.css @@ -68,34 +68,3 @@ a.form-submit-button { .geosuggest__item__matched-text { font-weight: bold; } - -.swallet-dialog__close-button { - position: absolute; - top: 10px; - right: 19px; -} - -.wallet-dialog { - text-align: center; -} - -.wallet-dialog p { - text-align:center; - margin: 25px; -} - -.wallet-dialog h1 { - font-size: 20px; -} - -.wallet-dialog span { - display: block; - font-size: 12px; - margin: 10px; -} - -.wallet-dialog button.big-button { - font-weight: normal; - padding: 15px 80px; - margin: auto; -} \ No newline at end of file diff --git a/src/components/OrderScreen.jsx b/src/components/OrderScreen.jsx index db48fb0..f35cd1b 100644 --- a/src/components/OrderScreen.jsx +++ b/src/components/OrderScreen.jsx @@ -7,7 +7,6 @@ import IconSelector from './IconSelector.jsx'; import getConfig from '../config'; import { packageSizeOptions } from '../lib/utils'; import Geosuggest from 'react-geosuggest'; -import x_button from '../images/x_button.svg'; class OrderScreen extends Component { constructor(props) { @@ -34,12 +33,6 @@ class OrderScreen extends Component { this.props.onMount(); } - componentWillReceiveProps(nextProps) { - if(nextProps.registration_step === 'register_fulfilled') { - this.submitForm(); - } - } - createOrderDetailsObject() { const { pickup, dropoff, packageSize } = this.state; return { @@ -63,10 +56,9 @@ class OrderScreen extends Component { } submitForm() { - this.updateStoreFromForm({ stage: 'searching', registration_step: 'registered' }); + this.updateStoreFromForm({ stage: 'searching' }); let needDetails = this.createOrderDetailsObject(); this.props.createNeed(needDetails); - this.props.history.push(this.props.appPath+'/searching'); } selectPackageSize(size) { @@ -77,63 +69,10 @@ class OrderScreen extends Component { getSizeContainer() { } - dismissDialog() { - this.props.closeWalletDialog(); - } - - verifyIdentity() { - this.props.verifyIdentity(); - } - - registerIdentity() { - this.props.registerIdentity(); - } - render() { const { weight } = this.props; // size const pickup_at = this.props.pickup_at || new Date().toTimeString().slice(0, 5); - let showSignInToWalletDialog = this.props.registration_step === 'unlock_wallet'; - const signInToWalletDialog = ( -
-
-
-
-

Please Sign in To A Wallet

-

It seems that you are not signed in to
- an existing wallet in your browser.
- Please sign in, or create a new wallet.

- -
-
-
); - - let showRegisterDavIdDialog = this.props.registration_step === 'register_id'; - const registerDavIdDialog = ( -
-
-
-
-
- close button -
-

Missing DAV ID

-

This wallet is not connected to a DAV ID

- - - Note: This is an Ethereum transaction that will
- cost you some Gas -
-
-
-
); - return (
@@ -214,19 +153,20 @@ class OrderScreen extends Component { }} />
- - { showSignInToWalletDialog === false ? (
) : signInToWalletDialog } - { showRegisterDavIdDialog === false ? (
) : registerDavIdDialog} +
); } } OrderScreen.propTypes = { - history: PropTypes.object.isRequired, - appPath: PropTypes.string, userCoords: PropTypes.object, defaultDropoff: PropTypes.object, pickup: PropTypes.object, @@ -234,14 +174,9 @@ OrderScreen.propTypes = { pickup_at: PropTypes.string, size: PropTypes.string, weight: PropTypes.string, - registration_step: PropTypes.string.isRequired, - fetching: PropTypes.bool.isRequired, updateOrderDetails: PropTypes.func.isRequired, createNeed: PropTypes.func.isRequired, - onMount: PropTypes.func.isRequired, - verifyIdentity: PropTypes.func.isRequired, - registerIdentity: PropTypes.func.isRequired, - closeWalletDialog: PropTypes.func.isRequired, + onMount: PropTypes.func.isRequired }; export default OrderScreen; diff --git a/src/containers/OrderScreenContainer.jsx b/src/containers/OrderScreenContainer.jsx index 1d9c17d..313367e 100644 --- a/src/containers/OrderScreenContainer.jsx +++ b/src/containers/OrderScreenContainer.jsx @@ -1,22 +1,12 @@ import { connect } from 'react-redux'; -import { withRouter } from 'react-router-dom'; import OrderScreen from '../components/OrderScreen.jsx'; import { shiftCoords } from '../lib/utils'; -import { - updateOrderDetails, - createNeed, - verifyDavId, - registerDavId, - closeWalletDialog -} from '../actions'; +import { updateOrderDetails, createNeed } from '../actions'; const mapDispatchToProps = (dispatch) => ({ updateOrderDetails: (details) => dispatch(updateOrderDetails(details)), createNeed: (need) => dispatch(createNeed(need)), onMount: () => dispatch(updateOrderDetails({ stage: 'draft' })), - verifyIdentity: () => dispatch(verifyDavId()), - registerIdentity: () => dispatch(registerDavId()), - closeWalletDialog: () => dispatch(closeWalletDialog()) }); export default connect( @@ -30,10 +20,7 @@ export default connect( pickup_at: state.order.pickup_at, size: state.order.size, weight: state.order.weight, - registration_step: state.order.registration_step, - fetching: state.order.fetching, - appPath: state.app.path }; }, mapDispatchToProps -)(withRouter(OrderScreen)); +)(OrderScreen); diff --git a/src/lib/api.js b/src/lib/api.js index 9746f60..e4b142f 100644 --- a/src/lib/api.js +++ b/src/lib/api.js @@ -2,7 +2,7 @@ import store from '../store'; import { packageSizeOptions } from '../lib/utils'; import moment from 'moment'; -const apiRoot = process.env.MISSION_CONTROL_URL; +const apiRoot = process.env.MISSION_CONTROL_HOST; export const fetchStatus = ({ id, lat, long, needId }) => { const missionId = store.getState().mission.id; diff --git a/src/lib/dav.js b/src/lib/dav.js deleted file mode 100644 index f39a85a..0000000 --- a/src/lib/dav.js +++ /dev/null @@ -1,60 +0,0 @@ -import store from '../store'; -import timeout from 'callback-timeout'; -import { - updateDavId, - unlockWallet, - unregisteredDavId, - registerDavIdFulfilled -} from '../actions'; -import { davJS, web3 } from '@davfoundation/dav-js'; - -let davSDK; - -export const initWeb3 = () => { - if(process.env.BLOCKCHAIN_TYPE === 'NONE') { - store.dispatch(registerDavIdFulfilled()); - return Promise.resolve('Blockchain is disabled'); - } - return new Promise (function (resolve, reject) { - web3.eth.getAccounts(timeout((error, accounts) => { - if(error) { - console.log(error); - store.dispatch(unlockWallet()); - resolve(error); - } else if(accounts.length > 0) { - let davId = accounts[0]; - store.dispatch(updateDavId({ davId })); - return isRegistered(davId); - } else { - // unlock metamask - store.dispatch(unlockWallet()); - console.log('The wallet locked, please unlock it to continue.'); - resolve('The wallet locked, please unlock it to continue.'); - } - reject(); - }, 1500)); - }); -}; - -export const isRegistered = (davId) => { - davSDK = new davJS(davId, davId); - davSDK.isRegistered().then((isRegistered) => { - if(isRegistered) { - store.dispatch(registerDavIdFulfilled()); - } else { - store.dispatch(unregisteredDavId()); - } - }).catch(err => { - console.log(err); - }); -}; - -export const registeredDavId = () => { - davSDK.registerSimple().then((isRegistered) => { - if(isRegistered === true) { - store.dispatch(registerDavIdFulfilled()); - } - }).catch(err => { - console.log(err); - }); -}; diff --git a/src/reducers/order.js b/src/reducers/order.js index 08ee898..470f808 100644 --- a/src/reducers/order.js +++ b/src/reducers/order.js @@ -1,15 +1,12 @@ import {handleActions} from 'redux-actions'; import { updateOrderDetails, createNeedFulfilled, updateStatusFulfilled, - resetOrderDetails, chooseBidPending, updateBidsFulfilled, - unlockWallet, unregisteredDavId, registerDavIdFulfilled, closeWalletDialog + resetOrderDetails, chooseBidPending, updateBidsFulfilled } from '../actions'; import getConfig from '../config'; const defaultState = { stage: 'draft', // draft | searching | choosing | signing | in_mission - registration_step: 'none', // none | unlock_wallet | register_id | register_fulfilled | registered - fetching: false, pickup: undefined, dropoff: undefined, pickup_at: undefined, @@ -19,18 +16,6 @@ const defaultState = { export default handleActions({ - [unlockWallet]: (state) => { - return {...state, registration_step: 'unlock_wallet', fetching: false}; - }, - [unregisteredDavId]: (state) => { - return {...state, registration_step: 'register_id', fetching: false}; - }, - [registerDavIdFulfilled]: (state) => { - return {...state, registration_step: 'register_fulfilled', fetching: false}; - }, - [closeWalletDialog]: (state) => { - return {...state, registration_step: 'none'}; - }, [updateOrderDetails]: (state, {payload}) => { return {...state, ...payload}; }, diff --git a/src/reducers/settings.js b/src/reducers/settings.js index 2198f93..cea2fae 100644 --- a/src/reducers/settings.js +++ b/src/reducers/settings.js @@ -1,6 +1,4 @@ import { randomDavAddress } from '../lib/utils'; -import { handleActions } from 'redux-actions'; -import { updateDavId } from '../actions'; const defaultState = { welcome_seen: false, // Has user finished/skipped/closed on-boarding process? @@ -8,10 +6,9 @@ const defaultState = { user_icon: '/images/noam.jpg', }; -export default handleActions({ - - [updateDavId]: (state, {payload: { davId }}) => { - return {...state, user_id: davId}; - }, - -}, defaultState); +export default (state = defaultState, action) => { + switch (action.type) { + default: + return state; + } +}; diff --git a/webpack.dev.js b/webpack.dev.js index 22eb051..644131c 100644 --- a/webpack.dev.js +++ b/webpack.dev.js @@ -31,7 +31,7 @@ module.exports = merge(getCommon(process.env.NODE_ENV), { new webpack.DefinePlugin({ 'process.env': { NODE_ENV: JSON.stringify(process.env.NODE_ENV), - MISSION_CONTROL_URL: JSON.stringify('http://localhost:8888'), + MISSION_CONTROL_HOST: JSON.stringify('http://localhost:8888'), }, }), ], diff --git a/webpack.prod.js b/webpack.prod.js index ee2cf5a..9178353 100644 --- a/webpack.prod.js +++ b/webpack.prod.js @@ -18,7 +18,7 @@ module.exports = merge(getCommon(process.env.NODE_ENV), { new webpack.DefinePlugin({ 'process.env': { NODE_ENV: JSON.stringify(process.env.NODE_ENV), - MISSION_CONTROL_URL: JSON.stringify('https://ctrl.missions.io'), + MISSION_CONTROL_HOST: JSON.stringify('https://ctrl.missions.io'), }, }), new HtmlWebpackPlugin({ diff --git a/webpack.stg.js b/webpack.stg.js index 3bb449f..01474b0 100644 --- a/webpack.stg.js +++ b/webpack.stg.js @@ -17,7 +17,7 @@ module.exports = merge(getCommon(process.env.NODE_ENV), { new webpack.DefinePlugin({ 'process.env': { NODE_ENV: JSON.stringify(process.env.NODE_ENV), - MISSION_CONTROL_URL: JSON.stringify('http://missioncontrol-stg.us-east-1.elasticbeanstalk.com'), + MISSION_CONTROL_HOST: JSON.stringify('http://missioncontrol-stg.us-east-1.elasticbeanstalk.com'), }, }), new HtmlWebpackPlugin({ From 7747fdbd274aa68c97647f5a22545a0a8c526087 Mon Sep 17 00:00:00 2001 From: srfrnk Date: Wed, 28 Mar 2018 08:04:13 +0300 Subject: [PATCH 028/180] Revert "add dav-js dep update webpack tools" This reverts commit 0ca61710685bbe24e2901ac29652ce2506bf2048. --- Makefile | 4 ---- package.json | 11 +++++------ webpack.common.js | 43 ++++++++++++++++++------------------------- webpack.dev.js | 1 - webpack.prod.js | 1 - 5 files changed, 23 insertions(+), 37 deletions(-) diff --git a/Makefile b/Makefile index bc147f2..f549184 100644 --- a/Makefile +++ b/Makefile @@ -1,10 +1,6 @@ BUCKET=s3://missions.io/ ## deploy to staging STG_BUCKET=s3://missions-stg/ - -link-dav-js: - npm link ../dav-js - all: setup: diff --git a/package.json b/package.json index 2ad06a4..471f957 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,6 @@ "test": "jest" }, "dependencies": { - "@davfoundation/dav-js": "^0.1.8", "@turf/turf": "^5.1.6", "mapbox-gl": "~0.44.1", "moment": "^2.20.1", @@ -45,18 +44,18 @@ "copy-webpack-plugin": "^4.4.1", "css-loader": "^0.28.9", "eslint": "^4.18.1", - "eslint-loader": "^2.0.0", + "eslint-loader": "^1.9.0", "eslint-plugin-react": "^7.7.0", "extract-text-webpack-plugin": "^3.0.2", "file-loader": "^1.1.9", - "html-webpack-plugin": "^3.1.0", + "html-webpack-plugin": "^2.30.1", "jest": "^22.4.0", "style-loader": "^0.20.2", "uglifyjs-webpack-plugin": "^1.2.0", "url-loader": "^0.6.2", - "webpack": "^4.2.0", - "webpack-dev-server": "^3.1.1", - "webpack-merge": "^4.1.2" + "webpack": "^3.11.0", + "webpack-dev-server": "^2.11.1", + "webpack-merge": "^4.1.1" }, "jest": { "moduleNameMapper": { diff --git a/webpack.common.js b/webpack.common.js index c41afc9..e7297c4 100644 --- a/webpack.common.js +++ b/webpack.common.js @@ -1,4 +1,6 @@ const path = require('path'); +const webpack = require('webpack'); +const ExtractTextPlugin = require('extract-text-webpack-plugin'); module.exports = (env = 'development') => { return { @@ -6,7 +8,6 @@ module.exports = (env = 'development') => { drone_simulation: './src/apps/drone_simulation/Main.jsx', delivery_drones: './src/apps/delivery_drones/Main.jsx', vendor: [ - '@davfoundation/dav-js', 'mapbox-gl', 'react', 'react-dom', @@ -25,32 +26,27 @@ module.exports = (env = 'development') => { sourceMapFilename: '[file].map', }, module: { - rules: [ + loaders: [ { test: /\.jsx?$/, exclude: /node_modules/, - use: [ - { loader: 'babel-loader' }, - ] + loader: 'babel-loader', }, { test: /\.jsx?$/, exclude: /node_modules/, - use: [ - { loader: 'eslint-loader', } - ] + loader: 'eslint-loader', }, { test: /\.css$/, - use: [ - { loader: 'style-loader', }, - { - loader: 'css-loader', - options: { - minimize: env === 'production' ? true : false + use: env === 'production' + ? ExtractTextPlugin.extract( + { + fallback: 'style-loader', + use: [{ loader: 'css-loader', options: { minimize: true } }], } - } - ] + ) + : ['style-loader', 'css-loader'], }, { test: /\.(png|jpg|gif|svg)$/, @@ -65,14 +61,11 @@ module.exports = (env = 'development') => { }, ], }, - optimization: { - splitChunks: { - cacheGroups: { - vendor: { - filename: 'vendor.bundle.[chunkhash:8].js', - } - } - }, - }, + plugins: [ + new webpack.optimize.CommonsChunkPlugin({ + name: 'vendor', + filename: 'vendor.bundle.[chunkhash:8].js', + }), + ], }; }; diff --git a/webpack.dev.js b/webpack.dev.js index 644131c..6fd7b96 100644 --- a/webpack.dev.js +++ b/webpack.dev.js @@ -7,7 +7,6 @@ const HtmlWebpackPlugin = require('html-webpack-plugin'); process.env.NODE_ENV = 'development'; module.exports = merge(getCommon(process.env.NODE_ENV), { - mode: 'development', devtool: 'eval-source-map', devServer: { inline: true, diff --git a/webpack.prod.js b/webpack.prod.js index 9178353..90a3baf 100644 --- a/webpack.prod.js +++ b/webpack.prod.js @@ -11,7 +11,6 @@ const ExtractTextPlugin = require('extract-text-webpack-plugin'); process.env.NODE_ENV = 'production'; module.exports = merge(getCommon(process.env.NODE_ENV), { - mode: 'production', devtool: 'cheap-module-source-map', plugins: [ new CleanWebpackPlugin(['dist']), From c185a7bc0beb39b088770a7f471dfdc36c359676 Mon Sep 17 00:00:00 2001 From: srfrnk Date: Wed, 28 Mar 2018 08:05:46 +0300 Subject: [PATCH 029/180] chore: merge reverts --- src/actions/index.js | 16 ++++++++++++ src/lib/dav.js | 60 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 76 insertions(+) create mode 100644 src/lib/dav.js diff --git a/src/actions/index.js b/src/actions/index.js index 1e7c495..34d4e2e 100644 --- a/src/actions/index.js +++ b/src/actions/index.js @@ -7,12 +7,28 @@ import { confirmTakeoff as apiConfirmTakeoff, } from '../lib/api'; +import { initWeb3, registeredDavId } from '../lib/dav'; + export const updateApp = createAction('UPDATE_APP'); export const updateStatus = createAction('UPDATE_STATUS', apiFetchStatus); export const updateStatusFulfilled = createAction('UPDATE_STATUS_FULFILLED'); +export const verifyDavId = createAction('VERIFY_DAV_ID', initWeb3); + +export const updateDavId = createAction('UPDATE_DAV_ID'); + +export const registerDavIdFulfilled = createAction('REGISTER_DAV_ID_FULFILLED'); + +export const registerDavId = createAction('REGISTER_DAV_ID', registeredDavId); + +export const unregisteredDavId = createAction('UNREGISTERED_DAV_ID'); + +export const unlockWallet = createAction('UNLOCK_WALLET'); + +export const closeWalletDialog = createAction('CLOSE_WALLET_DIALOG'); + export const updateMapCoords = createAction('UPDATE_MAP_COORDS'); export const updateOrderDetails = createAction('UPDATE_ORDER_DETAILS'); diff --git a/src/lib/dav.js b/src/lib/dav.js new file mode 100644 index 0000000..f39a85a --- /dev/null +++ b/src/lib/dav.js @@ -0,0 +1,60 @@ +import store from '../store'; +import timeout from 'callback-timeout'; +import { + updateDavId, + unlockWallet, + unregisteredDavId, + registerDavIdFulfilled +} from '../actions'; +import { davJS, web3 } from '@davfoundation/dav-js'; + +let davSDK; + +export const initWeb3 = () => { + if(process.env.BLOCKCHAIN_TYPE === 'NONE') { + store.dispatch(registerDavIdFulfilled()); + return Promise.resolve('Blockchain is disabled'); + } + return new Promise (function (resolve, reject) { + web3.eth.getAccounts(timeout((error, accounts) => { + if(error) { + console.log(error); + store.dispatch(unlockWallet()); + resolve(error); + } else if(accounts.length > 0) { + let davId = accounts[0]; + store.dispatch(updateDavId({ davId })); + return isRegistered(davId); + } else { + // unlock metamask + store.dispatch(unlockWallet()); + console.log('The wallet locked, please unlock it to continue.'); + resolve('The wallet locked, please unlock it to continue.'); + } + reject(); + }, 1500)); + }); +}; + +export const isRegistered = (davId) => { + davSDK = new davJS(davId, davId); + davSDK.isRegistered().then((isRegistered) => { + if(isRegistered) { + store.dispatch(registerDavIdFulfilled()); + } else { + store.dispatch(unregisteredDavId()); + } + }).catch(err => { + console.log(err); + }); +}; + +export const registeredDavId = () => { + davSDK.registerSimple().then((isRegistered) => { + if(isRegistered === true) { + store.dispatch(registerDavIdFulfilled()); + } + }).catch(err => { + console.log(err); + }); +}; From 19370dd1fe38bf29c2736d1d2027de858834a8d0 Mon Sep 17 00:00:00 2001 From: srfrnk Date: Wed, 28 Mar 2018 08:52:58 +0300 Subject: [PATCH 030/180] fix: merge fix --- src/actions/index.js | 6 ------ src/containers/MissionContainer.jsx | 6 +++--- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/src/actions/index.js b/src/actions/index.js index 34d4e2e..b1c16fb 100644 --- a/src/actions/index.js +++ b/src/actions/index.js @@ -7,22 +7,16 @@ import { confirmTakeoff as apiConfirmTakeoff, } from '../lib/api'; -import { initWeb3, registeredDavId } from '../lib/dav'; - export const updateApp = createAction('UPDATE_APP'); export const updateStatus = createAction('UPDATE_STATUS', apiFetchStatus); export const updateStatusFulfilled = createAction('UPDATE_STATUS_FULFILLED'); -export const verifyDavId = createAction('VERIFY_DAV_ID', initWeb3); - export const updateDavId = createAction('UPDATE_DAV_ID'); export const registerDavIdFulfilled = createAction('REGISTER_DAV_ID_FULFILLED'); -export const registerDavId = createAction('REGISTER_DAV_ID', registeredDavId); - export const unregisteredDavId = createAction('UNREGISTERED_DAV_ID'); export const unlockWallet = createAction('UNLOCK_WALLET'); diff --git a/src/containers/MissionContainer.jsx b/src/containers/MissionContainer.jsx index eeca1b4..5d64a86 100644 --- a/src/containers/MissionContainer.jsx +++ b/src/containers/MissionContainer.jsx @@ -15,13 +15,13 @@ const matchStateToProps = (state) => { case 'dropoff': { const travellingDropoffAt = parseInt(mission.travelling_dropoff_at); const timeToDropoff = parseInt(mission.time_to_dropoff); - timeLeftInLeg = (travellingDropoffAt + timeToDropoff - Date.now())/60000; + timeLeftInLeg = (travellingDropoffAt + timeToDropoff - Date.now()) / 60000; break; } case 'pickup': { const vehicleSignedAt = parseInt(mission.vehicle_signed_at); const timeToPickup = parseInt(mission.time_to_pickup); - timeLeftInLeg = (vehicleSignedAt + timeToPickup - Date.now())/60000; + timeLeftInLeg = (vehicleSignedAt + timeToPickup - Date.now()) / 60000; break; } } @@ -31,7 +31,7 @@ const matchStateToProps = (state) => { props.missionComplete = mission.status === 'completed'; - props.price = mission.price; + props.price = parseFloat(mission.price); return props; }; From c4e99e5155e447c4899c7be422fc70e32626b9be Mon Sep 17 00:00:00 2001 From: srfrnk Date: Wed, 28 Mar 2018 10:10:02 +0300 Subject: [PATCH 031/180] feat: static coord for COEX-SITL --- src/components/OrderScreen.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/OrderScreen.jsx b/src/components/OrderScreen.jsx index f35cd1b..0dac66e 100644 --- a/src/components/OrderScreen.jsx +++ b/src/components/OrderScreen.jsx @@ -37,9 +37,9 @@ class OrderScreen extends Component { const { pickup, dropoff, packageSize } = this.state; return { pickup: pickup ? - { address: pickup.description, lat: pickup.location.lat, long: pickup.location.lng } : undefined, + { address: pickup.description, lat: 47.397669, long: 8.5444809 } : undefined, dropoff: dropoff ? - { lat: dropoff.lat, long: dropoff.lng } : undefined, + { lat: 47.3982004, long: 8.5448531 } : undefined, size: packageSize || undefined, weight: this.weightNode.value || undefined, pickup_at: this.pickupTimeNode.value || undefined From aa0fd2245fbea57a0f4bd13a7fc1b29816dfebe0 Mon Sep 17 00:00:00 2001 From: Anatoly T Date: Wed, 28 Mar 2018 16:47:34 +0300 Subject: [PATCH 032/180] feat: web3 integration with smart contracts --- package.json | 5 +- src/actions/index.js | 16 + src/build/contracts/BasicMission.json | 4172 +++++++++++++++++++ src/build/contracts/DAVToken.json | 3863 +++++++++++++++++ src/build/contracts/Identity.json | 4106 ++++++++++++++++++ src/components/OrderScreen.css | 31 + src/components/OrderScreen.jsx | 83 +- src/components/VehicleBid.jsx | 2 +- src/containers/OrderScreenContainer.jsx | 17 +- src/containers/SearchingScreenContainer.jsx | 4 +- src/lib/api.js | 4 +- src/lib/dav.js | 135 +- src/reducers/order.js | 17 +- src/reducers/settings.js | 15 +- webpack.dev.js | 2 +- webpack.prod.js | 2 +- webpack.stg.js | 2 +- 17 files changed, 12446 insertions(+), 30 deletions(-) create mode 100644 src/build/contracts/BasicMission.json create mode 100644 src/build/contracts/DAVToken.json create mode 100644 src/build/contracts/Identity.json diff --git a/package.json b/package.json index 471f957..439405e 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,7 @@ }, "dependencies": { "@turf/turf": "^5.1.6", + "callback-timeout": "^3.0.1", "mapbox-gl": "~0.44.1", "moment": "^2.20.1", "randomstring": "^1.1.5", @@ -32,7 +33,9 @@ "redux-actions": "^2.2.1", "redux-devtools-extension": "^2.13.2", "redux-promise-middleware": "5.0.0", - "turf": "^3.0.14" + "truffle-contract": "^3.0.4", + "turf": "^3.0.14", + "web3": "^1.0.0-beta.33" }, "devDependencies": { "babel-core": "^6.26.0", diff --git a/src/actions/index.js b/src/actions/index.js index b1c16fb..daef2b2 100644 --- a/src/actions/index.js +++ b/src/actions/index.js @@ -7,14 +7,24 @@ import { confirmTakeoff as apiConfirmTakeoff, } from '../lib/api'; +import { + initWeb3, + registerDavId as davRegisterDavId, + createMissionTransaction as davCreateMissionTransaction +} from '../lib/dav'; + export const updateApp = createAction('UPDATE_APP'); export const updateStatus = createAction('UPDATE_STATUS', apiFetchStatus); export const updateStatusFulfilled = createAction('UPDATE_STATUS_FULFILLED'); +export const verifyDavId = createAction('VERIFY_DAV_ID', initWeb3); + export const updateDavId = createAction('UPDATE_DAV_ID'); +export const registerDavId = createAction('REGISTER_DAV_ID', davRegisterDavId); + export const registerDavIdFulfilled = createAction('REGISTER_DAV_ID_FULFILLED'); export const unregisteredDavId = createAction('UNREGISTERED_DAV_ID'); @@ -43,6 +53,12 @@ export const chooseBidPending = createAction('CHOOSE_BID_PENDING'); export const chooseBidFulfilled = createAction('CHOOSE_BID_FULFILLED'); +export const createMissionTransaction = createAction('CREATE_MISSION_TRANSACTION', davCreateMissionTransaction); + +export const createMissionTransactionFulfilled = createAction('CREATE_MISSION_TRANSACTION_FULFILLED'); + +export const createMissionTransactionFailed = createAction('CREATE_MISSION_TRANSACTION_FAILED'); + export const confirmTakeoff = createAction( 'CONFIRM_TAKEOFF', apiConfirmTakeoff, diff --git a/src/build/contracts/BasicMission.json b/src/build/contracts/BasicMission.json new file mode 100644 index 0000000..e2751b1 --- /dev/null +++ b/src/build/contracts/BasicMission.json @@ -0,0 +1,4172 @@ +{ + "contractName": "BasicMission", + "abi": [ + { + "inputs": [ + { + "name": "_identityContract", + "type": "address" + }, + { + "name": "_davTokenContract", + "type": "address" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "name": "id", + "type": "bytes32" + }, + { + "indexed": false, + "name": "sellerId", + "type": "address" + }, + { + "indexed": false, + "name": "buyerId", + "type": "address" + } + ], + "name": "Create", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "name": "id", + "type": "bytes32" + } + ], + "name": "Signed", + "type": "event" + }, + { + "constant": false, + "inputs": [ + { + "name": "_sellerId", + "type": "address" + }, + { + "name": "_buyerId", + "type": "address" + }, + { + "name": "_cost", + "type": "uint256" + } + ], + "name": "create", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_missionId", + "type": "bytes32" + }, + { + "name": "_buyerId", + "type": "address" + } + ], + "name": "fulfilled", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x6060604052341561000f57600080fd5b6040516040806109708339810160405280805190602001909190805190602001909190505081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050506108a9806100c76000396000f30060606040526004361061004c576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806389198fed14610051578063ffe5725f14610097575b600080fd5b341561005c57600080fd5b61009560048080356000191690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506100f8565b005b34156100a257600080fd5b6100f6600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610290565b005b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630795736082336000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b15156101f157600080fd5b6102c65a03f1151561020257600080fd5b50505060405180519050151561021757600080fd5b6001806000846000191660001916815260200190815260200160002060040160006101000a81548160ff0219169083151502179055507f2563bf12e759147ae41a036dffeece03c4db05da3b738a30dd100821f498c57c8260405180826000191660001916815260200191505060405180910390a15050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630795736084336000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b151561038b57600080fd5b6102c65a03f1151561039c57600080fd5b5050506040518051905015156103b157600080fd5b81600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f8b2cb4f856000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b151561047757600080fd5b6102c65a03f1151561048857600080fd5b505050604051805190501015151561049f57600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15156105a057600080fd5b6102c65a03f115156105b157600080fd5b50505060405180519050504384846000808154809291906001019190505560405180807f42617369634d697373696f6e0000000000000000000000000000000000000000815250600c018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018281526020019450505050506040518091039020905060a0604051908101604052808573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018381526020016000151581525060016000836000191660001916815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604082015181600201556060820151816003015560808201518160040160006101000a81548160ff0219169083151502179055509050507f0d87513b68afc9f4f16272206a73bfde370c86b8e9dadd0e4ab99f763b1d61168185856040518084600019166000191681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405180910390a1505050505600a165627a7a72305820b1d27e8176e9927c6ed77d7273e70a623d44f2eab2732beb08627eb546719fe50029", + "deployedBytecode": "0x60606040526004361061004c576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806389198fed14610051578063ffe5725f14610097575b600080fd5b341561005c57600080fd5b61009560048080356000191690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506100f8565b005b34156100a257600080fd5b6100f6600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610290565b005b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630795736082336000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b15156101f157600080fd5b6102c65a03f1151561020257600080fd5b50505060405180519050151561021757600080fd5b6001806000846000191660001916815260200190815260200160002060040160006101000a81548160ff0219169083151502179055507f2563bf12e759147ae41a036dffeece03c4db05da3b738a30dd100821f498c57c8260405180826000191660001916815260200191505060405180910390a15050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630795736084336000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b151561038b57600080fd5b6102c65a03f1151561039c57600080fd5b5050506040518051905015156103b157600080fd5b81600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f8b2cb4f856000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b151561047757600080fd5b6102c65a03f1151561048857600080fd5b505050604051805190501015151561049f57600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15156105a057600080fd5b6102c65a03f115156105b157600080fd5b50505060405180519050504384846000808154809291906001019190505560405180807f42617369634d697373696f6e0000000000000000000000000000000000000000815250600c018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018281526020019450505050506040518091039020905060a0604051908101604052808573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018381526020016000151581525060016000836000191660001916815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604082015181600201556060820151816003015560808201518160040160006101000a81548160ff0219169083151502179055509050507f0d87513b68afc9f4f16272206a73bfde370c86b8e9dadd0e4ab99f763b1d61168185856040518084600019166000191681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405180910390a1505050505600a165627a7a72305820b1d27e8176e9927c6ed77d7273e70a623d44f2eab2732beb08627eb546719fe50029", + "sourceMap": "412:2348:0:-;;;1008:155;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1110:17;1099:8;;:28;;;;;;;;;;;;;;;;;;1141:17;1133:5;;:25;;;;;;;;;;;;;;;;;;1008:155;;412:2348;;;;;;", + "deployedSourceMap": "412:2348:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2377:380;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1424:795;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2377:380;2525:8;;;;;;;;;;;:24;;;2550:8;2560:10;2525:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2510:67;;;;;;;;2651:4;2619:8;:20;2628:10;2619:20;;;;;;;;;;;;;;;;;:29;;;:36;;;;;;;;;;;;;;;;;;2734:18;2741:10;2734:18;;;;;;;;;;;;;;;;;;;;;;;;2377:380;;:::o;1424:795::-;1870:17;1582:8;;;;;;;;;;;:24;;;1607:8;1617:10;1582:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1567:67;;;;;;;;1733:5;1700:8;;;;;;;;;;;:19;;;1720:8;1700:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:38;;1685:59;;;;;;;;1798:5;;;;;;;;;;;:18;;;1817:10;1829:4;1835:5;1798:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1916:12;1930:9;1941:8;1951:5;;:7;;;;;;;;;;;;1890:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1870:89;;1987:169;;;;;;;;;2011:9;1987:169;;;;;;2035:8;1987:169;;;;;;2057:5;1987:169;;;;2079:5;1987:169;;;;2102:5;1987:169;;;;;1965:8;:19;1974:9;1965:19;;;;;;;;;;;;;;;;;:191;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2176:38;2183:9;2194;2205:8;2176:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1424:795;;;;:::o", + "source": "pragma solidity ^0.4.15;\n\nimport './Identity.sol';\nimport './DAVToken.sol';\n\n\n/**\n * @title BasicMission\n * @dev The most basic contract for conducting Missions.\n *\n * This contract represents the very basic interface of a mission contract.\n * In the real world, there is very little reason to use this and not one of the\n * contracts that extend it. Consider this an interface, more than an implementation.\n */\ncontract BasicMission {\n\n uint256 private nonce;\n\n struct Mission {\n address seller;\n address buyer;\n uint256 cost;\n uint256 balance;\n bool isSigned;\n mapping (uint8 => bool) resolvers;\n }\n\n mapping (bytes32 => Mission) private missions;\n\n event Create(\n bytes32 id,\n address sellerId,\n address buyerId\n );\n\n event Signed(\n bytes32 id\n );\n\n DAVToken private token;\n Identity private identity;\n\n /**\n * @dev Constructor\n *\n * @param _identityContract address of the Identity contract\n * @param _davTokenContract address of the DAVToken contract\n */\n function BasicMission(Identity _identityContract, DAVToken _davTokenContract) public {\n identity = _identityContract;\n token = _davTokenContract;\n }\n\n /**\n * @notice Create a new mission\n * @param _sellerId The DAV Identity of the person providing the service\n * @param _buyerId The DAV Identity of the person ordering the service\n * @param _cost The total cost of the mission to be paid by buyer\n */\n function create(address _sellerId, address _buyerId, uint256 _cost) public {\n // Verify that message sender controls the buyer's wallet\n require(\n identity.verifyOwnership(_buyerId, msg.sender)\n );\n\n // Verify buyer's balance is sufficient\n require(\n identity.getBalance(_buyerId) >= _cost\n );\n\n // Transfer tokens to the mission contract\n token.transferFrom(msg.sender, this, _cost);\n\n // Create mission\n bytes32 missionId = keccak256('BasicMission', block.number, _sellerId, _buyerId, nonce++);\n missions[missionId] = Mission({\n seller: _sellerId,\n buyer: _buyerId,\n cost: _cost,\n balance: _cost,\n isSigned: false // TODO: Maybe use to approve fulfillment\n });\n\n // Event\n Create(missionId, _sellerId, _buyerId);\n }\n\n /**\n * @notice Fund a mission\n * @param _missionId The id of the mission\n * @param _buyerId The DAV Identity of the person ordering the service\n */\n function fulfilled(bytes32 _missionId, address _buyerId) public {\n // Verify that message sender controls the seller's wallet\n require(\n identity.verifyOwnership(_buyerId, msg.sender)\n );\n\n // designate mission as signed\n missions[_missionId].isSigned = true;\n // TODO: trunsfer funds from mission balance to seller\n\n // Event\n Signed(_missionId);\n }\n\n}\n", + "sourcePath": "/Users/anatolyt/projects/dav/contracts/contracts/BasicMission.sol", + "ast": { + "absolutePath": "/Users/anatolyt/projects/dav/contracts/contracts/BasicMission.sol", + "exportedSymbols": { + "BasicMission": [ + 152 + ] + }, + "id": 153, + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 1, + "literals": [ + "solidity", + "^", + "0.4", + ".15" + ], + "nodeType": "PragmaDirective", + "src": "0:24:0" + }, + { + "absolutePath": "/Users/anatolyt/projects/dav/contracts/contracts/Identity.sol", + "file": "./Identity.sol", + "id": 2, + "nodeType": "ImportDirective", + "scope": 153, + "sourceUnit": 440, + "src": "26:24:0", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "/Users/anatolyt/projects/dav/contracts/contracts/DAVToken.sol", + "file": "./DAVToken.sol", + "id": 3, + "nodeType": "ImportDirective", + "scope": 153, + "sourceUnit": 289, + "src": "51:24:0", + "symbolAliases": [], + "unitAlias": "" + }, + { + "baseContracts": [], + "contractDependencies": [], + "contractKind": "contract", + "documentation": "@title BasicMission\n@dev The most basic contract for conducting Missions.\n * This contract represents the very basic interface of a mission contract.\nIn the real world, there is very little reason to use this and not one of the\ncontracts that extend it. Consider this an interface, more than an implementation.", + "fullyImplemented": true, + "id": 152, + "linearizedBaseContracts": [ + 152 + ], + "name": "BasicMission", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": false, + "id": 5, + "name": "nonce", + "nodeType": "VariableDeclaration", + "scope": 152, + "src": "439:21:0", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "439:7:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "private" + }, + { + "canonicalName": "BasicMission.Mission", + "id": 20, + "members": [ + { + "constant": false, + "id": 7, + "name": "seller", + "nodeType": "VariableDeclaration", + "scope": 20, + "src": "486:14:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 6, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "486:7:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 9, + "name": "buyer", + "nodeType": "VariableDeclaration", + "scope": 20, + "src": "506:13:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 8, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "506:7:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 11, + "name": "cost", + "nodeType": "VariableDeclaration", + "scope": 20, + "src": "525:12:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "525:7:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 13, + "name": "balance", + "nodeType": "VariableDeclaration", + "scope": 20, + "src": "543:15:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "543:7:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 15, + "name": "isSigned", + "nodeType": "VariableDeclaration", + "scope": 20, + "src": "564:13:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 14, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "564:4:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 19, + "name": "resolvers", + "nodeType": "VariableDeclaration", + "scope": 20, + "src": "583:33:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint8_$_t_bool_$", + "typeString": "mapping(uint8 => bool)" + }, + "typeName": { + "id": 18, + "keyType": { + "id": 16, + "name": "uint8", + "nodeType": "ElementaryTypeName", + "src": "592:5:0", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "nodeType": "Mapping", + "src": "583:23:0", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint8_$_t_bool_$", + "typeString": "mapping(uint8 => bool)" + }, + "valueType": { + "id": 17, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "601:4:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + }, + "value": null, + "visibility": "internal" + } + ], + "name": "Mission", + "nodeType": "StructDefinition", + "scope": 152, + "src": "465:156:0", + "visibility": "public" + }, + { + "constant": false, + "id": 24, + "name": "missions", + "nodeType": "VariableDeclaration", + "scope": 152, + "src": "625:45:0", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Mission_$20_storage_$", + "typeString": "mapping(bytes32 => struct BasicMission.Mission storage ref)" + }, + "typeName": { + "id": 23, + "keyType": { + "id": 21, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "634:7:0", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Mapping", + "src": "625:28:0", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Mission_$20_storage_$", + "typeString": "mapping(bytes32 => struct BasicMission.Mission storage ref)" + }, + "valueType": { + "contractScope": null, + "id": 22, + "name": "Mission", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 20, + "src": "645:7:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Mission_$20_storage_ptr", + "typeString": "struct BasicMission.Mission storage pointer" + } + } + }, + "value": null, + "visibility": "private" + }, + { + "anonymous": false, + "id": 32, + "name": "Create", + "nodeType": "EventDefinition", + "parameters": { + "id": 31, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 26, + "indexed": false, + "name": "id", + "nodeType": "VariableDeclaration", + "scope": 32, + "src": "693:10:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 25, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "693:7:0", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 28, + "indexed": false, + "name": "sellerId", + "nodeType": "VariableDeclaration", + "scope": 32, + "src": "709:16:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 27, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "709:7:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 30, + "indexed": false, + "name": "buyerId", + "nodeType": "VariableDeclaration", + "scope": 32, + "src": "731:15:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 29, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "731:7:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "687:63:0" + }, + "src": "675:76:0" + }, + { + "anonymous": false, + "id": 36, + "name": "Signed", + "nodeType": "EventDefinition", + "parameters": { + "id": 35, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 34, + "indexed": false, + "name": "id", + "nodeType": "VariableDeclaration", + "scope": 36, + "src": "773:10:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 33, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "773:7:0", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "767:20:0" + }, + "src": "755:33:0" + }, + { + "constant": false, + "id": 38, + "name": "token", + "nodeType": "VariableDeclaration", + "scope": 152, + "src": "792:22:0", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_DAVToken_$288", + "typeString": "contract DAVToken" + }, + "typeName": { + "contractScope": null, + "id": 37, + "name": "DAVToken", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 288, + "src": "792:8:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_DAVToken_$288", + "typeString": "contract DAVToken" + } + }, + "value": null, + "visibility": "private" + }, + { + "constant": false, + "id": 40, + "name": "identity", + "nodeType": "VariableDeclaration", + "scope": 152, + "src": "818:25:0", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Identity_$439", + "typeString": "contract Identity" + }, + "typeName": { + "contractScope": null, + "id": 39, + "name": "Identity", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 439, + "src": "818:8:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Identity_$439", + "typeString": "contract Identity" + } + }, + "value": null, + "visibility": "private" + }, + { + "body": { + "id": 55, + "nodeType": "Block", + "src": "1093:70:0", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 49, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "id": 47, + "name": "identity", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 40, + "src": "1099:8:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Identity_$439", + "typeString": "contract Identity" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "id": 48, + "name": "_identityContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 42, + "src": "1110:17:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Identity_$439", + "typeString": "contract Identity" + } + }, + "src": "1099:28:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Identity_$439", + "typeString": "contract Identity" + } + }, + "id": 50, + "nodeType": "ExpressionStatement", + "src": "1099:28:0" + }, + { + "expression": { + "argumentTypes": null, + "id": 53, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "id": 51, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 38, + "src": "1133:5:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_DAVToken_$288", + "typeString": "contract DAVToken" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "id": 52, + "name": "_davTokenContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 44, + "src": "1141:17:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_DAVToken_$288", + "typeString": "contract DAVToken" + } + }, + "src": "1133:25:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_DAVToken_$288", + "typeString": "contract DAVToken" + } + }, + "id": 54, + "nodeType": "ExpressionStatement", + "src": "1133:25:0" + } + ] + }, + "id": 56, + "implemented": true, + "isConstructor": true, + "isDeclaredConst": false, + "modifiers": [], + "name": "BasicMission", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 45, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 42, + "name": "_identityContract", + "nodeType": "VariableDeclaration", + "scope": 56, + "src": "1030:26:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Identity_$439", + "typeString": "contract Identity" + }, + "typeName": { + "contractScope": null, + "id": 41, + "name": "Identity", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 439, + "src": "1030:8:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Identity_$439", + "typeString": "contract Identity" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 44, + "name": "_davTokenContract", + "nodeType": "VariableDeclaration", + "scope": 56, + "src": "1058:26:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_DAVToken_$288", + "typeString": "contract DAVToken" + }, + "typeName": { + "contractScope": null, + "id": 43, + "name": "DAVToken", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 288, + "src": "1058:8:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_DAVToken_$288", + "typeString": "contract DAVToken" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1029:56:0" + }, + "payable": false, + "returnParameters": { + "id": 46, + "nodeType": "ParameterList", + "parameters": [], + "src": "1093:0:0" + }, + "scope": 152, + "src": "1008:155:0", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 122, + "nodeType": "Block", + "src": "1499:720:0", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 68, + "name": "_buyerId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60, + "src": "1607:8:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 69, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1161, + "src": "1617:3:0", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 70, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1617:10:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 66, + "name": "identity", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 40, + "src": "1582:8:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Identity_$439", + "typeString": "contract Identity" + } + }, + "id": 67, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "verifyOwnership", + "nodeType": "MemberAccess", + "referencedDeclaration": 423, + "src": "1582:24:0", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_bool_$", + "typeString": "function (address,address) view external returns (bool)" + } + }, + "id": 71, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1582:46:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 65, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1164, + "src": "1567:7:0", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", + "typeString": "function (bool) pure" + } + }, + "id": 72, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1567:67:0", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 73, + "nodeType": "ExpressionStatement", + "src": "1567:67:0" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 80, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 77, + "name": "_buyerId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60, + "src": "1720:8:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 75, + "name": "identity", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 40, + "src": "1700:8:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Identity_$439", + "typeString": "contract Identity" + } + }, + "id": 76, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "getBalance", + "nodeType": "MemberAccess", + "referencedDeclaration": 406, + "src": "1700:19:0", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", + "typeString": "function (address) view external returns (uint256)" + } + }, + "id": 78, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1700:29:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "argumentTypes": null, + "id": 79, + "name": "_cost", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "1733:5:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1700:38:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 74, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1164, + "src": "1685:7:0", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", + "typeString": "function (bool) pure" + } + }, + "id": 81, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1685:59:0", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 82, + "nodeType": "ExpressionStatement", + "src": "1685:59:0" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 86, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1161, + "src": "1817:3:0", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 87, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1817:10:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 88, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1190, + "src": "1829:4:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_BasicMission_$152", + "typeString": "contract BasicMission" + } + }, + { + "argumentTypes": null, + "id": 89, + "name": "_cost", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "1835:5:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_contract$_BasicMission_$152", + "typeString": "contract BasicMission" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 83, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 38, + "src": "1798:5:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_DAVToken_$288", + "typeString": "contract DAVToken" + } + }, + "id": 85, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "transferFrom", + "nodeType": "MemberAccess", + "referencedDeclaration": 233, + "src": "1798:18:0", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$", + "typeString": "function (address,address,uint256) external returns (bool)" + } + }, + "id": 90, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1798:43:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 91, + "nodeType": "ExpressionStatement", + "src": "1798:43:0" + }, + { + "assignments": [ + 93 + ], + "declarations": [ + { + "constant": false, + "id": 93, + "name": "missionId", + "nodeType": "VariableDeclaration", + "scope": 123, + "src": "1870:17:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 92, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1870:7:0", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 103, + "initialValue": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "42617369634d697373696f6e", + "id": 95, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1900:14:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_6f28747ca3bf61320646bbe8fce0609ed0cb6ef483ba3b71713bc1d9ed5bd450", + "typeString": "literal_string \"BasicMission\"" + }, + "value": "BasicMission" + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 96, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1153, + "src": "1916:5:0", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 97, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "number", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1916:12:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 98, + "name": "_sellerId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58, + "src": "1930:9:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 99, + "name": "_buyerId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60, + "src": "1941:8:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 101, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": false, + "src": "1951:7:0", + "subExpression": { + "argumentTypes": null, + "id": 100, + "name": "nonce", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5, + "src": "1951:5:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_6f28747ca3bf61320646bbe8fce0609ed0cb6ef483ba3b71713bc1d9ed5bd450", + "typeString": "literal_string \"BasicMission\"" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 94, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1155, + "src": "1890:9:0", + "typeDescriptions": { + "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$", + "typeString": "function () pure returns (bytes32)" + } + }, + "id": 102, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1890:69:0", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "1870:89:0" + }, + { + "expression": { + "argumentTypes": null, + "id": 114, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 104, + "name": "missions", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 24, + "src": "1965:8:0", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Mission_$20_storage_$", + "typeString": "mapping(bytes32 => struct BasicMission.Mission storage ref)" + } + }, + "id": 106, + "indexExpression": { + "argumentTypes": null, + "id": 105, + "name": "missionId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 93, + "src": "1974:9:0", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "1965:19:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Mission_$20_storage", + "typeString": "struct BasicMission.Mission storage ref" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 108, + "name": "_sellerId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58, + "src": "2011:9:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 109, + "name": "_buyerId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60, + "src": "2035:8:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 110, + "name": "_cost", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "2057:5:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 111, + "name": "_cost", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "2079:5:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "hexValue": "66616c7365", + "id": 112, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2102:5:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + } + ], + "expression": { + "argumentTypes": null, + "id": 107, + "name": "Mission", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 20, + "src": "1987:7:0", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_struct$_Mission_$20_storage_ptr_$", + "typeString": "type(struct BasicMission.Mission storage pointer)" + } + }, + "id": 113, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "structConstructorCall", + "lValueRequested": false, + "names": [ + "seller", + "buyer", + "cost", + "balance", + "isSigned" + ], + "nodeType": "FunctionCall", + "src": "1987:169:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Mission_$20_memory", + "typeString": "struct BasicMission.Mission memory" + } + }, + "src": "1965:191:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Mission_$20_storage", + "typeString": "struct BasicMission.Mission storage ref" + } + }, + "id": 115, + "nodeType": "ExpressionStatement", + "src": "1965:191:0" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 117, + "name": "missionId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 93, + "src": "2183:9:0", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "argumentTypes": null, + "id": 118, + "name": "_sellerId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58, + "src": "2194:9:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 119, + "name": "_buyerId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60, + "src": "2205:8:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 116, + "name": "Create", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 32, + "src": "2176:6:0", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_address_$returns$__$", + "typeString": "function (bytes32,address,address)" + } + }, + "id": 120, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2176:38:0", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 121, + "nodeType": "ExpressionStatement", + "src": "2176:38:0" + } + ] + }, + "id": 123, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [], + "name": "create", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 63, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 58, + "name": "_sellerId", + "nodeType": "VariableDeclaration", + "scope": 123, + "src": "1440:17:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 57, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1440:7:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 60, + "name": "_buyerId", + "nodeType": "VariableDeclaration", + "scope": 123, + "src": "1459:16:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 59, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1459:7:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 62, + "name": "_cost", + "nodeType": "VariableDeclaration", + "scope": 123, + "src": "1477:13:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 61, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1477:7:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1439:52:0" + }, + "payable": false, + "returnParameters": { + "id": 64, + "nodeType": "ParameterList", + "parameters": [], + "src": "1499:0:0" + }, + "scope": 152, + "src": "1424:795:0", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 150, + "nodeType": "Block", + "src": "2441:316:0", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 133, + "name": "_buyerId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 127, + "src": "2550:8:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 134, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1161, + "src": "2560:3:0", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 135, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "2560:10:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 131, + "name": "identity", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 40, + "src": "2525:8:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Identity_$439", + "typeString": "contract Identity" + } + }, + "id": 132, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "verifyOwnership", + "nodeType": "MemberAccess", + "referencedDeclaration": 423, + "src": "2525:24:0", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_bool_$", + "typeString": "function (address,address) view external returns (bool)" + } + }, + "id": 136, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2525:46:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 130, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1164, + "src": "2510:7:0", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", + "typeString": "function (bool) pure" + } + }, + "id": 137, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2510:67:0", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 138, + "nodeType": "ExpressionStatement", + "src": "2510:67:0" + }, + { + "expression": { + "argumentTypes": null, + "id": 144, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 139, + "name": "missions", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 24, + "src": "2619:8:0", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Mission_$20_storage_$", + "typeString": "mapping(bytes32 => struct BasicMission.Mission storage ref)" + } + }, + "id": 141, + "indexExpression": { + "argumentTypes": null, + "id": 140, + "name": "_missionId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 125, + "src": "2628:10:0", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "2619:20:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Mission_$20_storage", + "typeString": "struct BasicMission.Mission storage ref" + } + }, + "id": 142, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberName": "isSigned", + "nodeType": "MemberAccess", + "referencedDeclaration": 15, + "src": "2619:29:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 143, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2651:4:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "src": "2619:36:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 145, + "nodeType": "ExpressionStatement", + "src": "2619:36:0" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 147, + "name": "_missionId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 125, + "src": "2741:10:0", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 146, + "name": "Signed", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 36, + "src": "2734:6:0", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$returns$__$", + "typeString": "function (bytes32)" + } + }, + "id": 148, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2734:18:0", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 149, + "nodeType": "ExpressionStatement", + "src": "2734:18:0" + } + ] + }, + "id": 151, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [], + "name": "fulfilled", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 128, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 125, + "name": "_missionId", + "nodeType": "VariableDeclaration", + "scope": 151, + "src": "2396:18:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 124, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2396:7:0", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 127, + "name": "_buyerId", + "nodeType": "VariableDeclaration", + "scope": 151, + "src": "2416:16:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 126, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2416:7:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2395:38:0" + }, + "payable": false, + "returnParameters": { + "id": 129, + "nodeType": "ParameterList", + "parameters": [], + "src": "2441:0:0" + }, + "scope": 152, + "src": "2377:380:0", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + } + ], + "scope": 153, + "src": "412:2348:0" + } + ], + "src": "0:2761:0" + }, + "legacyAST": { + "absolutePath": "/Users/anatolyt/projects/dav/contracts/contracts/BasicMission.sol", + "exportedSymbols": { + "BasicMission": [ + 152 + ] + }, + "id": 153, + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 1, + "literals": [ + "solidity", + "^", + "0.4", + ".15" + ], + "nodeType": "PragmaDirective", + "src": "0:24:0" + }, + { + "absolutePath": "/Users/anatolyt/projects/dav/contracts/contracts/Identity.sol", + "file": "./Identity.sol", + "id": 2, + "nodeType": "ImportDirective", + "scope": 153, + "sourceUnit": 440, + "src": "26:24:0", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "/Users/anatolyt/projects/dav/contracts/contracts/DAVToken.sol", + "file": "./DAVToken.sol", + "id": 3, + "nodeType": "ImportDirective", + "scope": 153, + "sourceUnit": 289, + "src": "51:24:0", + "symbolAliases": [], + "unitAlias": "" + }, + { + "baseContracts": [], + "contractDependencies": [], + "contractKind": "contract", + "documentation": "@title BasicMission\n@dev The most basic contract for conducting Missions.\n * This contract represents the very basic interface of a mission contract.\nIn the real world, there is very little reason to use this and not one of the\ncontracts that extend it. Consider this an interface, more than an implementation.", + "fullyImplemented": true, + "id": 152, + "linearizedBaseContracts": [ + 152 + ], + "name": "BasicMission", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": false, + "id": 5, + "name": "nonce", + "nodeType": "VariableDeclaration", + "scope": 152, + "src": "439:21:0", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "439:7:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "private" + }, + { + "canonicalName": "BasicMission.Mission", + "id": 20, + "members": [ + { + "constant": false, + "id": 7, + "name": "seller", + "nodeType": "VariableDeclaration", + "scope": 20, + "src": "486:14:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 6, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "486:7:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 9, + "name": "buyer", + "nodeType": "VariableDeclaration", + "scope": 20, + "src": "506:13:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 8, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "506:7:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 11, + "name": "cost", + "nodeType": "VariableDeclaration", + "scope": 20, + "src": "525:12:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "525:7:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 13, + "name": "balance", + "nodeType": "VariableDeclaration", + "scope": 20, + "src": "543:15:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "543:7:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 15, + "name": "isSigned", + "nodeType": "VariableDeclaration", + "scope": 20, + "src": "564:13:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 14, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "564:4:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 19, + "name": "resolvers", + "nodeType": "VariableDeclaration", + "scope": 20, + "src": "583:33:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint8_$_t_bool_$", + "typeString": "mapping(uint8 => bool)" + }, + "typeName": { + "id": 18, + "keyType": { + "id": 16, + "name": "uint8", + "nodeType": "ElementaryTypeName", + "src": "592:5:0", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "nodeType": "Mapping", + "src": "583:23:0", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint8_$_t_bool_$", + "typeString": "mapping(uint8 => bool)" + }, + "valueType": { + "id": 17, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "601:4:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + }, + "value": null, + "visibility": "internal" + } + ], + "name": "Mission", + "nodeType": "StructDefinition", + "scope": 152, + "src": "465:156:0", + "visibility": "public" + }, + { + "constant": false, + "id": 24, + "name": "missions", + "nodeType": "VariableDeclaration", + "scope": 152, + "src": "625:45:0", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Mission_$20_storage_$", + "typeString": "mapping(bytes32 => struct BasicMission.Mission storage ref)" + }, + "typeName": { + "id": 23, + "keyType": { + "id": 21, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "634:7:0", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Mapping", + "src": "625:28:0", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Mission_$20_storage_$", + "typeString": "mapping(bytes32 => struct BasicMission.Mission storage ref)" + }, + "valueType": { + "contractScope": null, + "id": 22, + "name": "Mission", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 20, + "src": "645:7:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Mission_$20_storage_ptr", + "typeString": "struct BasicMission.Mission storage pointer" + } + } + }, + "value": null, + "visibility": "private" + }, + { + "anonymous": false, + "id": 32, + "name": "Create", + "nodeType": "EventDefinition", + "parameters": { + "id": 31, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 26, + "indexed": false, + "name": "id", + "nodeType": "VariableDeclaration", + "scope": 32, + "src": "693:10:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 25, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "693:7:0", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 28, + "indexed": false, + "name": "sellerId", + "nodeType": "VariableDeclaration", + "scope": 32, + "src": "709:16:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 27, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "709:7:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 30, + "indexed": false, + "name": "buyerId", + "nodeType": "VariableDeclaration", + "scope": 32, + "src": "731:15:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 29, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "731:7:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "687:63:0" + }, + "src": "675:76:0" + }, + { + "anonymous": false, + "id": 36, + "name": "Signed", + "nodeType": "EventDefinition", + "parameters": { + "id": 35, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 34, + "indexed": false, + "name": "id", + "nodeType": "VariableDeclaration", + "scope": 36, + "src": "773:10:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 33, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "773:7:0", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "767:20:0" + }, + "src": "755:33:0" + }, + { + "constant": false, + "id": 38, + "name": "token", + "nodeType": "VariableDeclaration", + "scope": 152, + "src": "792:22:0", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_DAVToken_$288", + "typeString": "contract DAVToken" + }, + "typeName": { + "contractScope": null, + "id": 37, + "name": "DAVToken", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 288, + "src": "792:8:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_DAVToken_$288", + "typeString": "contract DAVToken" + } + }, + "value": null, + "visibility": "private" + }, + { + "constant": false, + "id": 40, + "name": "identity", + "nodeType": "VariableDeclaration", + "scope": 152, + "src": "818:25:0", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Identity_$439", + "typeString": "contract Identity" + }, + "typeName": { + "contractScope": null, + "id": 39, + "name": "Identity", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 439, + "src": "818:8:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Identity_$439", + "typeString": "contract Identity" + } + }, + "value": null, + "visibility": "private" + }, + { + "body": { + "id": 55, + "nodeType": "Block", + "src": "1093:70:0", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 49, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "id": 47, + "name": "identity", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 40, + "src": "1099:8:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Identity_$439", + "typeString": "contract Identity" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "id": 48, + "name": "_identityContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 42, + "src": "1110:17:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Identity_$439", + "typeString": "contract Identity" + } + }, + "src": "1099:28:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Identity_$439", + "typeString": "contract Identity" + } + }, + "id": 50, + "nodeType": "ExpressionStatement", + "src": "1099:28:0" + }, + { + "expression": { + "argumentTypes": null, + "id": 53, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "id": 51, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 38, + "src": "1133:5:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_DAVToken_$288", + "typeString": "contract DAVToken" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "id": 52, + "name": "_davTokenContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 44, + "src": "1141:17:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_DAVToken_$288", + "typeString": "contract DAVToken" + } + }, + "src": "1133:25:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_DAVToken_$288", + "typeString": "contract DAVToken" + } + }, + "id": 54, + "nodeType": "ExpressionStatement", + "src": "1133:25:0" + } + ] + }, + "id": 56, + "implemented": true, + "isConstructor": true, + "isDeclaredConst": false, + "modifiers": [], + "name": "BasicMission", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 45, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 42, + "name": "_identityContract", + "nodeType": "VariableDeclaration", + "scope": 56, + "src": "1030:26:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Identity_$439", + "typeString": "contract Identity" + }, + "typeName": { + "contractScope": null, + "id": 41, + "name": "Identity", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 439, + "src": "1030:8:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Identity_$439", + "typeString": "contract Identity" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 44, + "name": "_davTokenContract", + "nodeType": "VariableDeclaration", + "scope": 56, + "src": "1058:26:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_DAVToken_$288", + "typeString": "contract DAVToken" + }, + "typeName": { + "contractScope": null, + "id": 43, + "name": "DAVToken", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 288, + "src": "1058:8:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_DAVToken_$288", + "typeString": "contract DAVToken" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1029:56:0" + }, + "payable": false, + "returnParameters": { + "id": 46, + "nodeType": "ParameterList", + "parameters": [], + "src": "1093:0:0" + }, + "scope": 152, + "src": "1008:155:0", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 122, + "nodeType": "Block", + "src": "1499:720:0", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 68, + "name": "_buyerId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60, + "src": "1607:8:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 69, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1161, + "src": "1617:3:0", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 70, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1617:10:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 66, + "name": "identity", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 40, + "src": "1582:8:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Identity_$439", + "typeString": "contract Identity" + } + }, + "id": 67, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "verifyOwnership", + "nodeType": "MemberAccess", + "referencedDeclaration": 423, + "src": "1582:24:0", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_bool_$", + "typeString": "function (address,address) view external returns (bool)" + } + }, + "id": 71, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1582:46:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 65, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1164, + "src": "1567:7:0", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", + "typeString": "function (bool) pure" + } + }, + "id": 72, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1567:67:0", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 73, + "nodeType": "ExpressionStatement", + "src": "1567:67:0" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 80, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 77, + "name": "_buyerId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60, + "src": "1720:8:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 75, + "name": "identity", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 40, + "src": "1700:8:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Identity_$439", + "typeString": "contract Identity" + } + }, + "id": 76, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "getBalance", + "nodeType": "MemberAccess", + "referencedDeclaration": 406, + "src": "1700:19:0", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", + "typeString": "function (address) view external returns (uint256)" + } + }, + "id": 78, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1700:29:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "argumentTypes": null, + "id": 79, + "name": "_cost", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "1733:5:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1700:38:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 74, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1164, + "src": "1685:7:0", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", + "typeString": "function (bool) pure" + } + }, + "id": 81, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1685:59:0", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 82, + "nodeType": "ExpressionStatement", + "src": "1685:59:0" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 86, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1161, + "src": "1817:3:0", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 87, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1817:10:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 88, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1190, + "src": "1829:4:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_BasicMission_$152", + "typeString": "contract BasicMission" + } + }, + { + "argumentTypes": null, + "id": 89, + "name": "_cost", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "1835:5:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_contract$_BasicMission_$152", + "typeString": "contract BasicMission" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 83, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 38, + "src": "1798:5:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_DAVToken_$288", + "typeString": "contract DAVToken" + } + }, + "id": 85, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "transferFrom", + "nodeType": "MemberAccess", + "referencedDeclaration": 233, + "src": "1798:18:0", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$", + "typeString": "function (address,address,uint256) external returns (bool)" + } + }, + "id": 90, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1798:43:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 91, + "nodeType": "ExpressionStatement", + "src": "1798:43:0" + }, + { + "assignments": [ + 93 + ], + "declarations": [ + { + "constant": false, + "id": 93, + "name": "missionId", + "nodeType": "VariableDeclaration", + "scope": 123, + "src": "1870:17:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 92, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1870:7:0", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 103, + "initialValue": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "42617369634d697373696f6e", + "id": 95, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1900:14:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_6f28747ca3bf61320646bbe8fce0609ed0cb6ef483ba3b71713bc1d9ed5bd450", + "typeString": "literal_string \"BasicMission\"" + }, + "value": "BasicMission" + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 96, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1153, + "src": "1916:5:0", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 97, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "number", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1916:12:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 98, + "name": "_sellerId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58, + "src": "1930:9:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 99, + "name": "_buyerId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60, + "src": "1941:8:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 101, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": false, + "src": "1951:7:0", + "subExpression": { + "argumentTypes": null, + "id": 100, + "name": "nonce", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5, + "src": "1951:5:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_6f28747ca3bf61320646bbe8fce0609ed0cb6ef483ba3b71713bc1d9ed5bd450", + "typeString": "literal_string \"BasicMission\"" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 94, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1155, + "src": "1890:9:0", + "typeDescriptions": { + "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$", + "typeString": "function () pure returns (bytes32)" + } + }, + "id": 102, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1890:69:0", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "1870:89:0" + }, + { + "expression": { + "argumentTypes": null, + "id": 114, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 104, + "name": "missions", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 24, + "src": "1965:8:0", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Mission_$20_storage_$", + "typeString": "mapping(bytes32 => struct BasicMission.Mission storage ref)" + } + }, + "id": 106, + "indexExpression": { + "argumentTypes": null, + "id": 105, + "name": "missionId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 93, + "src": "1974:9:0", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "1965:19:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Mission_$20_storage", + "typeString": "struct BasicMission.Mission storage ref" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 108, + "name": "_sellerId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58, + "src": "2011:9:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 109, + "name": "_buyerId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60, + "src": "2035:8:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 110, + "name": "_cost", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "2057:5:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 111, + "name": "_cost", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "2079:5:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "hexValue": "66616c7365", + "id": 112, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2102:5:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + } + ], + "expression": { + "argumentTypes": null, + "id": 107, + "name": "Mission", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 20, + "src": "1987:7:0", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_struct$_Mission_$20_storage_ptr_$", + "typeString": "type(struct BasicMission.Mission storage pointer)" + } + }, + "id": 113, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "structConstructorCall", + "lValueRequested": false, + "names": [ + "seller", + "buyer", + "cost", + "balance", + "isSigned" + ], + "nodeType": "FunctionCall", + "src": "1987:169:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Mission_$20_memory", + "typeString": "struct BasicMission.Mission memory" + } + }, + "src": "1965:191:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Mission_$20_storage", + "typeString": "struct BasicMission.Mission storage ref" + } + }, + "id": 115, + "nodeType": "ExpressionStatement", + "src": "1965:191:0" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 117, + "name": "missionId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 93, + "src": "2183:9:0", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "argumentTypes": null, + "id": 118, + "name": "_sellerId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58, + "src": "2194:9:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 119, + "name": "_buyerId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60, + "src": "2205:8:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 116, + "name": "Create", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 32, + "src": "2176:6:0", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_address_$returns$__$", + "typeString": "function (bytes32,address,address)" + } + }, + "id": 120, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2176:38:0", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 121, + "nodeType": "ExpressionStatement", + "src": "2176:38:0" + } + ] + }, + "id": 123, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [], + "name": "create", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 63, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 58, + "name": "_sellerId", + "nodeType": "VariableDeclaration", + "scope": 123, + "src": "1440:17:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 57, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1440:7:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 60, + "name": "_buyerId", + "nodeType": "VariableDeclaration", + "scope": 123, + "src": "1459:16:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 59, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1459:7:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 62, + "name": "_cost", + "nodeType": "VariableDeclaration", + "scope": 123, + "src": "1477:13:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 61, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1477:7:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1439:52:0" + }, + "payable": false, + "returnParameters": { + "id": 64, + "nodeType": "ParameterList", + "parameters": [], + "src": "1499:0:0" + }, + "scope": 152, + "src": "1424:795:0", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 150, + "nodeType": "Block", + "src": "2441:316:0", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 133, + "name": "_buyerId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 127, + "src": "2550:8:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 134, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1161, + "src": "2560:3:0", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 135, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "2560:10:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 131, + "name": "identity", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 40, + "src": "2525:8:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Identity_$439", + "typeString": "contract Identity" + } + }, + "id": 132, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "verifyOwnership", + "nodeType": "MemberAccess", + "referencedDeclaration": 423, + "src": "2525:24:0", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_bool_$", + "typeString": "function (address,address) view external returns (bool)" + } + }, + "id": 136, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2525:46:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 130, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1164, + "src": "2510:7:0", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", + "typeString": "function (bool) pure" + } + }, + "id": 137, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2510:67:0", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 138, + "nodeType": "ExpressionStatement", + "src": "2510:67:0" + }, + { + "expression": { + "argumentTypes": null, + "id": 144, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 139, + "name": "missions", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 24, + "src": "2619:8:0", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Mission_$20_storage_$", + "typeString": "mapping(bytes32 => struct BasicMission.Mission storage ref)" + } + }, + "id": 141, + "indexExpression": { + "argumentTypes": null, + "id": 140, + "name": "_missionId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 125, + "src": "2628:10:0", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "2619:20:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Mission_$20_storage", + "typeString": "struct BasicMission.Mission storage ref" + } + }, + "id": 142, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberName": "isSigned", + "nodeType": "MemberAccess", + "referencedDeclaration": 15, + "src": "2619:29:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 143, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2651:4:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "src": "2619:36:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 145, + "nodeType": "ExpressionStatement", + "src": "2619:36:0" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 147, + "name": "_missionId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 125, + "src": "2741:10:0", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 146, + "name": "Signed", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 36, + "src": "2734:6:0", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$returns$__$", + "typeString": "function (bytes32)" + } + }, + "id": 148, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2734:18:0", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 149, + "nodeType": "ExpressionStatement", + "src": "2734:18:0" + } + ] + }, + "id": 151, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [], + "name": "fulfilled", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 128, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 125, + "name": "_missionId", + "nodeType": "VariableDeclaration", + "scope": 151, + "src": "2396:18:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 124, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2396:7:0", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 127, + "name": "_buyerId", + "nodeType": "VariableDeclaration", + "scope": 151, + "src": "2416:16:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 126, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2416:7:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2395:38:0" + }, + "payable": false, + "returnParameters": { + "id": 129, + "nodeType": "ParameterList", + "parameters": [], + "src": "2441:0:0" + }, + "scope": 152, + "src": "2377:380:0", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + } + ], + "scope": 153, + "src": "412:2348:0" + } + ], + "src": "0:2761:0" + }, + "compiler": { + "name": "solc", + "version": "0.4.19+commit.c4cbbb05.Emscripten.clang" + }, + "networks": { + "1522233337963": { + "events": {}, + "links": {}, + "address": "0x9561c133dd8580860b6b7e504bc5aa500f0f06a7", + "transactionHash": "0xfb92e671ea947a26722be6d74755dd9195725d43115c8b665ac3dbc126861581" + }, + "1522241052538": { + "events": {}, + "links": {}, + "address": "0x9561c133dd8580860b6b7e504bc5aa500f0f06a7", + "transactionHash": "0xfb92e671ea947a26722be6d74755dd9195725d43115c8b665ac3dbc126861581" + } + }, + "schemaVersion": "2.0.0", + "updatedAt": "2018-03-28T12:44:25.020Z" +} \ No newline at end of file diff --git a/src/build/contracts/DAVToken.json b/src/build/contracts/DAVToken.json new file mode 100644 index 0000000..7da7e40 --- /dev/null +++ b/src/build/contracts/DAVToken.json @@ -0,0 +1,3863 @@ +{ + "contractName": "DAVToken", + "abi": [ + { + "constant": true, + "inputs": [], + "name": "name", + "outputs": [ + { + "name": "", + "type": "string" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "INITIAL_SUPPLY", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "decimals", + "outputs": [ + { + "name": "", + "type": "uint8" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [], + "name": "unpause", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "paused", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "_owner", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "name": "balance", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [], + "name": "pause", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "owner", + "outputs": [ + { + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "symbol", + "outputs": [ + { + "name": "", + "type": "string" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "_owner", + "type": "address" + }, + { + "name": "_spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [], + "name": "Pause", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "Unpause", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "from", + "type": "address" + }, + { + "indexed": true, + "name": "to", + "type": "address" + }, + { + "indexed": false, + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "constant": false, + "inputs": [ + { + "name": "_to", + "type": "address" + }, + { + "name": "_value", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_from", + "type": "address" + }, + { + "name": "_to", + "type": "address" + }, + { + "name": "_value", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_spender", + "type": "address" + }, + { + "name": "_value", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_spender", + "type": "address" + }, + { + "name": "_addedValue", + "type": "uint256" + } + ], + "name": "increaseApproval", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_spender", + "type": "address" + }, + { + "name": "_subtractedValue", + "type": "uint256" + } + ], + "name": "decreaseApproval", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x60606040526000600360146101000a81548160ff021916908315150217905550341561002a57600080fd5b33600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601260ff16600a0a620f424002600181905550601260ff16600a0a620f4240026000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611731806100dc6000396000f3006060604052600436106100f1576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146100f6578063095ea7b31461018457806318160ddd146101de57806323b872dd146102075780632ff2e9dc14610280578063313ce567146102a95780633f4ba83a146102d85780635c975abb146102ed578063661884631461031a57806370a08231146103745780638456cb59146103c15780638da5cb5b146103d657806395d89b411461042b578063a9059cbb146104b9578063d73dd62314610513578063dd62ed3e1461056d578063f2fde38b146105d9575b600080fd5b341561010157600080fd5b610109610612565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561014957808201518184015260208101905061012e565b50505050905090810190601f1680156101765780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561018f57600080fd5b6101c4600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061064b565b604051808215151515815260200191505060405180910390f35b34156101e957600080fd5b6101f161067b565b6040518082815260200191505060405180910390f35b341561021257600080fd5b610266600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610685565b604051808215151515815260200191505060405180910390f35b341561028b57600080fd5b6102936106b7565b6040518082815260200191505060405180910390f35b34156102b457600080fd5b6102bc6106c7565b604051808260ff1660ff16815260200191505060405180910390f35b34156102e357600080fd5b6102eb6106cc565b005b34156102f857600080fd5b61030061078c565b604051808215151515815260200191505060405180910390f35b341561032557600080fd5b61035a600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061079f565b604051808215151515815260200191505060405180910390f35b341561037f57600080fd5b6103ab600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506107cf565b6040518082815260200191505060405180910390f35b34156103cc57600080fd5b6103d4610817565b005b34156103e157600080fd5b6103e96108d8565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561043657600080fd5b61043e6108fe565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561047e578082015181840152602081019050610463565b50505050905090810190601f1680156104ab5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156104c457600080fd5b6104f9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610937565b604051808215151515815260200191505060405180910390f35b341561051e57600080fd5b610553600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610967565b604051808215151515815260200191505060405180910390f35b341561057857600080fd5b6105c3600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610997565b6040518082815260200191505060405180910390f35b34156105e457600080fd5b610610600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610a1e565b005b6040805190810160405280600981526020017f44415620546f6b656e000000000000000000000000000000000000000000000081525081565b6000600360149054906101000a900460ff1615151561066957600080fd5b6106738383610b76565b905092915050565b6000600154905090565b6000600360149054906101000a900460ff161515156106a357600080fd5b6106ae848484610c68565b90509392505050565b601260ff16600a0a620f42400281565b601281565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561072857600080fd5b600360149054906101000a900460ff16151561074357600080fd5b6000600360146101000a81548160ff0219169083151502179055507f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a1565b600360149054906101000a900460ff1681565b6000600360149054906101000a900460ff161515156107bd57600080fd5b6107c78383611022565b905092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561087357600080fd5b600360149054906101000a900460ff1615151561088f57600080fd5b6001600360146101000a81548160ff0219169083151502179055507f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a1565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6040805190810160405280600381526020017f444156000000000000000000000000000000000000000000000000000000000081525081565b6000600360149054906101000a900460ff1615151561095557600080fd5b61095f83836112b3565b905092915050565b6000600360149054906101000a900460ff1615151561098557600080fd5b61098f83836114d2565b905092915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610a7a57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515610ab657600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515610ca557600080fd5b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515610cf257600080fd5b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515610d7d57600080fd5b610dce826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116ce90919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610e61826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116e790919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f3282600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116ce90919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b600080600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905080831115611133576000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506111c7565b61114683826116ce90919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600191505092915050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156112f057600080fd5b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115151561133d57600080fd5b61138e826000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116ce90919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611421826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116e790919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b600061156382600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116e790919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b60008282111515156116dc57fe5b818303905092915050565b60008082840190508381101515156116fb57fe5b80915050929150505600a165627a7a72305820e95b1643740c167725737e72e91ca24d77e496c685d86bd8e685acc97d684a970029", + "deployedBytecode": "0x6060604052600436106100f1576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146100f6578063095ea7b31461018457806318160ddd146101de57806323b872dd146102075780632ff2e9dc14610280578063313ce567146102a95780633f4ba83a146102d85780635c975abb146102ed578063661884631461031a57806370a08231146103745780638456cb59146103c15780638da5cb5b146103d657806395d89b411461042b578063a9059cbb146104b9578063d73dd62314610513578063dd62ed3e1461056d578063f2fde38b146105d9575b600080fd5b341561010157600080fd5b610109610612565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561014957808201518184015260208101905061012e565b50505050905090810190601f1680156101765780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561018f57600080fd5b6101c4600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061064b565b604051808215151515815260200191505060405180910390f35b34156101e957600080fd5b6101f161067b565b6040518082815260200191505060405180910390f35b341561021257600080fd5b610266600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610685565b604051808215151515815260200191505060405180910390f35b341561028b57600080fd5b6102936106b7565b6040518082815260200191505060405180910390f35b34156102b457600080fd5b6102bc6106c7565b604051808260ff1660ff16815260200191505060405180910390f35b34156102e357600080fd5b6102eb6106cc565b005b34156102f857600080fd5b61030061078c565b604051808215151515815260200191505060405180910390f35b341561032557600080fd5b61035a600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061079f565b604051808215151515815260200191505060405180910390f35b341561037f57600080fd5b6103ab600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506107cf565b6040518082815260200191505060405180910390f35b34156103cc57600080fd5b6103d4610817565b005b34156103e157600080fd5b6103e96108d8565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561043657600080fd5b61043e6108fe565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561047e578082015181840152602081019050610463565b50505050905090810190601f1680156104ab5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156104c457600080fd5b6104f9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610937565b604051808215151515815260200191505060405180910390f35b341561051e57600080fd5b610553600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610967565b604051808215151515815260200191505060405180910390f35b341561057857600080fd5b6105c3600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610997565b6040518082815260200191505060405180910390f35b34156105e457600080fd5b610610600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610a1e565b005b6040805190810160405280600981526020017f44415620546f6b656e000000000000000000000000000000000000000000000081525081565b6000600360149054906101000a900460ff1615151561066957600080fd5b6106738383610b76565b905092915050565b6000600154905090565b6000600360149054906101000a900460ff161515156106a357600080fd5b6106ae848484610c68565b90509392505050565b601260ff16600a0a620f42400281565b601281565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561072857600080fd5b600360149054906101000a900460ff16151561074357600080fd5b6000600360146101000a81548160ff0219169083151502179055507f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a1565b600360149054906101000a900460ff1681565b6000600360149054906101000a900460ff161515156107bd57600080fd5b6107c78383611022565b905092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561087357600080fd5b600360149054906101000a900460ff1615151561088f57600080fd5b6001600360146101000a81548160ff0219169083151502179055507f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a1565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6040805190810160405280600381526020017f444156000000000000000000000000000000000000000000000000000000000081525081565b6000600360149054906101000a900460ff1615151561095557600080fd5b61095f83836112b3565b905092915050565b6000600360149054906101000a900460ff1615151561098557600080fd5b61098f83836114d2565b905092915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610a7a57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515610ab657600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515610ca557600080fd5b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515610cf257600080fd5b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515610d7d57600080fd5b610dce826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116ce90919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610e61826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116e790919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f3282600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116ce90919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b600080600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905080831115611133576000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506111c7565b61114683826116ce90919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600191505092915050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156112f057600080fd5b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115151561133d57600080fd5b61138e826000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116ce90919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611421826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116e790919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b600061156382600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116e790919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b60008282111515156116dc57fe5b818303905092915050565b60008082840190508381101515156116fb57fe5b80915050929150505600a165627a7a72305820e95b1643740c167725737e72e91ca24d77e496c685d86bd8e685acc97d684a970029", + "sourceMap": "233:3451:1:-;;;268:5:5;247:26;;;;;;;;;;;;;;;;;;;;813:110:1;;;;;;;;509:10:7;501:5;;:18;;;;;;;;;;;;;;;;;;539:2:1;603:17;;597:2;:23;586:7;:35;846:12;:29;;;;539:2;603:17;;597:2;:23;586:7;:35;881:8;:20;890:10;881:20;;;;;;;;;;;;;;;:37;;;;233:3451;;;;;;", + "deployedSourceMap": "233:3451:1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;420:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:2;8:100;;;99:1;94:3;90;84:5;80:1;75:3;71;64:6;52:2;49:1;45:3;40:15;;8:100;;;12:14;3:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2270:136:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;371:83:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1486:158:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;545:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;506:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;833:87:5;;;;;;;;;;;;;;247:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3503:179:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1189:107:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;666:85:5;;;;;;;;;;;;;;238:20:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;465:37:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:2;8:100;;;99:1;94:3;90;84:5;80:1;75:3;71;64:6;52:2;49:1;45:3;40:15;;8:100;;;12:14;3:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1080:128:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2869:169;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2300:126:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;832:169:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;420:41:1;;;;;;;;;;;;;;;;;;;;:::o;2270:136::-;2351:4;416:6:5;;;;;;;;;;;415:7;407:16;;;;;;;;2370:31:1;2384:8;2394:6;2370:13;:31::i;:::-;2363:38;;2270:136;;;;:::o;371:83:8:-;415:7;437:12;;430:19;;371:83;:::o;1486:158:1:-;1582:4;416:6:5;;;;;;;;;;;415:7;407:16;;;;;;;;1601:38:1;1620:5;1627:3;1632:6;1601:18;:38::i;:::-;1594:45;;1486:158;;;;;:::o;545:76::-;539:2;603:17;;597:2;:23;586:7;:35;545:76;:::o;506:35::-;539:2;506:35;:::o;833:87:5:-;653:5:7;;;;;;;;;;;639:19;;:10;:19;;;631:28;;;;;;;;568:6:5;;;;;;;;;;;560:15;;;;;;;;895:5;886:6;;:14;;;;;;;;;;;;;;;;;;906:9;;;;;;;;;;833:87::o;247:26::-;;;;;;;;;;;;;:::o;3503:179:1:-;3600:12;416:6:5;;;;;;;;;;;415:7;407:16;;;;;;;;3627:50:1;3650:8;3660:16;3627:22;:50::i;:::-;3620:57;;3503:179;;;;:::o;1189:107:8:-;1245:15;1275:8;:16;1284:6;1275:16;;;;;;;;;;;;;;;;1268:23;;1189:107;;;:::o;666:85:5:-;653:5:7;;;;;;;;;;;639:19;;:10;:19;;;631:28;;;;;;;;416:6:5;;;;;;;;;;;415:7;407:16;;;;;;;;729:4;720:6;;:13;;;;;;;;;;;;;;;;;;739:7;;;;;;;;;;666:85::o;238:20:7:-;;;;;;;;;;;;;:::o;465:37:1:-;;;;;;;;;;;;;;;;;;;;:::o;1080:128::-;1157:4;416:6:5;;;;;;;;;;;415:7;407:16;;;;;;;;1176:27:1;1191:3;1196:6;1176:14;:27::i;:::-;1169:34;;1080:128;;;;:::o;2869:169::-;2961:12;416:6:5;;;;;;;;;;;415:7;407:16;;;;;;;;2988:45:1;3011:8;3021:11;2988:22;:45::i;:::-;2981:52;;2869:169;;;;:::o;2300:126:11:-;2374:7;2396;:15;2404:6;2396:15;;;;;;;;;;;;;;;:25;2412:8;2396:25;;;;;;;;;;;;;;;;2389:32;;2300:126;;;;:::o;832:169:7:-;653:5;;;;;;;;;;;639:19;;:10;:19;;;631:28;;;;;;;;928:1;908:22;;:8;:22;;;;900:31;;;;;;;;965:8;937:37;;958:5;;;;;;;;;;;937:37;;;;;;;;;;;;988:8;980:5;;:16;;;;;;;;;;;;;;;;;;832:169;:::o;1798:183:11:-;1865:4;1909:6;1877:7;:19;1885:10;1877:19;;;;;;;;;;;;;;;:29;1897:8;1877:29;;;;;;;;;;;;;;;:38;;;;1942:8;1921:38;;1930:10;1921:38;;;1952:6;1921:38;;;;;;;;;;;;;;;;;;1972:4;1965:11;;1798:183;;;;:::o;736:439::-;818:4;853:1;838:17;;:3;:17;;;;830:26;;;;;;;;880:8;:15;889:5;880:15;;;;;;;;;;;;;;;;870:6;:25;;862:34;;;;;;;;920:7;:14;928:5;920:14;;;;;;;;;;;;;;;:26;935:10;920:26;;;;;;;;;;;;;;;;910:6;:36;;902:45;;;;;;;;972:27;992:6;972:8;:15;981:5;972:15;;;;;;;;;;;;;;;;:19;;:27;;;;:::i;:::-;954:8;:15;963:5;954:15;;;;;;;;;;;;;;;:45;;;;1021:25;1039:6;1021:8;:13;1030:3;1021:13;;;;;;;;;;;;;;;;:17;;:25;;;;:::i;:::-;1005:8;:13;1014:3;1005:13;;;;;;;;;;;;;;;:41;;;;1081:38;1112:6;1081:7;:14;1089:5;1081:14;;;;;;;;;;;;;;;:26;1096:10;1081:26;;;;;;;;;;;;;;;;:30;;:38;;;;:::i;:::-;1052:7;:14;1060:5;1052:14;;;;;;;;;;;;;;;:26;1067:10;1052:26;;;;;;;;;;;;;;;:67;;;;1141:3;1125:28;;1134:5;1125:28;;;1146:6;1125:28;;;;;;;;;;;;;;;;;;1166:4;1159:11;;736:439;;;;;:::o;3602:398::-;3685:4;3697:13;3713:7;:19;3721:10;3713:19;;;;;;;;;;;;;;;:29;3733:8;3713:29;;;;;;;;;;;;;;;;3697:45;;3771:8;3752:16;:27;3748:164;;;3821:1;3789:7;:19;3797:10;3789:19;;;;;;;;;;;;;;;:29;3809:8;3789:29;;;;;;;;;;;;;;;:33;;;;3748:164;;;3875:30;3888:16;3875:8;:12;;:30;;;;:::i;:::-;3843:7;:19;3851:10;3843:19;;;;;;;;;;;;;;;:29;3863:8;3843:29;;;;;;;;;;;;;;;:62;;;;3748:164;3938:8;3917:61;;3926:10;3917:61;;;3948:7;:19;3956:10;3948:19;;;;;;;;;;;;;;;:29;3968:8;3948:29;;;;;;;;;;;;;;;;3917:61;;;;;;;;;;;;;;;;;;3991:4;3984:11;;3602:398;;;;;:::o;608:379:8:-;671:4;706:1;691:17;;:3;:17;;;;683:26;;;;;;;;733:8;:20;742:10;733:20;;;;;;;;;;;;;;;;723:6;:30;;715:39;;;;;;;;847:32;872:6;847:8;:20;856:10;847:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;824:8;:20;833:10;824:20;;;;;;;;;;;;;;;:55;;;;901:25;919:6;901:8;:13;910:3;901:13;;;;;;;;;;;;;;;;:17;;:25;;;;:::i;:::-;885:8;:13;894:3;885:13;;;;;;;;;;;;;;;:41;;;;953:3;932:33;;941:10;932:33;;;958:6;932:33;;;;;;;;;;;;;;;;;;978:4;971:11;;608:379;;;;:::o;2883:257:11:-;2961:4;3005:46;3039:11;3005:7;:19;3013:10;3005:19;;;;;;;;;;;;;;;:29;3025:8;3005:29;;;;;;;;;;;;;;;;:33;;:46;;;;:::i;:::-;2973:7;:19;2981:10;2973:19;;;;;;;;;;;;;;;:29;2993:8;2973:29;;;;;;;;;;;;;;;:78;;;;3078:8;3057:61;;3066:10;3057:61;;;3088:7;:19;3096:10;3088:19;;;;;;;;;;;;;;;:29;3108:8;3088:29;;;;;;;;;;;;;;;;3057:61;;;;;;;;;;;;;;;;;;3131:4;3124:11;;2883:257;;;;:::o;836:110:6:-;894:7;921:1;916;:6;;909:14;;;;;;940:1;936;:5;929:12;;836:110;;;;:::o;1008:129::-;1066:7;1081:9;1097:1;1093;:5;1081:17;;1116:1;1111;:6;;1104:14;;;;;;1131:1;1124:8;;1008:129;;;;;:::o", + "source": "pragma solidity ^0.4.15;\n\n// solium-disable uppercase\nimport 'zeppelin-solidity/contracts/token/ERC20/StandardToken.sol';\nimport 'zeppelin-solidity/contracts/lifecycle/Pausable.sol';\n\n\n/**\n * @title DAV Token\n * @dev ERC20 token\n */\ncontract DAVToken is StandardToken, Pausable {\n\n // Token constants\n // NOTE: These are placeholder values used during development. Final supply and precision to be determined later.\n string public constant name = 'DAV Token';\n string public constant symbol = 'DAV';\n uint8 public constant decimals = 18;\n uint256 public constant INITIAL_SUPPLY = 1000000 * (10 ** uint256(decimals)); // Number of tokens padded with 0s for number of decimal places\n\n /**\n * @notice DAVToken constructor\n * Runs once on initial contract creation. Sets total supply and balances.\n */\n function DAVToken() public {\n totalSupply_ = INITIAL_SUPPLY;\n balances[msg.sender] = INITIAL_SUPPLY;\n }\n\n /**\n * @notice transfer token for a specified address\n * @param _to The address to transfer to.\n * @param _value The amount to be transferred.\n */\n function transfer(address _to, uint256 _value) public whenNotPaused returns (bool) {\n return super.transfer(_to, _value);\n }\n\n /**\n * @notice Transfer tokens from one address to another\n * @param _from address The address which you want to send tokens from\n * @param _to address The address which you want to transfer to\n * @param _value uint256 the amount of tokens to be transferred\n */\n function transferFrom(address _from, address _to, uint256 _value) public whenNotPaused returns (bool) {\n return super.transferFrom(_from, _to, _value);\n }\n\n /**\n * @notice Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.\n *\n * Beware that changing an allowance with this method brings the risk that someone may use both the old\n * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this\n * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards:\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n * @param _spender The address which will spend the funds.\n * @param _value The amount of tokens to be spent.\n */\n function approve(address _spender, uint256 _value) public whenNotPaused returns (bool) {\n return super.approve(_spender, _value);\n }\n\n /**\n * @notice Increase the amount of tokens that an owner is allowed to a spender.\n *\n * approve should be called when allowed[_spender] == 0. To increment\n * allowed value is better to use this function to avoid 2 calls (and wait until\n * the first transaction is mined)\n * From MonolithDAO Token.sol\n * @param _spender The address which will spend the funds.\n * @param _addedValue The amount of tokens to increase the allowance by.\n */\n function increaseApproval(address _spender, uint _addedValue) public whenNotPaused returns (bool success) {\n return super.increaseApproval(_spender, _addedValue);\n }\n\n /**\n * @notice Decrease the amount of tokens that an owner allowed to a spender.\n *\n * approve should be called when allowed[_spender] == 0. To decrement\n * allowed value is better to use this function to avoid 2 calls (and wait until\n * the first transaction is mined)\n * From MonolithDAO Token.sol\n * @param _spender The address which will spend the funds.\n * @param _subtractedValue The amount of tokens to decrease the allowance by.\n */\n function decreaseApproval(address _spender, uint _subtractedValue) public whenNotPaused returns (bool success) {\n return super.decreaseApproval(_spender, _subtractedValue);\n }\n}\n", + "sourcePath": "/Users/anatolyt/projects/dav/contracts/contracts/DAVToken.sol", + "ast": { + "absolutePath": "/Users/anatolyt/projects/dav/contracts/contracts/DAVToken.sol", + "exportedSymbols": { + "DAVToken": [ + 288 + ] + }, + "id": 289, + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 154, + "literals": [ + "solidity", + "^", + "0.4", + ".15" + ], + "nodeType": "PragmaDirective", + "src": "0:24:1" + }, + { + "absolutePath": "zeppelin-solidity/contracts/token/ERC20/StandardToken.sol", + "file": "zeppelin-solidity/contracts/token/ERC20/StandardToken.sol", + "id": 155, + "nodeType": "ImportDirective", + "scope": 289, + "sourceUnit": 1150, + "src": "54:67:1", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "zeppelin-solidity/contracts/lifecycle/Pausable.sol", + "file": "zeppelin-solidity/contracts/lifecycle/Pausable.sol", + "id": 156, + "nodeType": "ImportDirective", + "scope": 289, + "sourceUnit": 579, + "src": "122:60:1", + "symbolAliases": [], + "unitAlias": "" + }, + { + "baseContracts": [ + { + "arguments": [], + "baseName": { + "contractScope": null, + "id": 157, + "name": "StandardToken", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1149, + "src": "254:13:1", + "typeDescriptions": { + "typeIdentifier": "t_contract$_StandardToken_$1149", + "typeString": "contract StandardToken" + } + }, + "id": 158, + "nodeType": "InheritanceSpecifier", + "src": "254:13:1" + }, + { + "arguments": [], + "baseName": { + "contractScope": null, + "id": 159, + "name": "Pausable", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 578, + "src": "269:8:1", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Pausable_$578", + "typeString": "contract Pausable" + } + }, + "id": 160, + "nodeType": "InheritanceSpecifier", + "src": "269:8:1" + } + ], + "contractDependencies": [ + 578, + 732, + 828, + 871, + 903, + 1149 + ], + "contractKind": "contract", + "documentation": "@title DAV Token\n@dev ERC20 token", + "fullyImplemented": true, + "id": 288, + "linearizedBaseContracts": [ + 288, + 578, + 732, + 1149, + 828, + 871, + 903 + ], + "name": "DAVToken", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": true, + "id": 163, + "name": "name", + "nodeType": "VariableDeclaration", + "scope": 288, + "src": "420:41:1", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory", + "typeString": "string memory" + }, + "typeName": { + "id": 161, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "420:6:1", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string storage pointer" + } + }, + "value": { + "argumentTypes": null, + "hexValue": "44415620546f6b656e", + "id": 162, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "450:11:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_a3aeff9fd921030cd609843bb7ccb973fa7b1cea0b5811568ec0b96e473afb9f", + "typeString": "literal_string \"DAV Token\"" + }, + "value": "DAV Token" + }, + "visibility": "public" + }, + { + "constant": true, + "id": 166, + "name": "symbol", + "nodeType": "VariableDeclaration", + "scope": 288, + "src": "465:37:1", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory", + "typeString": "string memory" + }, + "typeName": { + "id": 164, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "465:6:1", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string storage pointer" + } + }, + "value": { + "argumentTypes": null, + "hexValue": "444156", + "id": 165, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "497:5:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_f12e4a671ff413835d47c9a78729402d619e1c0248a8cd54a43dfd5008905692", + "typeString": "literal_string \"DAV\"" + }, + "value": "DAV" + }, + "visibility": "public" + }, + { + "constant": true, + "id": 169, + "name": "decimals", + "nodeType": "VariableDeclaration", + "scope": 288, + "src": "506:35:1", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + "typeName": { + "id": 167, + "name": "uint8", + "nodeType": "ElementaryTypeName", + "src": "506:5:1", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "value": { + "argumentTypes": null, + "hexValue": "3138", + "id": 168, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "539:2:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_18_by_1", + "typeString": "int_const 18" + }, + "value": "18" + }, + "visibility": "public" + }, + { + "constant": true, + "id": 179, + "name": "INITIAL_SUPPLY", + "nodeType": "VariableDeclaration", + "scope": 288, + "src": "545:76:1", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 170, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "545:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 178, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "hexValue": "31303030303030", + "id": 171, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "586:7:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_1000000_by_1", + "typeString": "int_const 1000000" + }, + "value": "1000000" + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "argumentTypes": null, + "components": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 176, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "hexValue": "3130", + "id": 172, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "597:2:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_10_by_1", + "typeString": "int_const 10" + }, + "value": "10" + }, + "nodeType": "BinaryOperation", + "operator": "**", + "rightExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 174, + "name": "decimals", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 169, + "src": "611:8:1", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + ], + "id": 173, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "603:7:1", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": "uint256" + }, + "id": 175, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "603:17:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "597:23:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 177, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "596:25:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "586:35:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "public" + }, + { + "body": { + "id": 193, + "nodeType": "Block", + "src": "840:83:1", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 184, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "id": 182, + "name": "totalSupply_", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 747, + "src": "846:12:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "id": 183, + "name": "INITIAL_SUPPLY", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 179, + "src": "861:14:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "846:29:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 185, + "nodeType": "ExpressionStatement", + "src": "846:29:1" + }, + { + "expression": { + "argumentTypes": null, + "id": 191, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 186, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 745, + "src": "881:8:1", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 189, + "indexExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 187, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1161, + "src": "890:3:1", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 188, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "890:10:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "881:20:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "id": 190, + "name": "INITIAL_SUPPLY", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 179, + "src": "904:14:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "881:37:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 192, + "nodeType": "ExpressionStatement", + "src": "881:37:1" + } + ] + }, + "id": 194, + "implemented": true, + "isConstructor": true, + "isDeclaredConst": false, + "modifiers": [], + "name": "DAVToken", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 180, + "nodeType": "ParameterList", + "parameters": [], + "src": "830:2:1" + }, + "payable": false, + "returnParameters": { + "id": 181, + "nodeType": "ParameterList", + "parameters": [], + "src": "840:0:1" + }, + "scope": 288, + "src": "813:110:1", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 211, + "nodeType": "Block", + "src": "1163:45:1", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 207, + "name": "_to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 196, + "src": "1191:3:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 208, + "name": "_value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 198, + "src": "1196:6:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 205, + "name": "super", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1187, + "src": "1176:5:1", + "typeDescriptions": { + "typeIdentifier": "t_super$_DAVToken_$288", + "typeString": "contract super DAVToken" + } + }, + "id": 206, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "transfer", + "nodeType": "MemberAccess", + "referencedDeclaration": 815, + "src": "1176:14:1", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", + "typeString": "function (address,uint256) returns (bool)" + } + }, + "id": 209, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1176:27:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 204, + "id": 210, + "nodeType": "Return", + "src": "1169:34:1" + } + ] + }, + "id": 212, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": [], + "id": 201, + "modifierName": { + "argumentTypes": null, + "id": 200, + "name": "whenNotPaused", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 539, + "src": "1134:13:1", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "1134:13:1" + } + ], + "name": "transfer", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 199, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 196, + "name": "_to", + "nodeType": "VariableDeclaration", + "scope": 212, + "src": "1098:11:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 195, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1098:7:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 198, + "name": "_value", + "nodeType": "VariableDeclaration", + "scope": 212, + "src": "1111:14:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 197, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1111:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1097:29:1" + }, + "payable": false, + "returnParameters": { + "id": 204, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 203, + "name": "", + "nodeType": "VariableDeclaration", + "scope": 212, + "src": "1157:4:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 202, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1157:4:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1156:6:1" + }, + "scope": 288, + "src": "1080:128:1", + "stateMutability": "nonpayable", + "superFunction": 815, + "visibility": "public" + }, + { + "body": { + "id": 232, + "nodeType": "Block", + "src": "1588:56:1", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 227, + "name": "_from", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 214, + "src": "1620:5:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 228, + "name": "_to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 216, + "src": "1627:3:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 229, + "name": "_value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 218, + "src": "1632:6:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 225, + "name": "super", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1187, + "src": "1601:5:1", + "typeDescriptions": { + "typeIdentifier": "t_super$_DAVToken_$288", + "typeString": "contract super DAVToken" + } + }, + "id": 226, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "transferFrom", + "nodeType": "MemberAccess", + "referencedDeclaration": 1003, + "src": "1601:18:1", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$", + "typeString": "function (address,address,uint256) returns (bool)" + } + }, + "id": 230, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1601:38:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 224, + "id": 231, + "nodeType": "Return", + "src": "1594:45:1" + } + ] + }, + "id": 233, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": [], + "id": 221, + "modifierName": { + "argumentTypes": null, + "id": 220, + "name": "whenNotPaused", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 539, + "src": "1559:13:1", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "1559:13:1" + } + ], + "name": "transferFrom", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 219, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 214, + "name": "_from", + "nodeType": "VariableDeclaration", + "scope": 233, + "src": "1508:13:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 213, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1508:7:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 216, + "name": "_to", + "nodeType": "VariableDeclaration", + "scope": 233, + "src": "1523:11:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 215, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1523:7:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 218, + "name": "_value", + "nodeType": "VariableDeclaration", + "scope": 233, + "src": "1536:14:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 217, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1536:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1507:44:1" + }, + "payable": false, + "returnParameters": { + "id": 224, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 223, + "name": "", + "nodeType": "VariableDeclaration", + "scope": 233, + "src": "1582:4:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 222, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1582:4:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1581:6:1" + }, + "scope": 288, + "src": "1486:158:1", + "stateMutability": "nonpayable", + "superFunction": 1003, + "visibility": "public" + }, + { + "body": { + "id": 250, + "nodeType": "Block", + "src": "2357:49:1", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 246, + "name": "_spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 235, + "src": "2384:8:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 247, + "name": "_value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 237, + "src": "2394:6:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 244, + "name": "super", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1187, + "src": "2370:5:1", + "typeDescriptions": { + "typeIdentifier": "t_super$_DAVToken_$288", + "typeString": "contract super DAVToken" + } + }, + "id": 245, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "approve", + "nodeType": "MemberAccess", + "referencedDeclaration": 1031, + "src": "2370:13:1", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", + "typeString": "function (address,uint256) returns (bool)" + } + }, + "id": 248, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2370:31:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 243, + "id": 249, + "nodeType": "Return", + "src": "2363:38:1" + } + ] + }, + "id": 251, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": [], + "id": 240, + "modifierName": { + "argumentTypes": null, + "id": 239, + "name": "whenNotPaused", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 539, + "src": "2328:13:1", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "2328:13:1" + } + ], + "name": "approve", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 238, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 235, + "name": "_spender", + "nodeType": "VariableDeclaration", + "scope": 251, + "src": "2287:16:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 234, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2287:7:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 237, + "name": "_value", + "nodeType": "VariableDeclaration", + "scope": 251, + "src": "2305:14:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 236, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2305:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2286:34:1" + }, + "payable": false, + "returnParameters": { + "id": 243, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 242, + "name": "", + "nodeType": "VariableDeclaration", + "scope": 251, + "src": "2351:4:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 241, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2351:4:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2350:6:1" + }, + "scope": 288, + "src": "2270:136:1", + "stateMutability": "nonpayable", + "superFunction": 1031, + "visibility": "public" + }, + { + "body": { + "id": 268, + "nodeType": "Block", + "src": "2975:63:1", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 264, + "name": "_spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 253, + "src": "3011:8:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 265, + "name": "_addedValue", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 255, + "src": "3021:11:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 262, + "name": "super", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1187, + "src": "2988:5:1", + "typeDescriptions": { + "typeIdentifier": "t_super$_DAVToken_$288", + "typeString": "contract super DAVToken" + } + }, + "id": 263, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "increaseApproval", + "nodeType": "MemberAccess", + "referencedDeclaration": 1088, + "src": "2988:22:1", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", + "typeString": "function (address,uint256) returns (bool)" + } + }, + "id": 266, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2988:45:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 261, + "id": 267, + "nodeType": "Return", + "src": "2981:52:1" + } + ] + }, + "id": 269, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": [], + "id": 258, + "modifierName": { + "argumentTypes": null, + "id": 257, + "name": "whenNotPaused", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 539, + "src": "2938:13:1", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "2938:13:1" + } + ], + "name": "increaseApproval", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 256, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 253, + "name": "_spender", + "nodeType": "VariableDeclaration", + "scope": 269, + "src": "2895:16:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 252, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2895:7:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 255, + "name": "_addedValue", + "nodeType": "VariableDeclaration", + "scope": 269, + "src": "2913:16:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 254, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "2913:4:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2894:36:1" + }, + "payable": false, + "returnParameters": { + "id": 261, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 260, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 269, + "src": "2961:12:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 259, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2961:4:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2960:14:1" + }, + "scope": 288, + "src": "2869:169:1", + "stateMutability": "nonpayable", + "superFunction": 1088, + "visibility": "public" + }, + { + "body": { + "id": 286, + "nodeType": "Block", + "src": "3614:68:1", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 282, + "name": "_spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 271, + "src": "3650:8:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 283, + "name": "_subtractedValue", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 273, + "src": "3660:16:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 280, + "name": "super", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1187, + "src": "3627:5:1", + "typeDescriptions": { + "typeIdentifier": "t_super$_DAVToken_$288", + "typeString": "contract super DAVToken" + } + }, + "id": 281, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "decreaseApproval", + "nodeType": "MemberAccess", + "referencedDeclaration": 1148, + "src": "3627:22:1", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", + "typeString": "function (address,uint256) returns (bool)" + } + }, + "id": 284, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3627:50:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 279, + "id": 285, + "nodeType": "Return", + "src": "3620:57:1" + } + ] + }, + "id": 287, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": [], + "id": 276, + "modifierName": { + "argumentTypes": null, + "id": 275, + "name": "whenNotPaused", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 539, + "src": "3577:13:1", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "3577:13:1" + } + ], + "name": "decreaseApproval", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 274, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 271, + "name": "_spender", + "nodeType": "VariableDeclaration", + "scope": 287, + "src": "3529:16:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 270, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3529:7:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 273, + "name": "_subtractedValue", + "nodeType": "VariableDeclaration", + "scope": 287, + "src": "3547:21:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 272, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "3547:4:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3528:41:1" + }, + "payable": false, + "returnParameters": { + "id": 279, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 278, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 287, + "src": "3600:12:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 277, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3600:4:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3599:14:1" + }, + "scope": 288, + "src": "3503:179:1", + "stateMutability": "nonpayable", + "superFunction": 1148, + "visibility": "public" + } + ], + "scope": 289, + "src": "233:3451:1" + } + ], + "src": "0:3685:1" + }, + "legacyAST": { + "absolutePath": "/Users/anatolyt/projects/dav/contracts/contracts/DAVToken.sol", + "exportedSymbols": { + "DAVToken": [ + 288 + ] + }, + "id": 289, + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 154, + "literals": [ + "solidity", + "^", + "0.4", + ".15" + ], + "nodeType": "PragmaDirective", + "src": "0:24:1" + }, + { + "absolutePath": "zeppelin-solidity/contracts/token/ERC20/StandardToken.sol", + "file": "zeppelin-solidity/contracts/token/ERC20/StandardToken.sol", + "id": 155, + "nodeType": "ImportDirective", + "scope": 289, + "sourceUnit": 1150, + "src": "54:67:1", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "zeppelin-solidity/contracts/lifecycle/Pausable.sol", + "file": "zeppelin-solidity/contracts/lifecycle/Pausable.sol", + "id": 156, + "nodeType": "ImportDirective", + "scope": 289, + "sourceUnit": 579, + "src": "122:60:1", + "symbolAliases": [], + "unitAlias": "" + }, + { + "baseContracts": [ + { + "arguments": [], + "baseName": { + "contractScope": null, + "id": 157, + "name": "StandardToken", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1149, + "src": "254:13:1", + "typeDescriptions": { + "typeIdentifier": "t_contract$_StandardToken_$1149", + "typeString": "contract StandardToken" + } + }, + "id": 158, + "nodeType": "InheritanceSpecifier", + "src": "254:13:1" + }, + { + "arguments": [], + "baseName": { + "contractScope": null, + "id": 159, + "name": "Pausable", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 578, + "src": "269:8:1", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Pausable_$578", + "typeString": "contract Pausable" + } + }, + "id": 160, + "nodeType": "InheritanceSpecifier", + "src": "269:8:1" + } + ], + "contractDependencies": [ + 578, + 732, + 828, + 871, + 903, + 1149 + ], + "contractKind": "contract", + "documentation": "@title DAV Token\n@dev ERC20 token", + "fullyImplemented": true, + "id": 288, + "linearizedBaseContracts": [ + 288, + 578, + 732, + 1149, + 828, + 871, + 903 + ], + "name": "DAVToken", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": true, + "id": 163, + "name": "name", + "nodeType": "VariableDeclaration", + "scope": 288, + "src": "420:41:1", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory", + "typeString": "string memory" + }, + "typeName": { + "id": 161, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "420:6:1", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string storage pointer" + } + }, + "value": { + "argumentTypes": null, + "hexValue": "44415620546f6b656e", + "id": 162, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "450:11:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_a3aeff9fd921030cd609843bb7ccb973fa7b1cea0b5811568ec0b96e473afb9f", + "typeString": "literal_string \"DAV Token\"" + }, + "value": "DAV Token" + }, + "visibility": "public" + }, + { + "constant": true, + "id": 166, + "name": "symbol", + "nodeType": "VariableDeclaration", + "scope": 288, + "src": "465:37:1", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory", + "typeString": "string memory" + }, + "typeName": { + "id": 164, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "465:6:1", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string storage pointer" + } + }, + "value": { + "argumentTypes": null, + "hexValue": "444156", + "id": 165, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "497:5:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_f12e4a671ff413835d47c9a78729402d619e1c0248a8cd54a43dfd5008905692", + "typeString": "literal_string \"DAV\"" + }, + "value": "DAV" + }, + "visibility": "public" + }, + { + "constant": true, + "id": 169, + "name": "decimals", + "nodeType": "VariableDeclaration", + "scope": 288, + "src": "506:35:1", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + "typeName": { + "id": 167, + "name": "uint8", + "nodeType": "ElementaryTypeName", + "src": "506:5:1", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "value": { + "argumentTypes": null, + "hexValue": "3138", + "id": 168, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "539:2:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_18_by_1", + "typeString": "int_const 18" + }, + "value": "18" + }, + "visibility": "public" + }, + { + "constant": true, + "id": 179, + "name": "INITIAL_SUPPLY", + "nodeType": "VariableDeclaration", + "scope": 288, + "src": "545:76:1", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 170, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "545:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 178, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "hexValue": "31303030303030", + "id": 171, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "586:7:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_1000000_by_1", + "typeString": "int_const 1000000" + }, + "value": "1000000" + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "argumentTypes": null, + "components": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 176, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "hexValue": "3130", + "id": 172, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "597:2:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_10_by_1", + "typeString": "int_const 10" + }, + "value": "10" + }, + "nodeType": "BinaryOperation", + "operator": "**", + "rightExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 174, + "name": "decimals", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 169, + "src": "611:8:1", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + ], + "id": 173, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "603:7:1", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": "uint256" + }, + "id": 175, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "603:17:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "597:23:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 177, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "596:25:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "586:35:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "public" + }, + { + "body": { + "id": 193, + "nodeType": "Block", + "src": "840:83:1", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 184, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "id": 182, + "name": "totalSupply_", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 747, + "src": "846:12:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "id": 183, + "name": "INITIAL_SUPPLY", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 179, + "src": "861:14:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "846:29:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 185, + "nodeType": "ExpressionStatement", + "src": "846:29:1" + }, + { + "expression": { + "argumentTypes": null, + "id": 191, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 186, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 745, + "src": "881:8:1", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 189, + "indexExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 187, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1161, + "src": "890:3:1", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 188, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "890:10:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "881:20:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "id": 190, + "name": "INITIAL_SUPPLY", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 179, + "src": "904:14:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "881:37:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 192, + "nodeType": "ExpressionStatement", + "src": "881:37:1" + } + ] + }, + "id": 194, + "implemented": true, + "isConstructor": true, + "isDeclaredConst": false, + "modifiers": [], + "name": "DAVToken", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 180, + "nodeType": "ParameterList", + "parameters": [], + "src": "830:2:1" + }, + "payable": false, + "returnParameters": { + "id": 181, + "nodeType": "ParameterList", + "parameters": [], + "src": "840:0:1" + }, + "scope": 288, + "src": "813:110:1", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 211, + "nodeType": "Block", + "src": "1163:45:1", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 207, + "name": "_to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 196, + "src": "1191:3:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 208, + "name": "_value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 198, + "src": "1196:6:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 205, + "name": "super", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1187, + "src": "1176:5:1", + "typeDescriptions": { + "typeIdentifier": "t_super$_DAVToken_$288", + "typeString": "contract super DAVToken" + } + }, + "id": 206, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "transfer", + "nodeType": "MemberAccess", + "referencedDeclaration": 815, + "src": "1176:14:1", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", + "typeString": "function (address,uint256) returns (bool)" + } + }, + "id": 209, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1176:27:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 204, + "id": 210, + "nodeType": "Return", + "src": "1169:34:1" + } + ] + }, + "id": 212, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": [], + "id": 201, + "modifierName": { + "argumentTypes": null, + "id": 200, + "name": "whenNotPaused", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 539, + "src": "1134:13:1", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "1134:13:1" + } + ], + "name": "transfer", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 199, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 196, + "name": "_to", + "nodeType": "VariableDeclaration", + "scope": 212, + "src": "1098:11:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 195, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1098:7:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 198, + "name": "_value", + "nodeType": "VariableDeclaration", + "scope": 212, + "src": "1111:14:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 197, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1111:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1097:29:1" + }, + "payable": false, + "returnParameters": { + "id": 204, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 203, + "name": "", + "nodeType": "VariableDeclaration", + "scope": 212, + "src": "1157:4:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 202, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1157:4:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1156:6:1" + }, + "scope": 288, + "src": "1080:128:1", + "stateMutability": "nonpayable", + "superFunction": 815, + "visibility": "public" + }, + { + "body": { + "id": 232, + "nodeType": "Block", + "src": "1588:56:1", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 227, + "name": "_from", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 214, + "src": "1620:5:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 228, + "name": "_to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 216, + "src": "1627:3:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 229, + "name": "_value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 218, + "src": "1632:6:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 225, + "name": "super", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1187, + "src": "1601:5:1", + "typeDescriptions": { + "typeIdentifier": "t_super$_DAVToken_$288", + "typeString": "contract super DAVToken" + } + }, + "id": 226, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "transferFrom", + "nodeType": "MemberAccess", + "referencedDeclaration": 1003, + "src": "1601:18:1", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$", + "typeString": "function (address,address,uint256) returns (bool)" + } + }, + "id": 230, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1601:38:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 224, + "id": 231, + "nodeType": "Return", + "src": "1594:45:1" + } + ] + }, + "id": 233, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": [], + "id": 221, + "modifierName": { + "argumentTypes": null, + "id": 220, + "name": "whenNotPaused", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 539, + "src": "1559:13:1", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "1559:13:1" + } + ], + "name": "transferFrom", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 219, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 214, + "name": "_from", + "nodeType": "VariableDeclaration", + "scope": 233, + "src": "1508:13:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 213, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1508:7:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 216, + "name": "_to", + "nodeType": "VariableDeclaration", + "scope": 233, + "src": "1523:11:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 215, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1523:7:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 218, + "name": "_value", + "nodeType": "VariableDeclaration", + "scope": 233, + "src": "1536:14:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 217, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1536:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1507:44:1" + }, + "payable": false, + "returnParameters": { + "id": 224, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 223, + "name": "", + "nodeType": "VariableDeclaration", + "scope": 233, + "src": "1582:4:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 222, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1582:4:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1581:6:1" + }, + "scope": 288, + "src": "1486:158:1", + "stateMutability": "nonpayable", + "superFunction": 1003, + "visibility": "public" + }, + { + "body": { + "id": 250, + "nodeType": "Block", + "src": "2357:49:1", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 246, + "name": "_spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 235, + "src": "2384:8:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 247, + "name": "_value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 237, + "src": "2394:6:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 244, + "name": "super", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1187, + "src": "2370:5:1", + "typeDescriptions": { + "typeIdentifier": "t_super$_DAVToken_$288", + "typeString": "contract super DAVToken" + } + }, + "id": 245, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "approve", + "nodeType": "MemberAccess", + "referencedDeclaration": 1031, + "src": "2370:13:1", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", + "typeString": "function (address,uint256) returns (bool)" + } + }, + "id": 248, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2370:31:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 243, + "id": 249, + "nodeType": "Return", + "src": "2363:38:1" + } + ] + }, + "id": 251, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": [], + "id": 240, + "modifierName": { + "argumentTypes": null, + "id": 239, + "name": "whenNotPaused", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 539, + "src": "2328:13:1", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "2328:13:1" + } + ], + "name": "approve", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 238, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 235, + "name": "_spender", + "nodeType": "VariableDeclaration", + "scope": 251, + "src": "2287:16:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 234, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2287:7:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 237, + "name": "_value", + "nodeType": "VariableDeclaration", + "scope": 251, + "src": "2305:14:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 236, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2305:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2286:34:1" + }, + "payable": false, + "returnParameters": { + "id": 243, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 242, + "name": "", + "nodeType": "VariableDeclaration", + "scope": 251, + "src": "2351:4:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 241, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2351:4:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2350:6:1" + }, + "scope": 288, + "src": "2270:136:1", + "stateMutability": "nonpayable", + "superFunction": 1031, + "visibility": "public" + }, + { + "body": { + "id": 268, + "nodeType": "Block", + "src": "2975:63:1", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 264, + "name": "_spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 253, + "src": "3011:8:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 265, + "name": "_addedValue", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 255, + "src": "3021:11:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 262, + "name": "super", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1187, + "src": "2988:5:1", + "typeDescriptions": { + "typeIdentifier": "t_super$_DAVToken_$288", + "typeString": "contract super DAVToken" + } + }, + "id": 263, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "increaseApproval", + "nodeType": "MemberAccess", + "referencedDeclaration": 1088, + "src": "2988:22:1", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", + "typeString": "function (address,uint256) returns (bool)" + } + }, + "id": 266, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2988:45:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 261, + "id": 267, + "nodeType": "Return", + "src": "2981:52:1" + } + ] + }, + "id": 269, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": [], + "id": 258, + "modifierName": { + "argumentTypes": null, + "id": 257, + "name": "whenNotPaused", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 539, + "src": "2938:13:1", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "2938:13:1" + } + ], + "name": "increaseApproval", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 256, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 253, + "name": "_spender", + "nodeType": "VariableDeclaration", + "scope": 269, + "src": "2895:16:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 252, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2895:7:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 255, + "name": "_addedValue", + "nodeType": "VariableDeclaration", + "scope": 269, + "src": "2913:16:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 254, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "2913:4:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2894:36:1" + }, + "payable": false, + "returnParameters": { + "id": 261, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 260, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 269, + "src": "2961:12:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 259, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2961:4:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2960:14:1" + }, + "scope": 288, + "src": "2869:169:1", + "stateMutability": "nonpayable", + "superFunction": 1088, + "visibility": "public" + }, + { + "body": { + "id": 286, + "nodeType": "Block", + "src": "3614:68:1", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 282, + "name": "_spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 271, + "src": "3650:8:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 283, + "name": "_subtractedValue", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 273, + "src": "3660:16:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 280, + "name": "super", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1187, + "src": "3627:5:1", + "typeDescriptions": { + "typeIdentifier": "t_super$_DAVToken_$288", + "typeString": "contract super DAVToken" + } + }, + "id": 281, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "decreaseApproval", + "nodeType": "MemberAccess", + "referencedDeclaration": 1148, + "src": "3627:22:1", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", + "typeString": "function (address,uint256) returns (bool)" + } + }, + "id": 284, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3627:50:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 279, + "id": 285, + "nodeType": "Return", + "src": "3620:57:1" + } + ] + }, + "id": 287, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": [], + "id": 276, + "modifierName": { + "argumentTypes": null, + "id": 275, + "name": "whenNotPaused", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 539, + "src": "3577:13:1", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "3577:13:1" + } + ], + "name": "decreaseApproval", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 274, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 271, + "name": "_spender", + "nodeType": "VariableDeclaration", + "scope": 287, + "src": "3529:16:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 270, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3529:7:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 273, + "name": "_subtractedValue", + "nodeType": "VariableDeclaration", + "scope": 287, + "src": "3547:21:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 272, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "3547:4:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3528:41:1" + }, + "payable": false, + "returnParameters": { + "id": 279, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 278, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 287, + "src": "3600:12:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 277, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3600:4:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3599:14:1" + }, + "scope": 288, + "src": "3503:179:1", + "stateMutability": "nonpayable", + "superFunction": 1148, + "visibility": "public" + } + ], + "scope": 289, + "src": "233:3451:1" + } + ], + "src": "0:3685:1" + }, + "compiler": { + "name": "solc", + "version": "0.4.19+commit.c4cbbb05.Emscripten.clang" + }, + "networks": { + "1522233337963": { + "events": {}, + "links": {}, + "address": "0xcfeb869f69431e42cdb54a4f4f105c19c080a601", + "transactionHash": "0x4d7fa60a5a3186f4e3c1894326325e0b18db88ace1ed34caf9356ca7a602d81d" + }, + "1522241052538": { + "events": {}, + "links": {}, + "address": "0xcfeb869f69431e42cdb54a4f4f105c19c080a601", + "transactionHash": "0x4d7fa60a5a3186f4e3c1894326325e0b18db88ace1ed34caf9356ca7a602d81d" + } + }, + "schemaVersion": "2.0.0", + "updatedAt": "2018-03-28T12:44:25.027Z" +} \ No newline at end of file diff --git a/src/build/contracts/Identity.json b/src/build/contracts/Identity.json new file mode 100644 index 0000000..f046b02 --- /dev/null +++ b/src/build/contracts/Identity.json @@ -0,0 +1,4106 @@ +{ + "contractName": "Identity", + "abi": [ + { + "inputs": [ + { + "name": "_davTokenContract", + "type": "address" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "constant": false, + "inputs": [ + { + "name": "_id", + "type": "address" + }, + { + "name": "_v", + "type": "uint8" + }, + { + "name": "_r", + "type": "bytes32" + }, + { + "name": "_s", + "type": "bytes32" + } + ], + "name": "register", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [], + "name": "registerSimple", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "_id", + "type": "address" + } + ], + "name": "getBalance", + "outputs": [ + { + "name": "balance", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "_id", + "type": "address" + }, + { + "name": "_wallet", + "type": "address" + } + ], + "name": "verifyOwnership", + "outputs": [ + { + "name": "verified", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "_id", + "type": "address" + } + ], + "name": "isRegistered", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x6060604052341561000f57600080fd5b6040516020806108d58339810160405280805190602001909190505080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506108598061007c6000396000f30060606040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806307957360146100725780633c56e2ae146100e25780635db3f96314610141578063c3c5a54714610156578063f8b2cb4f146101a7575b600080fd5b341561007d57600080fd5b6100c8600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506101f4565b604051808215151515815260200191505060405180910390f35b34156100ed57600080fd5b61013f600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803560ff16906020019091908035600019169060200190919080356000191690602001909190505061028e565b005b341561014c57600080fd5b610154610529565b005b341561016157600080fd5b61018d600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061065f565b604051808215151515815260200191505060405180910390f35b34156101b257600080fd5b6101de600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506106e3565b6040518082815260200191505060405180910390f35b60008173ffffffffffffffffffffffffffffffffffffffff166000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614905092915050565b6000806000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561031557600080fd5b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000007f444156204964656e7469747920526567697374726174696f6e00000000000000604051808266ffffffffffffff191666ffffffffffffff191681526019019150506040518091039020604051808363ffffffff191663ffffffff19168152601c01826000191660001916815260200192505050604051809103902090508473ffffffffffffffffffffffffffffffffffffffff16600182868686604051600081526020016040526000604051602001526040518085600019166000191681526020018460ff1660ff16815260200183600019166000191681526020018260001916600019168152602001945050505050602060405160208103908084039060008661646e5a03f1151561044957600080fd5b50506020604051035173ffffffffffffffffffffffffffffffffffffffff1614151561047457600080fd5b6020604051908101604052803373ffffffffffffffffffffffffffffffffffffffff168152506000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050505050505050565b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156105af57600080fd5b6020604051908101604052803373ffffffffffffffffffffffffffffffffffffffff168152506000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550905050565b6000806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a082316000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b151561080b57600080fd5b6102c65a03f1151561081c57600080fd5b5050506040518051905090509190505600a165627a7a7230582014bb95bdcac1b8fc55a809fdfd0a889b557b4961636d394ea96a13b5c7097af70029", + "deployedBytecode": "0x60606040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806307957360146100725780633c56e2ae146100e25780635db3f96314610141578063c3c5a54714610156578063f8b2cb4f146101a7575b600080fd5b341561007d57600080fd5b6100c8600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506101f4565b604051808215151515815260200191505060405180910390f35b34156100ed57600080fd5b61013f600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803560ff16906020019091908035600019169060200190919080356000191690602001909190505061028e565b005b341561014c57600080fd5b610154610529565b005b341561016157600080fd5b61018d600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061065f565b604051808215151515815260200191505060405180910390f35b34156101b257600080fd5b6101de600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506106e3565b6040518082815260200191505060405180910390f35b60008173ffffffffffffffffffffffffffffffffffffffff166000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614905092915050565b6000806000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561031557600080fd5b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000007f444156204964656e7469747920526567697374726174696f6e00000000000000604051808266ffffffffffffff191666ffffffffffffff191681526019019150506040518091039020604051808363ffffffff191663ffffffff19168152601c01826000191660001916815260200192505050604051809103902090508473ffffffffffffffffffffffffffffffffffffffff16600182868686604051600081526020016040526000604051602001526040518085600019166000191681526020018460ff1660ff16815260200183600019166000191681526020018260001916600019168152602001945050505050602060405160208103908084039060008661646e5a03f1151561044957600080fd5b50506020604051035173ffffffffffffffffffffffffffffffffffffffff1614151561047457600080fd5b6020604051908101604052803373ffffffffffffffffffffffffffffffffffffffff168152506000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050505050505050565b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156105af57600080fd5b6020604051908101604052803373ffffffffffffffffffffffffffffffffffffffff168152506000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550905050565b6000806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a082316000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b151561080b57600080fd5b6102c65a03f1151561081c57600080fd5b5050506040518051905090509190505600a165627a7a7230582014bb95bdcac1b8fc55a809fdfd0a889b557b4961636d394ea96a13b5c7097af70029", + "sourceMap": "80:1785:2:-;;;556:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;623:17;615:5;;:25;;;;;;;;;;;;;;;;;;556:89;80:1785;;;;;;", + "deployedSourceMap": "80:1785:2:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1568:142;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;649:518;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1171:261;;;;;;;;;;;;;;1754:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1436:128;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1568:142;1644:13;1698:7;1672:33;;:10;:15;1683:3;1672:15;;;;;;;;;;;;;;;:22;;;;;;;;;;;;:33;;;1665:40;;1568:142;;;;:::o;649:518::-;857:20;813:3;787:10;:15;798:3;787:15;;;;;;;;;;;;;;;:22;;;;;;;;;;;;:29;;;772:50;;;;;;;;890:25;927:24;917:35;;;;;;;;;;;;;;;;;;;;;;;;880:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;857:96;;1045:3;1006:42;;:35;1016:12;1030:2;1034;1038;1006:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:42;;;991:63;;;;;;;;1117:45;;;;;;;;;1145:10;1117:45;;;;;1099:10;:15;1110:3;1099:15;;;;;;;;;;;;;;;:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;649:518;;;;;:::o;1171:261::-;1303:3;1270:10;:22;1281:10;1270:22;;;;;;;;;;;;;;;:29;;;;;;;;;;;;:36;;;1255:57;;;;;;;;1382:45;;;;;;;;;1410:10;1382:45;;;;;1357:10;:22;1368:10;1357:22;;;;;;;;;;;;;;;:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1171:261::o;1754:109::-;1810:4;1855:3;1829:10;:15;1840:3;1829:15;;;;;;;;;;;;;;;:22;;;;;;;;;;;;:29;;;;1822:36;;1754:109;;;:::o;1436:128::-;1490:15;1520:5;;;;;;;;;;;:15;;;1536:10;:15;1547:3;1536:15;;;;;;;;;;;;;;;:22;;;;;;;;;;;;1520:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1513:46;;1436:128;;;:::o", + "source": "pragma solidity ^0.4.15;\n\nimport './DAVToken.sol';\n\n\n/**\n * @title Identity\n */\ncontract Identity {\n\n struct DAVIdentity {\n address wallet;\n }\n\n mapping (address => DAVIdentity) private identities;\n\n DAVToken private token;\n\n // Prefix to added to messages signed by web3\n bytes28 private constant ETH_SIGNED_MESSAGE_PREFIX = '\\x19Ethereum Signed Message:\\n32';\n bytes25 private constant DAV_REGESTRATION_REQUEST = 'DAV Identity Registration';\n\n\n /**\n * @dev Constructor\n *\n * @param _davTokenContract address of the DAVToken contract\n */\n function Identity(DAVToken _davTokenContract) public {\n token = _davTokenContract;\n }\n\n function register(address _id, uint8 _v, bytes32 _r, bytes32 _s) public {\n // Make sure id isn't registered already\n require(\n identities[_id].wallet == 0x0\n );\n // Generate message hash\n bytes32 prefixedHash = keccak256(ETH_SIGNED_MESSAGE_PREFIX, keccak256(DAV_REGESTRATION_REQUEST));\n // Verify message signature\n require(\n ecrecover(prefixedHash, _v, _r, _s) == _id\n );\n\n // Register in identities mapping\n identities[_id] = DAVIdentity({\n wallet: msg.sender\n });\n }\n\n function registerSimple() public {\n // Make sure id isn't registered already\n require(\n identities[msg.sender].wallet == 0x0\n );\n\n // Register in identities mapping\n identities[msg.sender] = DAVIdentity({\n wallet: msg.sender\n });\n }\n\n function getBalance(address _id) public view returns (uint256 balance) {\n return token.balanceOf(identities[_id].wallet);\n }\n\n function verifyOwnership(address _id, address _wallet) public view returns (bool verified) {\n return identities[_id].wallet == _wallet;\n }\n\n // Check identity registration status\n function isRegistered(address _id) public view returns (bool) {\n return identities[_id].wallet != 0x0;\n }\n}\n", + "sourcePath": "/Users/anatolyt/projects/dav/contracts/contracts/Identity.sol", + "ast": { + "absolutePath": "/Users/anatolyt/projects/dav/contracts/contracts/Identity.sol", + "exportedSymbols": { + "Identity": [ + 439 + ] + }, + "id": 440, + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 290, + "literals": [ + "solidity", + "^", + "0.4", + ".15" + ], + "nodeType": "PragmaDirective", + "src": "0:24:2" + }, + { + "absolutePath": "/Users/anatolyt/projects/dav/contracts/contracts/DAVToken.sol", + "file": "./DAVToken.sol", + "id": 291, + "nodeType": "ImportDirective", + "scope": 440, + "sourceUnit": 289, + "src": "26:24:2", + "symbolAliases": [], + "unitAlias": "" + }, + { + "baseContracts": [], + "contractDependencies": [], + "contractKind": "contract", + "documentation": "@title Identity", + "fullyImplemented": true, + "id": 439, + "linearizedBaseContracts": [ + 439 + ], + "name": "Identity", + "nodeType": "ContractDefinition", + "nodes": [ + { + "canonicalName": "Identity.DAVIdentity", + "id": 294, + "members": [ + { + "constant": false, + "id": 293, + "name": "wallet", + "nodeType": "VariableDeclaration", + "scope": 294, + "src": "128:14:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 292, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "128:7:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "name": "DAVIdentity", + "nodeType": "StructDefinition", + "scope": 439, + "src": "103:44:2", + "visibility": "public" + }, + { + "constant": false, + "id": 298, + "name": "identities", + "nodeType": "VariableDeclaration", + "scope": 439, + "src": "151:51:2", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_DAVIdentity_$294_storage_$", + "typeString": "mapping(address => struct Identity.DAVIdentity storage ref)" + }, + "typeName": { + "id": 297, + "keyType": { + "id": 295, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "160:7:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "151:32:2", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_DAVIdentity_$294_storage_$", + "typeString": "mapping(address => struct Identity.DAVIdentity storage ref)" + }, + "valueType": { + "contractScope": null, + "id": 296, + "name": "DAVIdentity", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 294, + "src": "171:11:2", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DAVIdentity_$294_storage_ptr", + "typeString": "struct Identity.DAVIdentity storage pointer" + } + } + }, + "value": null, + "visibility": "private" + }, + { + "constant": false, + "id": 300, + "name": "token", + "nodeType": "VariableDeclaration", + "scope": 439, + "src": "207:22:2", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_DAVToken_$288", + "typeString": "contract DAVToken" + }, + "typeName": { + "contractScope": null, + "id": 299, + "name": "DAVToken", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 288, + "src": "207:8:2", + "typeDescriptions": { + "typeIdentifier": "t_contract$_DAVToken_$288", + "typeString": "contract DAVToken" + } + }, + "value": null, + "visibility": "private" + }, + { + "constant": true, + "id": 303, + "name": "ETH_SIGNED_MESSAGE_PREFIX", + "nodeType": "VariableDeclaration", + "scope": 439, + "src": "282:87:2", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes28", + "typeString": "bytes28" + }, + "typeName": { + "id": 301, + "name": "bytes28", + "nodeType": "ElementaryTypeName", + "src": "282:7:2", + "typeDescriptions": { + "typeIdentifier": "t_bytes28", + "typeString": "bytes28" + } + }, + "value": { + "argumentTypes": null, + "hexValue": "19457468657265756d205369676e6564204d6573736167653a0a3332", + "id": 302, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "335:34:2", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_178a2411ab6fbc1ba11064408972259c558d0e82fd48b0aba3ad81d14f065e73", + "typeString": "literal_string \"\u0019Ethereum Signed Message:\n32\"" + }, + "value": "\u0019Ethereum Signed Message:\n32" + }, + "visibility": "private" + }, + { + "constant": true, + "id": 306, + "name": "DAV_REGESTRATION_REQUEST", + "nodeType": "VariableDeclaration", + "scope": 439, + "src": "373:79:2", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes25", + "typeString": "bytes25" + }, + "typeName": { + "id": 304, + "name": "bytes25", + "nodeType": "ElementaryTypeName", + "src": "373:7:2", + "typeDescriptions": { + "typeIdentifier": "t_bytes25", + "typeString": "bytes25" + } + }, + "value": { + "argumentTypes": null, + "hexValue": "444156204964656e7469747920526567697374726174696f6e", + "id": 305, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "425:27:2", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_3d75604157f80934d3965cbdf5676395ddaf5f92b8d7c90caf745f93d35d2066", + "typeString": "literal_string \"DAV Identity Registration\"" + }, + "value": "DAV Identity Registration" + }, + "visibility": "private" + }, + { + "body": { + "id": 315, + "nodeType": "Block", + "src": "609:36:2", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 313, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "id": 311, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 300, + "src": "615:5:2", + "typeDescriptions": { + "typeIdentifier": "t_contract$_DAVToken_$288", + "typeString": "contract DAVToken" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "id": 312, + "name": "_davTokenContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 308, + "src": "623:17:2", + "typeDescriptions": { + "typeIdentifier": "t_contract$_DAVToken_$288", + "typeString": "contract DAVToken" + } + }, + "src": "615:25:2", + "typeDescriptions": { + "typeIdentifier": "t_contract$_DAVToken_$288", + "typeString": "contract DAVToken" + } + }, + "id": 314, + "nodeType": "ExpressionStatement", + "src": "615:25:2" + } + ] + }, + "id": 316, + "implemented": true, + "isConstructor": true, + "isDeclaredConst": false, + "modifiers": [], + "name": "Identity", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 309, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 308, + "name": "_davTokenContract", + "nodeType": "VariableDeclaration", + "scope": 316, + "src": "574:26:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_DAVToken_$288", + "typeString": "contract DAVToken" + }, + "typeName": { + "contractScope": null, + "id": 307, + "name": "DAVToken", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 288, + "src": "574:8:2", + "typeDescriptions": { + "typeIdentifier": "t_contract$_DAVToken_$288", + "typeString": "contract DAVToken" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "573:28:2" + }, + "payable": false, + "returnParameters": { + "id": 310, + "nodeType": "ParameterList", + "parameters": [], + "src": "609:0:2" + }, + "scope": 439, + "src": "556:89:2", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 365, + "nodeType": "Block", + "src": "721:446:2", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 333, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 328, + "name": "identities", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 298, + "src": "787:10:2", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_DAVIdentity_$294_storage_$", + "typeString": "mapping(address => struct Identity.DAVIdentity storage ref)" + } + }, + "id": 330, + "indexExpression": { + "argumentTypes": null, + "id": 329, + "name": "_id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 318, + "src": "798:3:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "787:15:2", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DAVIdentity_$294_storage", + "typeString": "struct Identity.DAVIdentity storage ref" + } + }, + "id": 331, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "wallet", + "nodeType": "MemberAccess", + "referencedDeclaration": 293, + "src": "787:22:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "hexValue": "307830", + "id": 332, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "813:3:2", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0x0" + }, + "src": "787:29:2", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 327, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1164, + "src": "772:7:2", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", + "typeString": "function (bool) pure" + } + }, + "id": 334, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "772:50:2", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 335, + "nodeType": "ExpressionStatement", + "src": "772:50:2" + }, + { + "assignments": [ + 337 + ], + "declarations": [ + { + "constant": false, + "id": 337, + "name": "prefixedHash", + "nodeType": "VariableDeclaration", + "scope": 366, + "src": "857:20:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 336, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "857:7:2", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 344, + "initialValue": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 339, + "name": "ETH_SIGNED_MESSAGE_PREFIX", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 303, + "src": "890:25:2", + "typeDescriptions": { + "typeIdentifier": "t_bytes28", + "typeString": "bytes28" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 341, + "name": "DAV_REGESTRATION_REQUEST", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 306, + "src": "927:24:2", + "typeDescriptions": { + "typeIdentifier": "t_bytes25", + "typeString": "bytes25" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes25", + "typeString": "bytes25" + } + ], + "id": 340, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1155, + "src": "917:9:2", + "typeDescriptions": { + "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$", + "typeString": "function () pure returns (bytes32)" + } + }, + "id": 342, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "917:35:2", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes28", + "typeString": "bytes28" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 338, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1155, + "src": "880:9:2", + "typeDescriptions": { + "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$", + "typeString": "function () pure returns (bytes32)" + } + }, + "id": 343, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "880:73:2", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "857:96:2" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 353, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 347, + "name": "prefixedHash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 337, + "src": "1016:12:2", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "argumentTypes": null, + "id": 348, + "name": "_v", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 320, + "src": "1030:2:2", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + { + "argumentTypes": null, + "id": 349, + "name": "_r", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 322, + "src": "1034:2:2", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "argumentTypes": null, + "id": 350, + "name": "_s", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 324, + "src": "1038:2:2", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 346, + "name": "ecrecover", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1154, + "src": "1006:9:2", + "typeDescriptions": { + "typeIdentifier": "t_function_ecrecover_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$", + "typeString": "function (bytes32,uint8,bytes32,bytes32) pure returns (address)" + } + }, + "id": 351, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1006:35:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "id": 352, + "name": "_id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 318, + "src": "1045:3:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "1006:42:2", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 345, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1164, + "src": "991:7:2", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", + "typeString": "function (bool) pure" + } + }, + "id": 354, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "991:63:2", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 355, + "nodeType": "ExpressionStatement", + "src": "991:63:2" + }, + { + "expression": { + "argumentTypes": null, + "id": 363, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 356, + "name": "identities", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 298, + "src": "1099:10:2", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_DAVIdentity_$294_storage_$", + "typeString": "mapping(address => struct Identity.DAVIdentity storage ref)" + } + }, + "id": 358, + "indexExpression": { + "argumentTypes": null, + "id": 357, + "name": "_id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 318, + "src": "1110:3:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "1099:15:2", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DAVIdentity_$294_storage", + "typeString": "struct Identity.DAVIdentity storage ref" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 360, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1161, + "src": "1145:3:2", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 361, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1145:10:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": null, + "id": 359, + "name": "DAVIdentity", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 294, + "src": "1117:11:2", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_struct$_DAVIdentity_$294_storage_ptr_$", + "typeString": "type(struct Identity.DAVIdentity storage pointer)" + } + }, + "id": 362, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "structConstructorCall", + "lValueRequested": false, + "names": [ + "wallet" + ], + "nodeType": "FunctionCall", + "src": "1117:45:2", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DAVIdentity_$294_memory", + "typeString": "struct Identity.DAVIdentity memory" + } + }, + "src": "1099:63:2", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DAVIdentity_$294_storage", + "typeString": "struct Identity.DAVIdentity storage ref" + } + }, + "id": 364, + "nodeType": "ExpressionStatement", + "src": "1099:63:2" + } + ] + }, + "id": 366, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [], + "name": "register", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 325, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 318, + "name": "_id", + "nodeType": "VariableDeclaration", + "scope": 366, + "src": "667:11:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 317, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "667:7:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 320, + "name": "_v", + "nodeType": "VariableDeclaration", + "scope": 366, + "src": "680:8:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + "typeName": { + "id": 319, + "name": "uint8", + "nodeType": "ElementaryTypeName", + "src": "680:5:2", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 322, + "name": "_r", + "nodeType": "VariableDeclaration", + "scope": 366, + "src": "690:10:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 321, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "690:7:2", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 324, + "name": "_s", + "nodeType": "VariableDeclaration", + "scope": 366, + "src": "702:10:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 323, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "702:7:2", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "666:47:2" + }, + "payable": false, + "returnParameters": { + "id": 326, + "nodeType": "ParameterList", + "parameters": [], + "src": "721:0:2" + }, + "scope": 439, + "src": "649:518:2", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 389, + "nodeType": "Block", + "src": "1204:228:2", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 376, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 370, + "name": "identities", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 298, + "src": "1270:10:2", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_DAVIdentity_$294_storage_$", + "typeString": "mapping(address => struct Identity.DAVIdentity storage ref)" + } + }, + "id": 373, + "indexExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 371, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1161, + "src": "1281:3:2", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 372, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1281:10:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "1270:22:2", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DAVIdentity_$294_storage", + "typeString": "struct Identity.DAVIdentity storage ref" + } + }, + "id": 374, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "wallet", + "nodeType": "MemberAccess", + "referencedDeclaration": 293, + "src": "1270:29:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "hexValue": "307830", + "id": 375, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1303:3:2", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0x0" + }, + "src": "1270:36:2", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 369, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1164, + "src": "1255:7:2", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", + "typeString": "function (bool) pure" + } + }, + "id": 377, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1255:57:2", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 378, + "nodeType": "ExpressionStatement", + "src": "1255:57:2" + }, + { + "expression": { + "argumentTypes": null, + "id": 387, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 379, + "name": "identities", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 298, + "src": "1357:10:2", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_DAVIdentity_$294_storage_$", + "typeString": "mapping(address => struct Identity.DAVIdentity storage ref)" + } + }, + "id": 382, + "indexExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 380, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1161, + "src": "1368:3:2", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 381, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1368:10:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "1357:22:2", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DAVIdentity_$294_storage", + "typeString": "struct Identity.DAVIdentity storage ref" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 384, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1161, + "src": "1410:3:2", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 385, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1410:10:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": null, + "id": 383, + "name": "DAVIdentity", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 294, + "src": "1382:11:2", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_struct$_DAVIdentity_$294_storage_ptr_$", + "typeString": "type(struct Identity.DAVIdentity storage pointer)" + } + }, + "id": 386, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "structConstructorCall", + "lValueRequested": false, + "names": [ + "wallet" + ], + "nodeType": "FunctionCall", + "src": "1382:45:2", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DAVIdentity_$294_memory", + "typeString": "struct Identity.DAVIdentity memory" + } + }, + "src": "1357:70:2", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DAVIdentity_$294_storage", + "typeString": "struct Identity.DAVIdentity storage ref" + } + }, + "id": 388, + "nodeType": "ExpressionStatement", + "src": "1357:70:2" + } + ] + }, + "id": 390, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [], + "name": "registerSimple", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 367, + "nodeType": "ParameterList", + "parameters": [], + "src": "1194:2:2" + }, + "payable": false, + "returnParameters": { + "id": 368, + "nodeType": "ParameterList", + "parameters": [], + "src": "1204:0:2" + }, + "scope": 439, + "src": "1171:261:2", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 405, + "nodeType": "Block", + "src": "1507:57:2", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 399, + "name": "identities", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 298, + "src": "1536:10:2", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_DAVIdentity_$294_storage_$", + "typeString": "mapping(address => struct Identity.DAVIdentity storage ref)" + } + }, + "id": 401, + "indexExpression": { + "argumentTypes": null, + "id": 400, + "name": "_id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 392, + "src": "1547:3:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "1536:15:2", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DAVIdentity_$294_storage", + "typeString": "struct Identity.DAVIdentity storage ref" + } + }, + "id": 402, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "wallet", + "nodeType": "MemberAccess", + "referencedDeclaration": 293, + "src": "1536:22:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 397, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 300, + "src": "1520:5:2", + "typeDescriptions": { + "typeIdentifier": "t_contract$_DAVToken_$288", + "typeString": "contract DAVToken" + } + }, + "id": 398, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "balanceOf", + "nodeType": "MemberAccess", + "referencedDeclaration": 827, + "src": "1520:15:2", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", + "typeString": "function (address) view external returns (uint256)" + } + }, + "id": 403, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1520:39:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 396, + "id": 404, + "nodeType": "Return", + "src": "1513:46:2" + } + ] + }, + "id": 406, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "getBalance", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 393, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 392, + "name": "_id", + "nodeType": "VariableDeclaration", + "scope": 406, + "src": "1456:11:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 391, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1456:7:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1455:13:2" + }, + "payable": false, + "returnParameters": { + "id": 396, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 395, + "name": "balance", + "nodeType": "VariableDeclaration", + "scope": 406, + "src": "1490:15:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 394, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1490:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1489:17:2" + }, + "scope": 439, + "src": "1436:128:2", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 422, + "nodeType": "Block", + "src": "1659:51:2", + "statements": [ + { + "expression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 420, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 415, + "name": "identities", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 298, + "src": "1672:10:2", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_DAVIdentity_$294_storage_$", + "typeString": "mapping(address => struct Identity.DAVIdentity storage ref)" + } + }, + "id": 417, + "indexExpression": { + "argumentTypes": null, + "id": 416, + "name": "_id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 408, + "src": "1683:3:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "1672:15:2", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DAVIdentity_$294_storage", + "typeString": "struct Identity.DAVIdentity storage ref" + } + }, + "id": 418, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "wallet", + "nodeType": "MemberAccess", + "referencedDeclaration": 293, + "src": "1672:22:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "id": 419, + "name": "_wallet", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 410, + "src": "1698:7:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "1672:33:2", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 414, + "id": 421, + "nodeType": "Return", + "src": "1665:40:2" + } + ] + }, + "id": 423, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "verifyOwnership", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 411, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 408, + "name": "_id", + "nodeType": "VariableDeclaration", + "scope": 423, + "src": "1593:11:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 407, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1593:7:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 410, + "name": "_wallet", + "nodeType": "VariableDeclaration", + "scope": 423, + "src": "1606:15:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 409, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1606:7:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1592:30:2" + }, + "payable": false, + "returnParameters": { + "id": 414, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 413, + "name": "verified", + "nodeType": "VariableDeclaration", + "scope": 423, + "src": "1644:13:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 412, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1644:4:2", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1643:15:2" + }, + "scope": 439, + "src": "1568:142:2", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 437, + "nodeType": "Block", + "src": "1816:47:2", + "statements": [ + { + "expression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 435, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 430, + "name": "identities", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 298, + "src": "1829:10:2", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_DAVIdentity_$294_storage_$", + "typeString": "mapping(address => struct Identity.DAVIdentity storage ref)" + } + }, + "id": 432, + "indexExpression": { + "argumentTypes": null, + "id": 431, + "name": "_id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 425, + "src": "1840:3:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "1829:15:2", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DAVIdentity_$294_storage", + "typeString": "struct Identity.DAVIdentity storage ref" + } + }, + "id": 433, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "wallet", + "nodeType": "MemberAccess", + "referencedDeclaration": 293, + "src": "1829:22:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "argumentTypes": null, + "hexValue": "307830", + "id": 434, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1855:3:2", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0x0" + }, + "src": "1829:29:2", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 429, + "id": 436, + "nodeType": "Return", + "src": "1822:36:2" + } + ] + }, + "id": 438, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "isRegistered", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 426, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 425, + "name": "_id", + "nodeType": "VariableDeclaration", + "scope": 438, + "src": "1776:11:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 424, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1776:7:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1775:13:2" + }, + "payable": false, + "returnParameters": { + "id": 429, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 428, + "name": "", + "nodeType": "VariableDeclaration", + "scope": 438, + "src": "1810:4:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 427, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1810:4:2", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1809:6:2" + }, + "scope": 439, + "src": "1754:109:2", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + } + ], + "scope": 440, + "src": "80:1785:2" + } + ], + "src": "0:1866:2" + }, + "legacyAST": { + "absolutePath": "/Users/anatolyt/projects/dav/contracts/contracts/Identity.sol", + "exportedSymbols": { + "Identity": [ + 439 + ] + }, + "id": 440, + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 290, + "literals": [ + "solidity", + "^", + "0.4", + ".15" + ], + "nodeType": "PragmaDirective", + "src": "0:24:2" + }, + { + "absolutePath": "/Users/anatolyt/projects/dav/contracts/contracts/DAVToken.sol", + "file": "./DAVToken.sol", + "id": 291, + "nodeType": "ImportDirective", + "scope": 440, + "sourceUnit": 289, + "src": "26:24:2", + "symbolAliases": [], + "unitAlias": "" + }, + { + "baseContracts": [], + "contractDependencies": [], + "contractKind": "contract", + "documentation": "@title Identity", + "fullyImplemented": true, + "id": 439, + "linearizedBaseContracts": [ + 439 + ], + "name": "Identity", + "nodeType": "ContractDefinition", + "nodes": [ + { + "canonicalName": "Identity.DAVIdentity", + "id": 294, + "members": [ + { + "constant": false, + "id": 293, + "name": "wallet", + "nodeType": "VariableDeclaration", + "scope": 294, + "src": "128:14:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 292, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "128:7:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "name": "DAVIdentity", + "nodeType": "StructDefinition", + "scope": 439, + "src": "103:44:2", + "visibility": "public" + }, + { + "constant": false, + "id": 298, + "name": "identities", + "nodeType": "VariableDeclaration", + "scope": 439, + "src": "151:51:2", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_DAVIdentity_$294_storage_$", + "typeString": "mapping(address => struct Identity.DAVIdentity storage ref)" + }, + "typeName": { + "id": 297, + "keyType": { + "id": 295, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "160:7:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "151:32:2", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_DAVIdentity_$294_storage_$", + "typeString": "mapping(address => struct Identity.DAVIdentity storage ref)" + }, + "valueType": { + "contractScope": null, + "id": 296, + "name": "DAVIdentity", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 294, + "src": "171:11:2", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DAVIdentity_$294_storage_ptr", + "typeString": "struct Identity.DAVIdentity storage pointer" + } + } + }, + "value": null, + "visibility": "private" + }, + { + "constant": false, + "id": 300, + "name": "token", + "nodeType": "VariableDeclaration", + "scope": 439, + "src": "207:22:2", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_DAVToken_$288", + "typeString": "contract DAVToken" + }, + "typeName": { + "contractScope": null, + "id": 299, + "name": "DAVToken", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 288, + "src": "207:8:2", + "typeDescriptions": { + "typeIdentifier": "t_contract$_DAVToken_$288", + "typeString": "contract DAVToken" + } + }, + "value": null, + "visibility": "private" + }, + { + "constant": true, + "id": 303, + "name": "ETH_SIGNED_MESSAGE_PREFIX", + "nodeType": "VariableDeclaration", + "scope": 439, + "src": "282:87:2", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes28", + "typeString": "bytes28" + }, + "typeName": { + "id": 301, + "name": "bytes28", + "nodeType": "ElementaryTypeName", + "src": "282:7:2", + "typeDescriptions": { + "typeIdentifier": "t_bytes28", + "typeString": "bytes28" + } + }, + "value": { + "argumentTypes": null, + "hexValue": "19457468657265756d205369676e6564204d6573736167653a0a3332", + "id": 302, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "335:34:2", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_178a2411ab6fbc1ba11064408972259c558d0e82fd48b0aba3ad81d14f065e73", + "typeString": "literal_string \"\u0019Ethereum Signed Message:\n32\"" + }, + "value": "\u0019Ethereum Signed Message:\n32" + }, + "visibility": "private" + }, + { + "constant": true, + "id": 306, + "name": "DAV_REGESTRATION_REQUEST", + "nodeType": "VariableDeclaration", + "scope": 439, + "src": "373:79:2", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes25", + "typeString": "bytes25" + }, + "typeName": { + "id": 304, + "name": "bytes25", + "nodeType": "ElementaryTypeName", + "src": "373:7:2", + "typeDescriptions": { + "typeIdentifier": "t_bytes25", + "typeString": "bytes25" + } + }, + "value": { + "argumentTypes": null, + "hexValue": "444156204964656e7469747920526567697374726174696f6e", + "id": 305, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "425:27:2", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_3d75604157f80934d3965cbdf5676395ddaf5f92b8d7c90caf745f93d35d2066", + "typeString": "literal_string \"DAV Identity Registration\"" + }, + "value": "DAV Identity Registration" + }, + "visibility": "private" + }, + { + "body": { + "id": 315, + "nodeType": "Block", + "src": "609:36:2", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 313, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "id": 311, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 300, + "src": "615:5:2", + "typeDescriptions": { + "typeIdentifier": "t_contract$_DAVToken_$288", + "typeString": "contract DAVToken" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "id": 312, + "name": "_davTokenContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 308, + "src": "623:17:2", + "typeDescriptions": { + "typeIdentifier": "t_contract$_DAVToken_$288", + "typeString": "contract DAVToken" + } + }, + "src": "615:25:2", + "typeDescriptions": { + "typeIdentifier": "t_contract$_DAVToken_$288", + "typeString": "contract DAVToken" + } + }, + "id": 314, + "nodeType": "ExpressionStatement", + "src": "615:25:2" + } + ] + }, + "id": 316, + "implemented": true, + "isConstructor": true, + "isDeclaredConst": false, + "modifiers": [], + "name": "Identity", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 309, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 308, + "name": "_davTokenContract", + "nodeType": "VariableDeclaration", + "scope": 316, + "src": "574:26:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_DAVToken_$288", + "typeString": "contract DAVToken" + }, + "typeName": { + "contractScope": null, + "id": 307, + "name": "DAVToken", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 288, + "src": "574:8:2", + "typeDescriptions": { + "typeIdentifier": "t_contract$_DAVToken_$288", + "typeString": "contract DAVToken" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "573:28:2" + }, + "payable": false, + "returnParameters": { + "id": 310, + "nodeType": "ParameterList", + "parameters": [], + "src": "609:0:2" + }, + "scope": 439, + "src": "556:89:2", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 365, + "nodeType": "Block", + "src": "721:446:2", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 333, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 328, + "name": "identities", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 298, + "src": "787:10:2", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_DAVIdentity_$294_storage_$", + "typeString": "mapping(address => struct Identity.DAVIdentity storage ref)" + } + }, + "id": 330, + "indexExpression": { + "argumentTypes": null, + "id": 329, + "name": "_id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 318, + "src": "798:3:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "787:15:2", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DAVIdentity_$294_storage", + "typeString": "struct Identity.DAVIdentity storage ref" + } + }, + "id": 331, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "wallet", + "nodeType": "MemberAccess", + "referencedDeclaration": 293, + "src": "787:22:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "hexValue": "307830", + "id": 332, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "813:3:2", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0x0" + }, + "src": "787:29:2", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 327, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1164, + "src": "772:7:2", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", + "typeString": "function (bool) pure" + } + }, + "id": 334, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "772:50:2", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 335, + "nodeType": "ExpressionStatement", + "src": "772:50:2" + }, + { + "assignments": [ + 337 + ], + "declarations": [ + { + "constant": false, + "id": 337, + "name": "prefixedHash", + "nodeType": "VariableDeclaration", + "scope": 366, + "src": "857:20:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 336, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "857:7:2", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 344, + "initialValue": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 339, + "name": "ETH_SIGNED_MESSAGE_PREFIX", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 303, + "src": "890:25:2", + "typeDescriptions": { + "typeIdentifier": "t_bytes28", + "typeString": "bytes28" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 341, + "name": "DAV_REGESTRATION_REQUEST", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 306, + "src": "927:24:2", + "typeDescriptions": { + "typeIdentifier": "t_bytes25", + "typeString": "bytes25" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes25", + "typeString": "bytes25" + } + ], + "id": 340, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1155, + "src": "917:9:2", + "typeDescriptions": { + "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$", + "typeString": "function () pure returns (bytes32)" + } + }, + "id": 342, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "917:35:2", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes28", + "typeString": "bytes28" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 338, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1155, + "src": "880:9:2", + "typeDescriptions": { + "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$", + "typeString": "function () pure returns (bytes32)" + } + }, + "id": 343, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "880:73:2", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "857:96:2" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 353, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 347, + "name": "prefixedHash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 337, + "src": "1016:12:2", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "argumentTypes": null, + "id": 348, + "name": "_v", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 320, + "src": "1030:2:2", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + { + "argumentTypes": null, + "id": 349, + "name": "_r", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 322, + "src": "1034:2:2", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "argumentTypes": null, + "id": 350, + "name": "_s", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 324, + "src": "1038:2:2", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 346, + "name": "ecrecover", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1154, + "src": "1006:9:2", + "typeDescriptions": { + "typeIdentifier": "t_function_ecrecover_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$", + "typeString": "function (bytes32,uint8,bytes32,bytes32) pure returns (address)" + } + }, + "id": 351, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1006:35:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "id": 352, + "name": "_id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 318, + "src": "1045:3:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "1006:42:2", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 345, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1164, + "src": "991:7:2", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", + "typeString": "function (bool) pure" + } + }, + "id": 354, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "991:63:2", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 355, + "nodeType": "ExpressionStatement", + "src": "991:63:2" + }, + { + "expression": { + "argumentTypes": null, + "id": 363, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 356, + "name": "identities", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 298, + "src": "1099:10:2", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_DAVIdentity_$294_storage_$", + "typeString": "mapping(address => struct Identity.DAVIdentity storage ref)" + } + }, + "id": 358, + "indexExpression": { + "argumentTypes": null, + "id": 357, + "name": "_id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 318, + "src": "1110:3:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "1099:15:2", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DAVIdentity_$294_storage", + "typeString": "struct Identity.DAVIdentity storage ref" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 360, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1161, + "src": "1145:3:2", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 361, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1145:10:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": null, + "id": 359, + "name": "DAVIdentity", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 294, + "src": "1117:11:2", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_struct$_DAVIdentity_$294_storage_ptr_$", + "typeString": "type(struct Identity.DAVIdentity storage pointer)" + } + }, + "id": 362, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "structConstructorCall", + "lValueRequested": false, + "names": [ + "wallet" + ], + "nodeType": "FunctionCall", + "src": "1117:45:2", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DAVIdentity_$294_memory", + "typeString": "struct Identity.DAVIdentity memory" + } + }, + "src": "1099:63:2", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DAVIdentity_$294_storage", + "typeString": "struct Identity.DAVIdentity storage ref" + } + }, + "id": 364, + "nodeType": "ExpressionStatement", + "src": "1099:63:2" + } + ] + }, + "id": 366, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [], + "name": "register", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 325, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 318, + "name": "_id", + "nodeType": "VariableDeclaration", + "scope": 366, + "src": "667:11:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 317, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "667:7:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 320, + "name": "_v", + "nodeType": "VariableDeclaration", + "scope": 366, + "src": "680:8:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + "typeName": { + "id": 319, + "name": "uint8", + "nodeType": "ElementaryTypeName", + "src": "680:5:2", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 322, + "name": "_r", + "nodeType": "VariableDeclaration", + "scope": 366, + "src": "690:10:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 321, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "690:7:2", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 324, + "name": "_s", + "nodeType": "VariableDeclaration", + "scope": 366, + "src": "702:10:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 323, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "702:7:2", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "666:47:2" + }, + "payable": false, + "returnParameters": { + "id": 326, + "nodeType": "ParameterList", + "parameters": [], + "src": "721:0:2" + }, + "scope": 439, + "src": "649:518:2", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 389, + "nodeType": "Block", + "src": "1204:228:2", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 376, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 370, + "name": "identities", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 298, + "src": "1270:10:2", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_DAVIdentity_$294_storage_$", + "typeString": "mapping(address => struct Identity.DAVIdentity storage ref)" + } + }, + "id": 373, + "indexExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 371, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1161, + "src": "1281:3:2", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 372, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1281:10:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "1270:22:2", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DAVIdentity_$294_storage", + "typeString": "struct Identity.DAVIdentity storage ref" + } + }, + "id": 374, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "wallet", + "nodeType": "MemberAccess", + "referencedDeclaration": 293, + "src": "1270:29:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "hexValue": "307830", + "id": 375, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1303:3:2", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0x0" + }, + "src": "1270:36:2", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 369, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1164, + "src": "1255:7:2", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", + "typeString": "function (bool) pure" + } + }, + "id": 377, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1255:57:2", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 378, + "nodeType": "ExpressionStatement", + "src": "1255:57:2" + }, + { + "expression": { + "argumentTypes": null, + "id": 387, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 379, + "name": "identities", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 298, + "src": "1357:10:2", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_DAVIdentity_$294_storage_$", + "typeString": "mapping(address => struct Identity.DAVIdentity storage ref)" + } + }, + "id": 382, + "indexExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 380, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1161, + "src": "1368:3:2", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 381, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1368:10:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "1357:22:2", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DAVIdentity_$294_storage", + "typeString": "struct Identity.DAVIdentity storage ref" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 384, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1161, + "src": "1410:3:2", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 385, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1410:10:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": null, + "id": 383, + "name": "DAVIdentity", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 294, + "src": "1382:11:2", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_struct$_DAVIdentity_$294_storage_ptr_$", + "typeString": "type(struct Identity.DAVIdentity storage pointer)" + } + }, + "id": 386, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "structConstructorCall", + "lValueRequested": false, + "names": [ + "wallet" + ], + "nodeType": "FunctionCall", + "src": "1382:45:2", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DAVIdentity_$294_memory", + "typeString": "struct Identity.DAVIdentity memory" + } + }, + "src": "1357:70:2", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DAVIdentity_$294_storage", + "typeString": "struct Identity.DAVIdentity storage ref" + } + }, + "id": 388, + "nodeType": "ExpressionStatement", + "src": "1357:70:2" + } + ] + }, + "id": 390, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [], + "name": "registerSimple", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 367, + "nodeType": "ParameterList", + "parameters": [], + "src": "1194:2:2" + }, + "payable": false, + "returnParameters": { + "id": 368, + "nodeType": "ParameterList", + "parameters": [], + "src": "1204:0:2" + }, + "scope": 439, + "src": "1171:261:2", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 405, + "nodeType": "Block", + "src": "1507:57:2", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 399, + "name": "identities", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 298, + "src": "1536:10:2", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_DAVIdentity_$294_storage_$", + "typeString": "mapping(address => struct Identity.DAVIdentity storage ref)" + } + }, + "id": 401, + "indexExpression": { + "argumentTypes": null, + "id": 400, + "name": "_id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 392, + "src": "1547:3:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "1536:15:2", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DAVIdentity_$294_storage", + "typeString": "struct Identity.DAVIdentity storage ref" + } + }, + "id": 402, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "wallet", + "nodeType": "MemberAccess", + "referencedDeclaration": 293, + "src": "1536:22:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 397, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 300, + "src": "1520:5:2", + "typeDescriptions": { + "typeIdentifier": "t_contract$_DAVToken_$288", + "typeString": "contract DAVToken" + } + }, + "id": 398, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "balanceOf", + "nodeType": "MemberAccess", + "referencedDeclaration": 827, + "src": "1520:15:2", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", + "typeString": "function (address) view external returns (uint256)" + } + }, + "id": 403, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1520:39:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 396, + "id": 404, + "nodeType": "Return", + "src": "1513:46:2" + } + ] + }, + "id": 406, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "getBalance", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 393, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 392, + "name": "_id", + "nodeType": "VariableDeclaration", + "scope": 406, + "src": "1456:11:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 391, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1456:7:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1455:13:2" + }, + "payable": false, + "returnParameters": { + "id": 396, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 395, + "name": "balance", + "nodeType": "VariableDeclaration", + "scope": 406, + "src": "1490:15:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 394, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1490:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1489:17:2" + }, + "scope": 439, + "src": "1436:128:2", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 422, + "nodeType": "Block", + "src": "1659:51:2", + "statements": [ + { + "expression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 420, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 415, + "name": "identities", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 298, + "src": "1672:10:2", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_DAVIdentity_$294_storage_$", + "typeString": "mapping(address => struct Identity.DAVIdentity storage ref)" + } + }, + "id": 417, + "indexExpression": { + "argumentTypes": null, + "id": 416, + "name": "_id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 408, + "src": "1683:3:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "1672:15:2", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DAVIdentity_$294_storage", + "typeString": "struct Identity.DAVIdentity storage ref" + } + }, + "id": 418, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "wallet", + "nodeType": "MemberAccess", + "referencedDeclaration": 293, + "src": "1672:22:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "id": 419, + "name": "_wallet", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 410, + "src": "1698:7:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "1672:33:2", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 414, + "id": 421, + "nodeType": "Return", + "src": "1665:40:2" + } + ] + }, + "id": 423, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "verifyOwnership", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 411, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 408, + "name": "_id", + "nodeType": "VariableDeclaration", + "scope": 423, + "src": "1593:11:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 407, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1593:7:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 410, + "name": "_wallet", + "nodeType": "VariableDeclaration", + "scope": 423, + "src": "1606:15:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 409, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1606:7:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1592:30:2" + }, + "payable": false, + "returnParameters": { + "id": 414, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 413, + "name": "verified", + "nodeType": "VariableDeclaration", + "scope": 423, + "src": "1644:13:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 412, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1644:4:2", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1643:15:2" + }, + "scope": 439, + "src": "1568:142:2", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 437, + "nodeType": "Block", + "src": "1816:47:2", + "statements": [ + { + "expression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 435, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 430, + "name": "identities", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 298, + "src": "1829:10:2", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_DAVIdentity_$294_storage_$", + "typeString": "mapping(address => struct Identity.DAVIdentity storage ref)" + } + }, + "id": 432, + "indexExpression": { + "argumentTypes": null, + "id": 431, + "name": "_id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 425, + "src": "1840:3:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "1829:15:2", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DAVIdentity_$294_storage", + "typeString": "struct Identity.DAVIdentity storage ref" + } + }, + "id": 433, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "wallet", + "nodeType": "MemberAccess", + "referencedDeclaration": 293, + "src": "1829:22:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "argumentTypes": null, + "hexValue": "307830", + "id": 434, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1855:3:2", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0x0" + }, + "src": "1829:29:2", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 429, + "id": 436, + "nodeType": "Return", + "src": "1822:36:2" + } + ] + }, + "id": 438, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "isRegistered", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 426, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 425, + "name": "_id", + "nodeType": "VariableDeclaration", + "scope": 438, + "src": "1776:11:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 424, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1776:7:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1775:13:2" + }, + "payable": false, + "returnParameters": { + "id": 429, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 428, + "name": "", + "nodeType": "VariableDeclaration", + "scope": 438, + "src": "1810:4:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 427, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1810:4:2", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1809:6:2" + }, + "scope": 439, + "src": "1754:109:2", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + } + ], + "scope": 440, + "src": "80:1785:2" + } + ], + "src": "0:1866:2" + }, + "compiler": { + "name": "solc", + "version": "0.4.19+commit.c4cbbb05.Emscripten.clang" + }, + "networks": { + "1522233337963": { + "events": {}, + "links": {}, + "address": "0xc89ce4735882c9f0f0fe26686c53074e09b0d550", + "transactionHash": "0x79aca0d88559641cba68912d9f2e1a2ac6db5776d00815ab35a9f1451f308f3b" + }, + "1522241052538": { + "events": {}, + "links": {}, + "address": "0xc89ce4735882c9f0f0fe26686c53074e09b0d550", + "transactionHash": "0x79aca0d88559641cba68912d9f2e1a2ac6db5776d00815ab35a9f1451f308f3b" + } + }, + "schemaVersion": "2.0.0", + "updatedAt": "2018-03-28T12:44:25.016Z" +} \ No newline at end of file diff --git a/src/components/OrderScreen.css b/src/components/OrderScreen.css index 9096699..4ce8692 100644 --- a/src/components/OrderScreen.css +++ b/src/components/OrderScreen.css @@ -68,3 +68,34 @@ a.form-submit-button { .geosuggest__item__matched-text { font-weight: bold; } + +.swallet-dialog__close-button { + position: absolute; + top: 10px; + right: 19px; +} + +.wallet-dialog { + text-align: center; +} + +.wallet-dialog p { + text-align:center; + margin: 25px; +} + +.wallet-dialog h1 { + font-size: 20px; +} + +.wallet-dialog span { + display: block; + font-size: 12px; + margin: 10px; +} + +.wallet-dialog button.big-button { + font-weight: normal; + padding: 15px 80px; + margin: auto; +} \ No newline at end of file diff --git a/src/components/OrderScreen.jsx b/src/components/OrderScreen.jsx index 0dac66e..a9d9701 100644 --- a/src/components/OrderScreen.jsx +++ b/src/components/OrderScreen.jsx @@ -7,6 +7,7 @@ import IconSelector from './IconSelector.jsx'; import getConfig from '../config'; import { packageSizeOptions } from '../lib/utils'; import Geosuggest from 'react-geosuggest'; +import x_button from '../images/x_button.svg'; class OrderScreen extends Component { constructor(props) { @@ -33,6 +34,12 @@ class OrderScreen extends Component { this.props.onMount(); } + componentWillReceiveProps(nextProps) { + if(nextProps.registration_step === 'register_fulfilled') { + this.submitForm(); + } + } + createOrderDetailsObject() { const { pickup, dropoff, packageSize } = this.state; return { @@ -56,9 +63,10 @@ class OrderScreen extends Component { } submitForm() { - this.updateStoreFromForm({ stage: 'searching' }); + this.updateStoreFromForm({ stage: 'searching', registration_step: 'registered' }); let needDetails = this.createOrderDetailsObject(); this.props.createNeed(needDetails); + this.props.history.push(this.props.appPath+'/searching'); } selectPackageSize(size) { @@ -69,10 +77,63 @@ class OrderScreen extends Component { getSizeContainer() { } + dismissDialog() { + this.props.closeWalletDialog(); + } + + verifyIdentity() { + this.props.verifyIdentity(); + } + + registerIdentity() { + this.props.registerIdentity(); + } + render() { const { weight } = this.props; // size const pickup_at = this.props.pickup_at || new Date().toTimeString().slice(0, 5); + let showSignInToWalletDialog = this.props.registration_step === 'unlock_wallet'; + const signInToWalletDialog = ( +
+
+
+
+

Please Sign in To A Wallet

+

It seems that you are not signed in to
+ an existing wallet in your browser.
+ Please sign in, or create a new wallet.

+ +
+
+
); + + let showRegisterDavIdDialog = this.props.registration_step === 'register_id'; + const registerDavIdDialog = ( +
+
+
+
+
+ close button +
+

Missing DAV ID

+

This wallet is not connected to a DAV ID

+ + + Note: This is an Ethereum transaction that will
+ cost you some Gas +
+
+
+
); + return (
@@ -153,20 +214,19 @@ class OrderScreen extends Component { }} />
- + + { showSignInToWalletDialog === false ? (
) : signInToWalletDialog } + { showRegisterDavIdDialog === false ? (
) : registerDavIdDialog}
); } } OrderScreen.propTypes = { + history: PropTypes.object.isRequired, + appPath: PropTypes.string, userCoords: PropTypes.object, defaultDropoff: PropTypes.object, pickup: PropTypes.object, @@ -174,9 +234,14 @@ OrderScreen.propTypes = { pickup_at: PropTypes.string, size: PropTypes.string, weight: PropTypes.string, + registration_step: PropTypes.string.isRequired, + fetching: PropTypes.bool.isRequired, updateOrderDetails: PropTypes.func.isRequired, createNeed: PropTypes.func.isRequired, - onMount: PropTypes.func.isRequired + onMount: PropTypes.func.isRequired, + verifyIdentity: PropTypes.func.isRequired, + registerIdentity: PropTypes.func.isRequired, + closeWalletDialog: PropTypes.func.isRequired, }; export default OrderScreen; diff --git a/src/components/VehicleBid.jsx b/src/components/VehicleBid.jsx index bd57d32..c68a154 100644 --- a/src/components/VehicleBid.jsx +++ b/src/components/VehicleBid.jsx @@ -6,7 +6,7 @@ import currencyImage from '../images/dav.svg'; const VehicleBid = ({bid, vehicle, shown, chooseBid}) => { const clickChooseBid = (e) => { e.preventDefault(); - chooseBid(bid.id); + chooseBid(bid.id, bid.user_id, bid.price); }; let classNames = ['vehicle-bid-card']; diff --git a/src/containers/OrderScreenContainer.jsx b/src/containers/OrderScreenContainer.jsx index 313367e..1d9c17d 100644 --- a/src/containers/OrderScreenContainer.jsx +++ b/src/containers/OrderScreenContainer.jsx @@ -1,12 +1,22 @@ import { connect } from 'react-redux'; +import { withRouter } from 'react-router-dom'; import OrderScreen from '../components/OrderScreen.jsx'; import { shiftCoords } from '../lib/utils'; -import { updateOrderDetails, createNeed } from '../actions'; +import { + updateOrderDetails, + createNeed, + verifyDavId, + registerDavId, + closeWalletDialog +} from '../actions'; const mapDispatchToProps = (dispatch) => ({ updateOrderDetails: (details) => dispatch(updateOrderDetails(details)), createNeed: (need) => dispatch(createNeed(need)), onMount: () => dispatch(updateOrderDetails({ stage: 'draft' })), + verifyIdentity: () => dispatch(verifyDavId()), + registerIdentity: () => dispatch(registerDavId()), + closeWalletDialog: () => dispatch(closeWalletDialog()) }); export default connect( @@ -20,7 +30,10 @@ export default connect( pickup_at: state.order.pickup_at, size: state.order.size, weight: state.order.weight, + registration_step: state.order.registration_step, + fetching: state.order.fetching, + appPath: state.app.path }; }, mapDispatchToProps -)(OrderScreen); +)(withRouter(OrderScreen)); diff --git a/src/containers/SearchingScreenContainer.jsx b/src/containers/SearchingScreenContainer.jsx index eadf0e1..f8f7d42 100644 --- a/src/containers/SearchingScreenContainer.jsx +++ b/src/containers/SearchingScreenContainer.jsx @@ -2,12 +2,12 @@ import { connect } from 'react-redux'; import { getBidArray } from '../reducers/bids'; import { getVehicleOnMission } from '../reducers/vehicles'; import SearchingScreen from '../components/SearchingScreen.jsx'; -import { resetOrderDetails, chooseBid } from '../actions'; +import { resetOrderDetails, createMissionTransaction } from '../actions'; import { cancelNeed } from '../lib/api'; const mapDispatchToProps = (dispatch) => ({ cancelSearch: () => cancelNeed().then(dispatch(resetOrderDetails())), - chooseBid: (bidId) => dispatch(chooseBid(bidId)), + chooseBid: (bidId, vehicle_id, price) => dispatch(createMissionTransaction(bidId, vehicle_id, price)), }); export default connect( diff --git a/src/lib/api.js b/src/lib/api.js index e4b142f..d0f2e6e 100644 --- a/src/lib/api.js +++ b/src/lib/api.js @@ -2,7 +2,7 @@ import store from '../store'; import { packageSizeOptions } from '../lib/utils'; import moment from 'moment'; -const apiRoot = process.env.MISSION_CONTROL_HOST; +const apiRoot = process.env.MISSION_CONTROL_URL; export const fetchStatus = ({ id, lat, long, needId }) => { const missionId = store.getState().mission.id; @@ -39,7 +39,7 @@ export const createNeed = ({ pickup, dropoff, pickup_at, size, weight }) => { return fetchWithUserId(url, 'POST', body); }; -export const chooseBid = bidId => { +export const chooseBid = (bidId) => { let url = new URL(`/bids/${bidId}/choose`, apiRoot); return fetchWithUserId(url, 'PUT'); }; diff --git a/src/lib/dav.js b/src/lib/dav.js index f39a85a..cebdd7b 100644 --- a/src/lib/dav.js +++ b/src/lib/dav.js @@ -1,15 +1,128 @@ import store from '../store'; import timeout from 'callback-timeout'; import { + chooseBid, updateDavId, unlockWallet, unregisteredDavId, - registerDavIdFulfilled + registerDavIdFulfilled, + createMissionTransactionFulfilled, + createMissionTransactionFailed } from '../actions'; -import { davJS, web3 } from '@davfoundation/dav-js'; +const TruffleContract = require('truffle-contract'); +const Web3 = require('web3'); +const BLOCKCHAIN_TYPE = process.env.BLOCKCHAIN_TYPE || 'INJECTED'; + +let web3Provider = null; +// Use injected web3 instance +if (typeof window !== 'undefined' && typeof window.web3 !== 'undefined') { + web3Provider = window.web3.currentProvider; +} else if(BLOCKCHAIN_TYPE === 'ETH_LOCAL_TESTNET') { + // If no injected web3 instance is detected, fall back to Ganache + web3Provider = new Web3 + .providers + .HttpProvider('http://localhost:8545'); +} + +let web3 = new Web3(web3Provider); let davSDK; +const DavContracts = function() { + let contracts = { + identity: { + artifact: TruffleContract(require('../build/contracts/Identity.json')), + instance: null + }, + token: { + artifact: TruffleContract(require('../build/contracts/DAVToken.json')), + instance: null + }, + mission: { + artifact: TruffleContract(require('../build/contracts/BasicMission.json')), + instance: null + } + }; + + this.getInstance = function(contract) { + return new Promise (function (resolve, reject) { + if(contracts[contract].instance) { + resolve(contracts[contract].instance); + } else { + contracts[contract].artifact.setProvider(web3.currentProvider); + contracts[contract].artifact.deployed() + .then(function (instance) { + contracts[contract].instance = instance; + resolve(contracts[contract].instance); + }).catch(function(err) { + reject(err); + }); + } + }); + }; +}; + +let davJS = function(davId, wallet) { + this.davId = davId; + this.wallet = wallet; + this.davContracts = new DavContracts(); + + this.isRegistered = function () { + let dav = this; + return this.davContracts.getInstance('identity') + .then(function (instance) { + return instance.isRegistered.call(dav.davId, { from: dav.wallet }); + }); + }; + + this.registerSimple = function () { + let dav = this; + if (process.env.NODE_ENV === 'development' && BLOCKCHAIN_TYPE === 'NONE') { + return Promise.resolve({}); + } + + return new Promise(function (resolve, reject) { + return dav.davContracts.getInstance('identity') + .then(function (identityContractInstance) { + return identityContractInstance + .registerSimple({ from: dav.wallet }) + .then(function (res) { + console.log(res); + resolve(true); + }) + .catch(function (err) { + reject(err); + }); + + }).catch(function (err) { + reject(err); + }); + }); + }; + + this.createMissionTransaction = function (vehicleId, missionCost) { + let dav = this; + if (process.env.NODE_ENV === 'development' && BLOCKCHAIN_TYPE === 'NONE') { + return Promise.resolve(true); + } + + var tokenContractInstance; + var missionContractInstance; + return dav.davContracts.getInstance('token') + .then(function (instance) { + tokenContractInstance = instance; + return dav.davContracts.getInstance('mission') + .then((instance) => { + missionContractInstance = instance; + return tokenContractInstance.approve(missionContractInstance.address, missionCost, { from: dav.wallet }); + }) + .then(() => { + return missionContractInstance.create(vehicleId, dav.davId, missionCost, { from: dav.wallet }); + }); + }); + }; +}; + export const initWeb3 = () => { if(process.env.BLOCKCHAIN_TYPE === 'NONE') { store.dispatch(registerDavIdFulfilled()); @@ -49,7 +162,7 @@ export const isRegistered = (davId) => { }); }; -export const registeredDavId = () => { +export const registerDavId = () => { davSDK.registerSimple().then((isRegistered) => { if(isRegistered === true) { store.dispatch(registerDavIdFulfilled()); @@ -58,3 +171,19 @@ export const registeredDavId = () => { console.log(err); }); }; + +export const createMissionTransaction = (bidId, vehicle_id, price) => { + if(process.env.BLOCKCHAIN_TYPE === 'NONE') { + store.dispatch(createMissionTransactionFulfilled()); + return Promise.resolve('Blockchain is disabled'); + } + davSDK.createMissionTransaction(vehicle_id, price).then((response) => { + console.log(response); + store.dispatch(createMissionTransactionFulfilled(response)); + store.dispatch(chooseBid(bidId)); + }).catch(err => { + console.log(err); + store.dispatch(createMissionTransactionFailed(err)); + }); +}; + diff --git a/src/reducers/order.js b/src/reducers/order.js index 470f808..08ee898 100644 --- a/src/reducers/order.js +++ b/src/reducers/order.js @@ -1,12 +1,15 @@ import {handleActions} from 'redux-actions'; import { updateOrderDetails, createNeedFulfilled, updateStatusFulfilled, - resetOrderDetails, chooseBidPending, updateBidsFulfilled + resetOrderDetails, chooseBidPending, updateBidsFulfilled, + unlockWallet, unregisteredDavId, registerDavIdFulfilled, closeWalletDialog } from '../actions'; import getConfig from '../config'; const defaultState = { stage: 'draft', // draft | searching | choosing | signing | in_mission + registration_step: 'none', // none | unlock_wallet | register_id | register_fulfilled | registered + fetching: false, pickup: undefined, dropoff: undefined, pickup_at: undefined, @@ -16,6 +19,18 @@ const defaultState = { export default handleActions({ + [unlockWallet]: (state) => { + return {...state, registration_step: 'unlock_wallet', fetching: false}; + }, + [unregisteredDavId]: (state) => { + return {...state, registration_step: 'register_id', fetching: false}; + }, + [registerDavIdFulfilled]: (state) => { + return {...state, registration_step: 'register_fulfilled', fetching: false}; + }, + [closeWalletDialog]: (state) => { + return {...state, registration_step: 'none'}; + }, [updateOrderDetails]: (state, {payload}) => { return {...state, ...payload}; }, diff --git a/src/reducers/settings.js b/src/reducers/settings.js index cea2fae..2198f93 100644 --- a/src/reducers/settings.js +++ b/src/reducers/settings.js @@ -1,4 +1,6 @@ import { randomDavAddress } from '../lib/utils'; +import { handleActions } from 'redux-actions'; +import { updateDavId } from '../actions'; const defaultState = { welcome_seen: false, // Has user finished/skipped/closed on-boarding process? @@ -6,9 +8,10 @@ const defaultState = { user_icon: '/images/noam.jpg', }; -export default (state = defaultState, action) => { - switch (action.type) { - default: - return state; - } -}; +export default handleActions({ + + [updateDavId]: (state, {payload: { davId }}) => { + return {...state, user_id: davId}; + }, + +}, defaultState); diff --git a/webpack.dev.js b/webpack.dev.js index 6fd7b96..6876575 100644 --- a/webpack.dev.js +++ b/webpack.dev.js @@ -30,7 +30,7 @@ module.exports = merge(getCommon(process.env.NODE_ENV), { new webpack.DefinePlugin({ 'process.env': { NODE_ENV: JSON.stringify(process.env.NODE_ENV), - MISSION_CONTROL_HOST: JSON.stringify('http://localhost:8888'), + MISSION_CONTROL_URL: JSON.stringify('http://localhost:8888'), }, }), ], diff --git a/webpack.prod.js b/webpack.prod.js index 90a3baf..103fddd 100644 --- a/webpack.prod.js +++ b/webpack.prod.js @@ -17,7 +17,7 @@ module.exports = merge(getCommon(process.env.NODE_ENV), { new webpack.DefinePlugin({ 'process.env': { NODE_ENV: JSON.stringify(process.env.NODE_ENV), - MISSION_CONTROL_HOST: JSON.stringify('https://ctrl.missions.io'), + MISSION_CONTROL_URL: JSON.stringify('https://ctrl.missions.io'), }, }), new HtmlWebpackPlugin({ diff --git a/webpack.stg.js b/webpack.stg.js index 01474b0..3bb449f 100644 --- a/webpack.stg.js +++ b/webpack.stg.js @@ -17,7 +17,7 @@ module.exports = merge(getCommon(process.env.NODE_ENV), { new webpack.DefinePlugin({ 'process.env': { NODE_ENV: JSON.stringify(process.env.NODE_ENV), - MISSION_CONTROL_HOST: JSON.stringify('http://missioncontrol-stg.us-east-1.elasticbeanstalk.com'), + MISSION_CONTROL_URL: JSON.stringify('http://missioncontrol-stg.us-east-1.elasticbeanstalk.com'), }, }), new HtmlWebpackPlugin({ From 8eff6b8b4c7a88c54e249e69db0355052b6f391f Mon Sep 17 00:00:00 2001 From: srfrnk Date: Wed, 28 Mar 2018 17:09:27 +0300 Subject: [PATCH 033/180] feat: new mkfile trg - link to contracts --- Makefile | 4 + src/build | 1 + src/build/contracts/BasicMission.json | 4172 ------------------------- src/build/contracts/DAVToken.json | 3863 ----------------------- src/build/contracts/Identity.json | 4106 ------------------------ 5 files changed, 5 insertions(+), 12141 deletions(-) create mode 120000 src/build delete mode 100644 src/build/contracts/BasicMission.json delete mode 100644 src/build/contracts/DAVToken.json delete mode 100644 src/build/contracts/Identity.json diff --git a/Makefile b/Makefile index f549184..5c4dfcb 100644 --- a/Makefile +++ b/Makefile @@ -24,3 +24,7 @@ create-aws-stg-env: deploy-aws-stg-env: build-stg @aws s3 cp --recursive --acl public-read dist/ ${STG_BUCKET} + +link-contracts: + -rm -rf ./src/build + -ln -s ../../contracts/build ./src diff --git a/src/build b/src/build new file mode 120000 index 0000000..5f6bfeb --- /dev/null +++ b/src/build @@ -0,0 +1 @@ +../../contracts/build \ No newline at end of file diff --git a/src/build/contracts/BasicMission.json b/src/build/contracts/BasicMission.json deleted file mode 100644 index e2751b1..0000000 --- a/src/build/contracts/BasicMission.json +++ /dev/null @@ -1,4172 +0,0 @@ -{ - "contractName": "BasicMission", - "abi": [ - { - "inputs": [ - { - "name": "_identityContract", - "type": "address" - }, - { - "name": "_davTokenContract", - "type": "address" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "name": "id", - "type": "bytes32" - }, - { - "indexed": false, - "name": "sellerId", - "type": "address" - }, - { - "indexed": false, - "name": "buyerId", - "type": "address" - } - ], - "name": "Create", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "name": "id", - "type": "bytes32" - } - ], - "name": "Signed", - "type": "event" - }, - { - "constant": false, - "inputs": [ - { - "name": "_sellerId", - "type": "address" - }, - { - "name": "_buyerId", - "type": "address" - }, - { - "name": "_cost", - "type": "uint256" - } - ], - "name": "create", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_missionId", - "type": "bytes32" - }, - { - "name": "_buyerId", - "type": "address" - } - ], - "name": "fulfilled", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x6060604052341561000f57600080fd5b6040516040806109708339810160405280805190602001909190805190602001909190505081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050506108a9806100c76000396000f30060606040526004361061004c576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806389198fed14610051578063ffe5725f14610097575b600080fd5b341561005c57600080fd5b61009560048080356000191690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506100f8565b005b34156100a257600080fd5b6100f6600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610290565b005b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630795736082336000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b15156101f157600080fd5b6102c65a03f1151561020257600080fd5b50505060405180519050151561021757600080fd5b6001806000846000191660001916815260200190815260200160002060040160006101000a81548160ff0219169083151502179055507f2563bf12e759147ae41a036dffeece03c4db05da3b738a30dd100821f498c57c8260405180826000191660001916815260200191505060405180910390a15050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630795736084336000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b151561038b57600080fd5b6102c65a03f1151561039c57600080fd5b5050506040518051905015156103b157600080fd5b81600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f8b2cb4f856000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b151561047757600080fd5b6102c65a03f1151561048857600080fd5b505050604051805190501015151561049f57600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15156105a057600080fd5b6102c65a03f115156105b157600080fd5b50505060405180519050504384846000808154809291906001019190505560405180807f42617369634d697373696f6e0000000000000000000000000000000000000000815250600c018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018281526020019450505050506040518091039020905060a0604051908101604052808573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018381526020016000151581525060016000836000191660001916815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604082015181600201556060820151816003015560808201518160040160006101000a81548160ff0219169083151502179055509050507f0d87513b68afc9f4f16272206a73bfde370c86b8e9dadd0e4ab99f763b1d61168185856040518084600019166000191681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405180910390a1505050505600a165627a7a72305820b1d27e8176e9927c6ed77d7273e70a623d44f2eab2732beb08627eb546719fe50029", - "deployedBytecode": "0x60606040526004361061004c576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806389198fed14610051578063ffe5725f14610097575b600080fd5b341561005c57600080fd5b61009560048080356000191690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506100f8565b005b34156100a257600080fd5b6100f6600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610290565b005b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630795736082336000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b15156101f157600080fd5b6102c65a03f1151561020257600080fd5b50505060405180519050151561021757600080fd5b6001806000846000191660001916815260200190815260200160002060040160006101000a81548160ff0219169083151502179055507f2563bf12e759147ae41a036dffeece03c4db05da3b738a30dd100821f498c57c8260405180826000191660001916815260200191505060405180910390a15050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630795736084336000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b151561038b57600080fd5b6102c65a03f1151561039c57600080fd5b5050506040518051905015156103b157600080fd5b81600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f8b2cb4f856000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b151561047757600080fd5b6102c65a03f1151561048857600080fd5b505050604051805190501015151561049f57600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15156105a057600080fd5b6102c65a03f115156105b157600080fd5b50505060405180519050504384846000808154809291906001019190505560405180807f42617369634d697373696f6e0000000000000000000000000000000000000000815250600c018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018281526020019450505050506040518091039020905060a0604051908101604052808573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018381526020016000151581525060016000836000191660001916815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604082015181600201556060820151816003015560808201518160040160006101000a81548160ff0219169083151502179055509050507f0d87513b68afc9f4f16272206a73bfde370c86b8e9dadd0e4ab99f763b1d61168185856040518084600019166000191681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405180910390a1505050505600a165627a7a72305820b1d27e8176e9927c6ed77d7273e70a623d44f2eab2732beb08627eb546719fe50029", - "sourceMap": "412:2348:0:-;;;1008:155;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1110:17;1099:8;;:28;;;;;;;;;;;;;;;;;;1141:17;1133:5;;:25;;;;;;;;;;;;;;;;;;1008:155;;412:2348;;;;;;", - "deployedSourceMap": "412:2348:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2377:380;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1424:795;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2377:380;2525:8;;;;;;;;;;;:24;;;2550:8;2560:10;2525:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2510:67;;;;;;;;2651:4;2619:8;:20;2628:10;2619:20;;;;;;;;;;;;;;;;;:29;;;:36;;;;;;;;;;;;;;;;;;2734:18;2741:10;2734:18;;;;;;;;;;;;;;;;;;;;;;;;2377:380;;:::o;1424:795::-;1870:17;1582:8;;;;;;;;;;;:24;;;1607:8;1617:10;1582:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1567:67;;;;;;;;1733:5;1700:8;;;;;;;;;;;:19;;;1720:8;1700:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:38;;1685:59;;;;;;;;1798:5;;;;;;;;;;;:18;;;1817:10;1829:4;1835:5;1798:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1916:12;1930:9;1941:8;1951:5;;:7;;;;;;;;;;;;1890:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1870:89;;1987:169;;;;;;;;;2011:9;1987:169;;;;;;2035:8;1987:169;;;;;;2057:5;1987:169;;;;2079:5;1987:169;;;;2102:5;1987:169;;;;;1965:8;:19;1974:9;1965:19;;;;;;;;;;;;;;;;;:191;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2176:38;2183:9;2194;2205:8;2176:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1424:795;;;;:::o", - "source": "pragma solidity ^0.4.15;\n\nimport './Identity.sol';\nimport './DAVToken.sol';\n\n\n/**\n * @title BasicMission\n * @dev The most basic contract for conducting Missions.\n *\n * This contract represents the very basic interface of a mission contract.\n * In the real world, there is very little reason to use this and not one of the\n * contracts that extend it. Consider this an interface, more than an implementation.\n */\ncontract BasicMission {\n\n uint256 private nonce;\n\n struct Mission {\n address seller;\n address buyer;\n uint256 cost;\n uint256 balance;\n bool isSigned;\n mapping (uint8 => bool) resolvers;\n }\n\n mapping (bytes32 => Mission) private missions;\n\n event Create(\n bytes32 id,\n address sellerId,\n address buyerId\n );\n\n event Signed(\n bytes32 id\n );\n\n DAVToken private token;\n Identity private identity;\n\n /**\n * @dev Constructor\n *\n * @param _identityContract address of the Identity contract\n * @param _davTokenContract address of the DAVToken contract\n */\n function BasicMission(Identity _identityContract, DAVToken _davTokenContract) public {\n identity = _identityContract;\n token = _davTokenContract;\n }\n\n /**\n * @notice Create a new mission\n * @param _sellerId The DAV Identity of the person providing the service\n * @param _buyerId The DAV Identity of the person ordering the service\n * @param _cost The total cost of the mission to be paid by buyer\n */\n function create(address _sellerId, address _buyerId, uint256 _cost) public {\n // Verify that message sender controls the buyer's wallet\n require(\n identity.verifyOwnership(_buyerId, msg.sender)\n );\n\n // Verify buyer's balance is sufficient\n require(\n identity.getBalance(_buyerId) >= _cost\n );\n\n // Transfer tokens to the mission contract\n token.transferFrom(msg.sender, this, _cost);\n\n // Create mission\n bytes32 missionId = keccak256('BasicMission', block.number, _sellerId, _buyerId, nonce++);\n missions[missionId] = Mission({\n seller: _sellerId,\n buyer: _buyerId,\n cost: _cost,\n balance: _cost,\n isSigned: false // TODO: Maybe use to approve fulfillment\n });\n\n // Event\n Create(missionId, _sellerId, _buyerId);\n }\n\n /**\n * @notice Fund a mission\n * @param _missionId The id of the mission\n * @param _buyerId The DAV Identity of the person ordering the service\n */\n function fulfilled(bytes32 _missionId, address _buyerId) public {\n // Verify that message sender controls the seller's wallet\n require(\n identity.verifyOwnership(_buyerId, msg.sender)\n );\n\n // designate mission as signed\n missions[_missionId].isSigned = true;\n // TODO: trunsfer funds from mission balance to seller\n\n // Event\n Signed(_missionId);\n }\n\n}\n", - "sourcePath": "/Users/anatolyt/projects/dav/contracts/contracts/BasicMission.sol", - "ast": { - "absolutePath": "/Users/anatolyt/projects/dav/contracts/contracts/BasicMission.sol", - "exportedSymbols": { - "BasicMission": [ - 152 - ] - }, - "id": 153, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 1, - "literals": [ - "solidity", - "^", - "0.4", - ".15" - ], - "nodeType": "PragmaDirective", - "src": "0:24:0" - }, - { - "absolutePath": "/Users/anatolyt/projects/dav/contracts/contracts/Identity.sol", - "file": "./Identity.sol", - "id": 2, - "nodeType": "ImportDirective", - "scope": 153, - "sourceUnit": 440, - "src": "26:24:0", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "/Users/anatolyt/projects/dav/contracts/contracts/DAVToken.sol", - "file": "./DAVToken.sol", - "id": 3, - "nodeType": "ImportDirective", - "scope": 153, - "sourceUnit": 289, - "src": "51:24:0", - "symbolAliases": [], - "unitAlias": "" - }, - { - "baseContracts": [], - "contractDependencies": [], - "contractKind": "contract", - "documentation": "@title BasicMission\n@dev The most basic contract for conducting Missions.\n * This contract represents the very basic interface of a mission contract.\nIn the real world, there is very little reason to use this and not one of the\ncontracts that extend it. Consider this an interface, more than an implementation.", - "fullyImplemented": true, - "id": 152, - "linearizedBaseContracts": [ - 152 - ], - "name": "BasicMission", - "nodeType": "ContractDefinition", - "nodes": [ - { - "constant": false, - "id": 5, - "name": "nonce", - "nodeType": "VariableDeclaration", - "scope": 152, - "src": "439:21:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "439:7:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "private" - }, - { - "canonicalName": "BasicMission.Mission", - "id": 20, - "members": [ - { - "constant": false, - "id": 7, - "name": "seller", - "nodeType": "VariableDeclaration", - "scope": 20, - "src": "486:14:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 6, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "486:7:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 9, - "name": "buyer", - "nodeType": "VariableDeclaration", - "scope": 20, - "src": "506:13:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 8, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "506:7:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 11, - "name": "cost", - "nodeType": "VariableDeclaration", - "scope": 20, - "src": "525:12:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 10, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "525:7:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 13, - "name": "balance", - "nodeType": "VariableDeclaration", - "scope": 20, - "src": "543:15:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "543:7:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 15, - "name": "isSigned", - "nodeType": "VariableDeclaration", - "scope": 20, - "src": "564:13:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 14, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "564:4:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 19, - "name": "resolvers", - "nodeType": "VariableDeclaration", - "scope": 20, - "src": "583:33:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint8_$_t_bool_$", - "typeString": "mapping(uint8 => bool)" - }, - "typeName": { - "id": 18, - "keyType": { - "id": 16, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "592:5:0", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "Mapping", - "src": "583:23:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint8_$_t_bool_$", - "typeString": "mapping(uint8 => bool)" - }, - "valueType": { - "id": 17, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "601:4:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - }, - "value": null, - "visibility": "internal" - } - ], - "name": "Mission", - "nodeType": "StructDefinition", - "scope": 152, - "src": "465:156:0", - "visibility": "public" - }, - { - "constant": false, - "id": 24, - "name": "missions", - "nodeType": "VariableDeclaration", - "scope": 152, - "src": "625:45:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Mission_$20_storage_$", - "typeString": "mapping(bytes32 => struct BasicMission.Mission storage ref)" - }, - "typeName": { - "id": 23, - "keyType": { - "id": 21, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "634:7:0", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "Mapping", - "src": "625:28:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Mission_$20_storage_$", - "typeString": "mapping(bytes32 => struct BasicMission.Mission storage ref)" - }, - "valueType": { - "contractScope": null, - "id": 22, - "name": "Mission", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 20, - "src": "645:7:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Mission_$20_storage_ptr", - "typeString": "struct BasicMission.Mission storage pointer" - } - } - }, - "value": null, - "visibility": "private" - }, - { - "anonymous": false, - "id": 32, - "name": "Create", - "nodeType": "EventDefinition", - "parameters": { - "id": 31, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 26, - "indexed": false, - "name": "id", - "nodeType": "VariableDeclaration", - "scope": 32, - "src": "693:10:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 25, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "693:7:0", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 28, - "indexed": false, - "name": "sellerId", - "nodeType": "VariableDeclaration", - "scope": 32, - "src": "709:16:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 27, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "709:7:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 30, - "indexed": false, - "name": "buyerId", - "nodeType": "VariableDeclaration", - "scope": 32, - "src": "731:15:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 29, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "731:7:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "687:63:0" - }, - "src": "675:76:0" - }, - { - "anonymous": false, - "id": 36, - "name": "Signed", - "nodeType": "EventDefinition", - "parameters": { - "id": 35, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 34, - "indexed": false, - "name": "id", - "nodeType": "VariableDeclaration", - "scope": 36, - "src": "773:10:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 33, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "773:7:0", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "767:20:0" - }, - "src": "755:33:0" - }, - { - "constant": false, - "id": 38, - "name": "token", - "nodeType": "VariableDeclaration", - "scope": 152, - "src": "792:22:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DAVToken_$288", - "typeString": "contract DAVToken" - }, - "typeName": { - "contractScope": null, - "id": 37, - "name": "DAVToken", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 288, - "src": "792:8:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DAVToken_$288", - "typeString": "contract DAVToken" - } - }, - "value": null, - "visibility": "private" - }, - { - "constant": false, - "id": 40, - "name": "identity", - "nodeType": "VariableDeclaration", - "scope": 152, - "src": "818:25:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_Identity_$439", - "typeString": "contract Identity" - }, - "typeName": { - "contractScope": null, - "id": 39, - "name": "Identity", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 439, - "src": "818:8:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_Identity_$439", - "typeString": "contract Identity" - } - }, - "value": null, - "visibility": "private" - }, - { - "body": { - "id": 55, - "nodeType": "Block", - "src": "1093:70:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 49, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 47, - "name": "identity", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 40, - "src": "1099:8:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_Identity_$439", - "typeString": "contract Identity" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 48, - "name": "_identityContract", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 42, - "src": "1110:17:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_Identity_$439", - "typeString": "contract Identity" - } - }, - "src": "1099:28:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_Identity_$439", - "typeString": "contract Identity" - } - }, - "id": 50, - "nodeType": "ExpressionStatement", - "src": "1099:28:0" - }, - { - "expression": { - "argumentTypes": null, - "id": 53, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 51, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 38, - "src": "1133:5:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DAVToken_$288", - "typeString": "contract DAVToken" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 52, - "name": "_davTokenContract", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 44, - "src": "1141:17:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DAVToken_$288", - "typeString": "contract DAVToken" - } - }, - "src": "1133:25:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DAVToken_$288", - "typeString": "contract DAVToken" - } - }, - "id": 54, - "nodeType": "ExpressionStatement", - "src": "1133:25:0" - } - ] - }, - "id": 56, - "implemented": true, - "isConstructor": true, - "isDeclaredConst": false, - "modifiers": [], - "name": "BasicMission", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 45, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 42, - "name": "_identityContract", - "nodeType": "VariableDeclaration", - "scope": 56, - "src": "1030:26:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_Identity_$439", - "typeString": "contract Identity" - }, - "typeName": { - "contractScope": null, - "id": 41, - "name": "Identity", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 439, - "src": "1030:8:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_Identity_$439", - "typeString": "contract Identity" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 44, - "name": "_davTokenContract", - "nodeType": "VariableDeclaration", - "scope": 56, - "src": "1058:26:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DAVToken_$288", - "typeString": "contract DAVToken" - }, - "typeName": { - "contractScope": null, - "id": 43, - "name": "DAVToken", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 288, - "src": "1058:8:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DAVToken_$288", - "typeString": "contract DAVToken" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1029:56:0" - }, - "payable": false, - "returnParameters": { - "id": 46, - "nodeType": "ParameterList", - "parameters": [], - "src": "1093:0:0" - }, - "scope": 152, - "src": "1008:155:0", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 122, - "nodeType": "Block", - "src": "1499:720:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 68, - "name": "_buyerId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60, - "src": "1607:8:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 69, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1161, - "src": "1617:3:0", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 70, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1617:10:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 66, - "name": "identity", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 40, - "src": "1582:8:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_Identity_$439", - "typeString": "contract Identity" - } - }, - "id": 67, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "verifyOwnership", - "nodeType": "MemberAccess", - "referencedDeclaration": 423, - "src": "1582:24:0", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_bool_$", - "typeString": "function (address,address) view external returns (bool)" - } - }, - "id": 71, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1582:46:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 65, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1164, - "src": "1567:7:0", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 72, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1567:67:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 73, - "nodeType": "ExpressionStatement", - "src": "1567:67:0" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 80, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 77, - "name": "_buyerId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60, - "src": "1720:8:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 75, - "name": "identity", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 40, - "src": "1700:8:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_Identity_$439", - "typeString": "contract Identity" - } - }, - "id": 76, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "getBalance", - "nodeType": "MemberAccess", - "referencedDeclaration": 406, - "src": "1700:19:0", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", - "typeString": "function (address) view external returns (uint256)" - } - }, - "id": 78, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1700:29:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">=", - "rightExpression": { - "argumentTypes": null, - "id": 79, - "name": "_cost", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 62, - "src": "1733:5:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1700:38:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 74, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1164, - "src": "1685:7:0", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 81, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1685:59:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 82, - "nodeType": "ExpressionStatement", - "src": "1685:59:0" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 86, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1161, - "src": "1817:3:0", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 87, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1817:10:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 88, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1190, - "src": "1829:4:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_BasicMission_$152", - "typeString": "contract BasicMission" - } - }, - { - "argumentTypes": null, - "id": 89, - "name": "_cost", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 62, - "src": "1835:5:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_contract$_BasicMission_$152", - "typeString": "contract BasicMission" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 83, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 38, - "src": "1798:5:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DAVToken_$288", - "typeString": "contract DAVToken" - } - }, - "id": 85, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "transferFrom", - "nodeType": "MemberAccess", - "referencedDeclaration": 233, - "src": "1798:18:0", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$", - "typeString": "function (address,address,uint256) external returns (bool)" - } - }, - "id": 90, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1798:43:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 91, - "nodeType": "ExpressionStatement", - "src": "1798:43:0" - }, - { - "assignments": [ - 93 - ], - "declarations": [ - { - "constant": false, - "id": 93, - "name": "missionId", - "nodeType": "VariableDeclaration", - "scope": 123, - "src": "1870:17:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 92, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "1870:7:0", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 103, - "initialValue": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "42617369634d697373696f6e", - "id": 95, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1900:14:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_6f28747ca3bf61320646bbe8fce0609ed0cb6ef483ba3b71713bc1d9ed5bd450", - "typeString": "literal_string \"BasicMission\"" - }, - "value": "BasicMission" - }, - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 96, - "name": "block", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1153, - "src": "1916:5:0", - "typeDescriptions": { - "typeIdentifier": "t_magic_block", - "typeString": "block" - } - }, - "id": 97, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "number", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1916:12:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "id": 98, - "name": "_sellerId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 58, - "src": "1930:9:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 99, - "name": "_buyerId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60, - "src": "1941:8:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 101, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": false, - "src": "1951:7:0", - "subExpression": { - "argumentTypes": null, - "id": 100, - "name": "nonce", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5, - "src": "1951:5:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_stringliteral_6f28747ca3bf61320646bbe8fce0609ed0cb6ef483ba3b71713bc1d9ed5bd450", - "typeString": "literal_string \"BasicMission\"" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 94, - "name": "keccak256", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1155, - "src": "1890:9:0", - "typeDescriptions": { - "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$", - "typeString": "function () pure returns (bytes32)" - } - }, - "id": 102, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1890:69:0", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "1870:89:0" - }, - { - "expression": { - "argumentTypes": null, - "id": 114, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 104, - "name": "missions", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 24, - "src": "1965:8:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Mission_$20_storage_$", - "typeString": "mapping(bytes32 => struct BasicMission.Mission storage ref)" - } - }, - "id": 106, - "indexExpression": { - "argumentTypes": null, - "id": 105, - "name": "missionId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 93, - "src": "1974:9:0", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "1965:19:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Mission_$20_storage", - "typeString": "struct BasicMission.Mission storage ref" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 108, - "name": "_sellerId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 58, - "src": "2011:9:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 109, - "name": "_buyerId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60, - "src": "2035:8:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 110, - "name": "_cost", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 62, - "src": "2057:5:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "id": 111, - "name": "_cost", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 62, - "src": "2079:5:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "hexValue": "66616c7365", - "id": 112, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2102:5:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - } - ], - "expression": { - "argumentTypes": null, - "id": 107, - "name": "Mission", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20, - "src": "1987:7:0", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_struct$_Mission_$20_storage_ptr_$", - "typeString": "type(struct BasicMission.Mission storage pointer)" - } - }, - "id": 113, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "structConstructorCall", - "lValueRequested": false, - "names": [ - "seller", - "buyer", - "cost", - "balance", - "isSigned" - ], - "nodeType": "FunctionCall", - "src": "1987:169:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Mission_$20_memory", - "typeString": "struct BasicMission.Mission memory" - } - }, - "src": "1965:191:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Mission_$20_storage", - "typeString": "struct BasicMission.Mission storage ref" - } - }, - "id": 115, - "nodeType": "ExpressionStatement", - "src": "1965:191:0" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 117, - "name": "missionId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 93, - "src": "2183:9:0", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "argumentTypes": null, - "id": 118, - "name": "_sellerId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 58, - "src": "2194:9:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 119, - "name": "_buyerId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60, - "src": "2205:8:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 116, - "name": "Create", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 32, - "src": "2176:6:0", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_address_$returns$__$", - "typeString": "function (bytes32,address,address)" - } - }, - "id": 120, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2176:38:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 121, - "nodeType": "ExpressionStatement", - "src": "2176:38:0" - } - ] - }, - "id": 123, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "create", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 63, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 58, - "name": "_sellerId", - "nodeType": "VariableDeclaration", - "scope": 123, - "src": "1440:17:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 57, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1440:7:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 60, - "name": "_buyerId", - "nodeType": "VariableDeclaration", - "scope": 123, - "src": "1459:16:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 59, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1459:7:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 62, - "name": "_cost", - "nodeType": "VariableDeclaration", - "scope": 123, - "src": "1477:13:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 61, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1477:7:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1439:52:0" - }, - "payable": false, - "returnParameters": { - "id": 64, - "nodeType": "ParameterList", - "parameters": [], - "src": "1499:0:0" - }, - "scope": 152, - "src": "1424:795:0", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 150, - "nodeType": "Block", - "src": "2441:316:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 133, - "name": "_buyerId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 127, - "src": "2550:8:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 134, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1161, - "src": "2560:3:0", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 135, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "2560:10:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 131, - "name": "identity", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 40, - "src": "2525:8:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_Identity_$439", - "typeString": "contract Identity" - } - }, - "id": 132, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "verifyOwnership", - "nodeType": "MemberAccess", - "referencedDeclaration": 423, - "src": "2525:24:0", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_bool_$", - "typeString": "function (address,address) view external returns (bool)" - } - }, - "id": 136, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2525:46:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 130, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1164, - "src": "2510:7:0", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 137, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2510:67:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 138, - "nodeType": "ExpressionStatement", - "src": "2510:67:0" - }, - { - "expression": { - "argumentTypes": null, - "id": 144, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 139, - "name": "missions", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 24, - "src": "2619:8:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Mission_$20_storage_$", - "typeString": "mapping(bytes32 => struct BasicMission.Mission storage ref)" - } - }, - "id": 141, - "indexExpression": { - "argumentTypes": null, - "id": 140, - "name": "_missionId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 125, - "src": "2628:10:0", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "2619:20:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Mission_$20_storage", - "typeString": "struct BasicMission.Mission storage ref" - } - }, - "id": 142, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberName": "isSigned", - "nodeType": "MemberAccess", - "referencedDeclaration": 15, - "src": "2619:29:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "74727565", - "id": 143, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2651:4:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "src": "2619:36:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 145, - "nodeType": "ExpressionStatement", - "src": "2619:36:0" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 147, - "name": "_missionId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 125, - "src": "2741:10:0", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 146, - "name": "Signed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 36, - "src": "2734:6:0", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$returns$__$", - "typeString": "function (bytes32)" - } - }, - "id": 148, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2734:18:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 149, - "nodeType": "ExpressionStatement", - "src": "2734:18:0" - } - ] - }, - "id": 151, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "fulfilled", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 128, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 125, - "name": "_missionId", - "nodeType": "VariableDeclaration", - "scope": 151, - "src": "2396:18:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 124, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "2396:7:0", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 127, - "name": "_buyerId", - "nodeType": "VariableDeclaration", - "scope": 151, - "src": "2416:16:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 126, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2416:7:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "2395:38:0" - }, - "payable": false, - "returnParameters": { - "id": 129, - "nodeType": "ParameterList", - "parameters": [], - "src": "2441:0:0" - }, - "scope": 152, - "src": "2377:380:0", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - } - ], - "scope": 153, - "src": "412:2348:0" - } - ], - "src": "0:2761:0" - }, - "legacyAST": { - "absolutePath": "/Users/anatolyt/projects/dav/contracts/contracts/BasicMission.sol", - "exportedSymbols": { - "BasicMission": [ - 152 - ] - }, - "id": 153, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 1, - "literals": [ - "solidity", - "^", - "0.4", - ".15" - ], - "nodeType": "PragmaDirective", - "src": "0:24:0" - }, - { - "absolutePath": "/Users/anatolyt/projects/dav/contracts/contracts/Identity.sol", - "file": "./Identity.sol", - "id": 2, - "nodeType": "ImportDirective", - "scope": 153, - "sourceUnit": 440, - "src": "26:24:0", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "/Users/anatolyt/projects/dav/contracts/contracts/DAVToken.sol", - "file": "./DAVToken.sol", - "id": 3, - "nodeType": "ImportDirective", - "scope": 153, - "sourceUnit": 289, - "src": "51:24:0", - "symbolAliases": [], - "unitAlias": "" - }, - { - "baseContracts": [], - "contractDependencies": [], - "contractKind": "contract", - "documentation": "@title BasicMission\n@dev The most basic contract for conducting Missions.\n * This contract represents the very basic interface of a mission contract.\nIn the real world, there is very little reason to use this and not one of the\ncontracts that extend it. Consider this an interface, more than an implementation.", - "fullyImplemented": true, - "id": 152, - "linearizedBaseContracts": [ - 152 - ], - "name": "BasicMission", - "nodeType": "ContractDefinition", - "nodes": [ - { - "constant": false, - "id": 5, - "name": "nonce", - "nodeType": "VariableDeclaration", - "scope": 152, - "src": "439:21:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "439:7:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "private" - }, - { - "canonicalName": "BasicMission.Mission", - "id": 20, - "members": [ - { - "constant": false, - "id": 7, - "name": "seller", - "nodeType": "VariableDeclaration", - "scope": 20, - "src": "486:14:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 6, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "486:7:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 9, - "name": "buyer", - "nodeType": "VariableDeclaration", - "scope": 20, - "src": "506:13:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 8, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "506:7:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 11, - "name": "cost", - "nodeType": "VariableDeclaration", - "scope": 20, - "src": "525:12:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 10, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "525:7:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 13, - "name": "balance", - "nodeType": "VariableDeclaration", - "scope": 20, - "src": "543:15:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "543:7:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 15, - "name": "isSigned", - "nodeType": "VariableDeclaration", - "scope": 20, - "src": "564:13:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 14, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "564:4:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 19, - "name": "resolvers", - "nodeType": "VariableDeclaration", - "scope": 20, - "src": "583:33:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint8_$_t_bool_$", - "typeString": "mapping(uint8 => bool)" - }, - "typeName": { - "id": 18, - "keyType": { - "id": 16, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "592:5:0", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "Mapping", - "src": "583:23:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint8_$_t_bool_$", - "typeString": "mapping(uint8 => bool)" - }, - "valueType": { - "id": 17, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "601:4:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - }, - "value": null, - "visibility": "internal" - } - ], - "name": "Mission", - "nodeType": "StructDefinition", - "scope": 152, - "src": "465:156:0", - "visibility": "public" - }, - { - "constant": false, - "id": 24, - "name": "missions", - "nodeType": "VariableDeclaration", - "scope": 152, - "src": "625:45:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Mission_$20_storage_$", - "typeString": "mapping(bytes32 => struct BasicMission.Mission storage ref)" - }, - "typeName": { - "id": 23, - "keyType": { - "id": 21, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "634:7:0", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "Mapping", - "src": "625:28:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Mission_$20_storage_$", - "typeString": "mapping(bytes32 => struct BasicMission.Mission storage ref)" - }, - "valueType": { - "contractScope": null, - "id": 22, - "name": "Mission", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 20, - "src": "645:7:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Mission_$20_storage_ptr", - "typeString": "struct BasicMission.Mission storage pointer" - } - } - }, - "value": null, - "visibility": "private" - }, - { - "anonymous": false, - "id": 32, - "name": "Create", - "nodeType": "EventDefinition", - "parameters": { - "id": 31, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 26, - "indexed": false, - "name": "id", - "nodeType": "VariableDeclaration", - "scope": 32, - "src": "693:10:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 25, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "693:7:0", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 28, - "indexed": false, - "name": "sellerId", - "nodeType": "VariableDeclaration", - "scope": 32, - "src": "709:16:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 27, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "709:7:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 30, - "indexed": false, - "name": "buyerId", - "nodeType": "VariableDeclaration", - "scope": 32, - "src": "731:15:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 29, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "731:7:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "687:63:0" - }, - "src": "675:76:0" - }, - { - "anonymous": false, - "id": 36, - "name": "Signed", - "nodeType": "EventDefinition", - "parameters": { - "id": 35, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 34, - "indexed": false, - "name": "id", - "nodeType": "VariableDeclaration", - "scope": 36, - "src": "773:10:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 33, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "773:7:0", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "767:20:0" - }, - "src": "755:33:0" - }, - { - "constant": false, - "id": 38, - "name": "token", - "nodeType": "VariableDeclaration", - "scope": 152, - "src": "792:22:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DAVToken_$288", - "typeString": "contract DAVToken" - }, - "typeName": { - "contractScope": null, - "id": 37, - "name": "DAVToken", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 288, - "src": "792:8:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DAVToken_$288", - "typeString": "contract DAVToken" - } - }, - "value": null, - "visibility": "private" - }, - { - "constant": false, - "id": 40, - "name": "identity", - "nodeType": "VariableDeclaration", - "scope": 152, - "src": "818:25:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_Identity_$439", - "typeString": "contract Identity" - }, - "typeName": { - "contractScope": null, - "id": 39, - "name": "Identity", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 439, - "src": "818:8:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_Identity_$439", - "typeString": "contract Identity" - } - }, - "value": null, - "visibility": "private" - }, - { - "body": { - "id": 55, - "nodeType": "Block", - "src": "1093:70:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 49, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 47, - "name": "identity", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 40, - "src": "1099:8:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_Identity_$439", - "typeString": "contract Identity" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 48, - "name": "_identityContract", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 42, - "src": "1110:17:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_Identity_$439", - "typeString": "contract Identity" - } - }, - "src": "1099:28:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_Identity_$439", - "typeString": "contract Identity" - } - }, - "id": 50, - "nodeType": "ExpressionStatement", - "src": "1099:28:0" - }, - { - "expression": { - "argumentTypes": null, - "id": 53, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 51, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 38, - "src": "1133:5:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DAVToken_$288", - "typeString": "contract DAVToken" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 52, - "name": "_davTokenContract", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 44, - "src": "1141:17:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DAVToken_$288", - "typeString": "contract DAVToken" - } - }, - "src": "1133:25:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DAVToken_$288", - "typeString": "contract DAVToken" - } - }, - "id": 54, - "nodeType": "ExpressionStatement", - "src": "1133:25:0" - } - ] - }, - "id": 56, - "implemented": true, - "isConstructor": true, - "isDeclaredConst": false, - "modifiers": [], - "name": "BasicMission", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 45, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 42, - "name": "_identityContract", - "nodeType": "VariableDeclaration", - "scope": 56, - "src": "1030:26:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_Identity_$439", - "typeString": "contract Identity" - }, - "typeName": { - "contractScope": null, - "id": 41, - "name": "Identity", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 439, - "src": "1030:8:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_Identity_$439", - "typeString": "contract Identity" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 44, - "name": "_davTokenContract", - "nodeType": "VariableDeclaration", - "scope": 56, - "src": "1058:26:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DAVToken_$288", - "typeString": "contract DAVToken" - }, - "typeName": { - "contractScope": null, - "id": 43, - "name": "DAVToken", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 288, - "src": "1058:8:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DAVToken_$288", - "typeString": "contract DAVToken" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1029:56:0" - }, - "payable": false, - "returnParameters": { - "id": 46, - "nodeType": "ParameterList", - "parameters": [], - "src": "1093:0:0" - }, - "scope": 152, - "src": "1008:155:0", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 122, - "nodeType": "Block", - "src": "1499:720:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 68, - "name": "_buyerId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60, - "src": "1607:8:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 69, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1161, - "src": "1617:3:0", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 70, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1617:10:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 66, - "name": "identity", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 40, - "src": "1582:8:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_Identity_$439", - "typeString": "contract Identity" - } - }, - "id": 67, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "verifyOwnership", - "nodeType": "MemberAccess", - "referencedDeclaration": 423, - "src": "1582:24:0", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_bool_$", - "typeString": "function (address,address) view external returns (bool)" - } - }, - "id": 71, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1582:46:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 65, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1164, - "src": "1567:7:0", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 72, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1567:67:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 73, - "nodeType": "ExpressionStatement", - "src": "1567:67:0" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 80, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 77, - "name": "_buyerId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60, - "src": "1720:8:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 75, - "name": "identity", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 40, - "src": "1700:8:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_Identity_$439", - "typeString": "contract Identity" - } - }, - "id": 76, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "getBalance", - "nodeType": "MemberAccess", - "referencedDeclaration": 406, - "src": "1700:19:0", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", - "typeString": "function (address) view external returns (uint256)" - } - }, - "id": 78, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1700:29:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">=", - "rightExpression": { - "argumentTypes": null, - "id": 79, - "name": "_cost", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 62, - "src": "1733:5:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1700:38:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 74, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1164, - "src": "1685:7:0", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 81, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1685:59:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 82, - "nodeType": "ExpressionStatement", - "src": "1685:59:0" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 86, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1161, - "src": "1817:3:0", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 87, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1817:10:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 88, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1190, - "src": "1829:4:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_BasicMission_$152", - "typeString": "contract BasicMission" - } - }, - { - "argumentTypes": null, - "id": 89, - "name": "_cost", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 62, - "src": "1835:5:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_contract$_BasicMission_$152", - "typeString": "contract BasicMission" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 83, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 38, - "src": "1798:5:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DAVToken_$288", - "typeString": "contract DAVToken" - } - }, - "id": 85, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "transferFrom", - "nodeType": "MemberAccess", - "referencedDeclaration": 233, - "src": "1798:18:0", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$", - "typeString": "function (address,address,uint256) external returns (bool)" - } - }, - "id": 90, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1798:43:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 91, - "nodeType": "ExpressionStatement", - "src": "1798:43:0" - }, - { - "assignments": [ - 93 - ], - "declarations": [ - { - "constant": false, - "id": 93, - "name": "missionId", - "nodeType": "VariableDeclaration", - "scope": 123, - "src": "1870:17:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 92, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "1870:7:0", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 103, - "initialValue": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "42617369634d697373696f6e", - "id": 95, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1900:14:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_6f28747ca3bf61320646bbe8fce0609ed0cb6ef483ba3b71713bc1d9ed5bd450", - "typeString": "literal_string \"BasicMission\"" - }, - "value": "BasicMission" - }, - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 96, - "name": "block", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1153, - "src": "1916:5:0", - "typeDescriptions": { - "typeIdentifier": "t_magic_block", - "typeString": "block" - } - }, - "id": 97, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "number", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1916:12:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "id": 98, - "name": "_sellerId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 58, - "src": "1930:9:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 99, - "name": "_buyerId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60, - "src": "1941:8:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 101, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": false, - "src": "1951:7:0", - "subExpression": { - "argumentTypes": null, - "id": 100, - "name": "nonce", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5, - "src": "1951:5:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_stringliteral_6f28747ca3bf61320646bbe8fce0609ed0cb6ef483ba3b71713bc1d9ed5bd450", - "typeString": "literal_string \"BasicMission\"" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 94, - "name": "keccak256", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1155, - "src": "1890:9:0", - "typeDescriptions": { - "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$", - "typeString": "function () pure returns (bytes32)" - } - }, - "id": 102, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1890:69:0", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "1870:89:0" - }, - { - "expression": { - "argumentTypes": null, - "id": 114, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 104, - "name": "missions", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 24, - "src": "1965:8:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Mission_$20_storage_$", - "typeString": "mapping(bytes32 => struct BasicMission.Mission storage ref)" - } - }, - "id": 106, - "indexExpression": { - "argumentTypes": null, - "id": 105, - "name": "missionId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 93, - "src": "1974:9:0", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "1965:19:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Mission_$20_storage", - "typeString": "struct BasicMission.Mission storage ref" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 108, - "name": "_sellerId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 58, - "src": "2011:9:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 109, - "name": "_buyerId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60, - "src": "2035:8:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 110, - "name": "_cost", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 62, - "src": "2057:5:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "id": 111, - "name": "_cost", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 62, - "src": "2079:5:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "hexValue": "66616c7365", - "id": 112, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2102:5:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - } - ], - "expression": { - "argumentTypes": null, - "id": 107, - "name": "Mission", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20, - "src": "1987:7:0", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_struct$_Mission_$20_storage_ptr_$", - "typeString": "type(struct BasicMission.Mission storage pointer)" - } - }, - "id": 113, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "structConstructorCall", - "lValueRequested": false, - "names": [ - "seller", - "buyer", - "cost", - "balance", - "isSigned" - ], - "nodeType": "FunctionCall", - "src": "1987:169:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Mission_$20_memory", - "typeString": "struct BasicMission.Mission memory" - } - }, - "src": "1965:191:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Mission_$20_storage", - "typeString": "struct BasicMission.Mission storage ref" - } - }, - "id": 115, - "nodeType": "ExpressionStatement", - "src": "1965:191:0" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 117, - "name": "missionId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 93, - "src": "2183:9:0", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "argumentTypes": null, - "id": 118, - "name": "_sellerId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 58, - "src": "2194:9:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 119, - "name": "_buyerId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60, - "src": "2205:8:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 116, - "name": "Create", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 32, - "src": "2176:6:0", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_address_$returns$__$", - "typeString": "function (bytes32,address,address)" - } - }, - "id": 120, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2176:38:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 121, - "nodeType": "ExpressionStatement", - "src": "2176:38:0" - } - ] - }, - "id": 123, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "create", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 63, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 58, - "name": "_sellerId", - "nodeType": "VariableDeclaration", - "scope": 123, - "src": "1440:17:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 57, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1440:7:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 60, - "name": "_buyerId", - "nodeType": "VariableDeclaration", - "scope": 123, - "src": "1459:16:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 59, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1459:7:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 62, - "name": "_cost", - "nodeType": "VariableDeclaration", - "scope": 123, - "src": "1477:13:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 61, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1477:7:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1439:52:0" - }, - "payable": false, - "returnParameters": { - "id": 64, - "nodeType": "ParameterList", - "parameters": [], - "src": "1499:0:0" - }, - "scope": 152, - "src": "1424:795:0", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 150, - "nodeType": "Block", - "src": "2441:316:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 133, - "name": "_buyerId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 127, - "src": "2550:8:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 134, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1161, - "src": "2560:3:0", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 135, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "2560:10:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 131, - "name": "identity", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 40, - "src": "2525:8:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_Identity_$439", - "typeString": "contract Identity" - } - }, - "id": 132, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "verifyOwnership", - "nodeType": "MemberAccess", - "referencedDeclaration": 423, - "src": "2525:24:0", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_bool_$", - "typeString": "function (address,address) view external returns (bool)" - } - }, - "id": 136, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2525:46:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 130, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1164, - "src": "2510:7:0", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 137, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2510:67:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 138, - "nodeType": "ExpressionStatement", - "src": "2510:67:0" - }, - { - "expression": { - "argumentTypes": null, - "id": 144, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 139, - "name": "missions", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 24, - "src": "2619:8:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Mission_$20_storage_$", - "typeString": "mapping(bytes32 => struct BasicMission.Mission storage ref)" - } - }, - "id": 141, - "indexExpression": { - "argumentTypes": null, - "id": 140, - "name": "_missionId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 125, - "src": "2628:10:0", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "2619:20:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Mission_$20_storage", - "typeString": "struct BasicMission.Mission storage ref" - } - }, - "id": 142, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberName": "isSigned", - "nodeType": "MemberAccess", - "referencedDeclaration": 15, - "src": "2619:29:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "74727565", - "id": 143, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2651:4:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "src": "2619:36:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 145, - "nodeType": "ExpressionStatement", - "src": "2619:36:0" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 147, - "name": "_missionId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 125, - "src": "2741:10:0", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 146, - "name": "Signed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 36, - "src": "2734:6:0", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$returns$__$", - "typeString": "function (bytes32)" - } - }, - "id": 148, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2734:18:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 149, - "nodeType": "ExpressionStatement", - "src": "2734:18:0" - } - ] - }, - "id": 151, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "fulfilled", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 128, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 125, - "name": "_missionId", - "nodeType": "VariableDeclaration", - "scope": 151, - "src": "2396:18:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 124, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "2396:7:0", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 127, - "name": "_buyerId", - "nodeType": "VariableDeclaration", - "scope": 151, - "src": "2416:16:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 126, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2416:7:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "2395:38:0" - }, - "payable": false, - "returnParameters": { - "id": 129, - "nodeType": "ParameterList", - "parameters": [], - "src": "2441:0:0" - }, - "scope": 152, - "src": "2377:380:0", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - } - ], - "scope": 153, - "src": "412:2348:0" - } - ], - "src": "0:2761:0" - }, - "compiler": { - "name": "solc", - "version": "0.4.19+commit.c4cbbb05.Emscripten.clang" - }, - "networks": { - "1522233337963": { - "events": {}, - "links": {}, - "address": "0x9561c133dd8580860b6b7e504bc5aa500f0f06a7", - "transactionHash": "0xfb92e671ea947a26722be6d74755dd9195725d43115c8b665ac3dbc126861581" - }, - "1522241052538": { - "events": {}, - "links": {}, - "address": "0x9561c133dd8580860b6b7e504bc5aa500f0f06a7", - "transactionHash": "0xfb92e671ea947a26722be6d74755dd9195725d43115c8b665ac3dbc126861581" - } - }, - "schemaVersion": "2.0.0", - "updatedAt": "2018-03-28T12:44:25.020Z" -} \ No newline at end of file diff --git a/src/build/contracts/DAVToken.json b/src/build/contracts/DAVToken.json deleted file mode 100644 index 7da7e40..0000000 --- a/src/build/contracts/DAVToken.json +++ /dev/null @@ -1,3863 +0,0 @@ -{ - "contractName": "DAVToken", - "abi": [ - { - "constant": true, - "inputs": [], - "name": "name", - "outputs": [ - { - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "INITIAL_SUPPLY", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "decimals", - "outputs": [ - { - "name": "", - "type": "uint8" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "unpause", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "paused", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "_owner", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "name": "balance", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "pause", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "owner", - "outputs": [ - { - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "symbol", - "outputs": [ - { - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "_owner", - "type": "address" - }, - { - "name": "_spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [], - "name": "Pause", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Unpause", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "from", - "type": "address" - }, - { - "indexed": true, - "name": "to", - "type": "address" - }, - { - "indexed": false, - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "constant": false, - "inputs": [ - { - "name": "_to", - "type": "address" - }, - { - "name": "_value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_from", - "type": "address" - }, - { - "name": "_to", - "type": "address" - }, - { - "name": "_value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_spender", - "type": "address" - }, - { - "name": "_value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_spender", - "type": "address" - }, - { - "name": "_addedValue", - "type": "uint256" - } - ], - "name": "increaseApproval", - "outputs": [ - { - "name": "success", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_spender", - "type": "address" - }, - { - "name": "_subtractedValue", - "type": "uint256" - } - ], - "name": "decreaseApproval", - "outputs": [ - { - "name": "success", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x60606040526000600360146101000a81548160ff021916908315150217905550341561002a57600080fd5b33600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601260ff16600a0a620f424002600181905550601260ff16600a0a620f4240026000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611731806100dc6000396000f3006060604052600436106100f1576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146100f6578063095ea7b31461018457806318160ddd146101de57806323b872dd146102075780632ff2e9dc14610280578063313ce567146102a95780633f4ba83a146102d85780635c975abb146102ed578063661884631461031a57806370a08231146103745780638456cb59146103c15780638da5cb5b146103d657806395d89b411461042b578063a9059cbb146104b9578063d73dd62314610513578063dd62ed3e1461056d578063f2fde38b146105d9575b600080fd5b341561010157600080fd5b610109610612565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561014957808201518184015260208101905061012e565b50505050905090810190601f1680156101765780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561018f57600080fd5b6101c4600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061064b565b604051808215151515815260200191505060405180910390f35b34156101e957600080fd5b6101f161067b565b6040518082815260200191505060405180910390f35b341561021257600080fd5b610266600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610685565b604051808215151515815260200191505060405180910390f35b341561028b57600080fd5b6102936106b7565b6040518082815260200191505060405180910390f35b34156102b457600080fd5b6102bc6106c7565b604051808260ff1660ff16815260200191505060405180910390f35b34156102e357600080fd5b6102eb6106cc565b005b34156102f857600080fd5b61030061078c565b604051808215151515815260200191505060405180910390f35b341561032557600080fd5b61035a600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061079f565b604051808215151515815260200191505060405180910390f35b341561037f57600080fd5b6103ab600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506107cf565b6040518082815260200191505060405180910390f35b34156103cc57600080fd5b6103d4610817565b005b34156103e157600080fd5b6103e96108d8565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561043657600080fd5b61043e6108fe565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561047e578082015181840152602081019050610463565b50505050905090810190601f1680156104ab5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156104c457600080fd5b6104f9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610937565b604051808215151515815260200191505060405180910390f35b341561051e57600080fd5b610553600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610967565b604051808215151515815260200191505060405180910390f35b341561057857600080fd5b6105c3600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610997565b6040518082815260200191505060405180910390f35b34156105e457600080fd5b610610600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610a1e565b005b6040805190810160405280600981526020017f44415620546f6b656e000000000000000000000000000000000000000000000081525081565b6000600360149054906101000a900460ff1615151561066957600080fd5b6106738383610b76565b905092915050565b6000600154905090565b6000600360149054906101000a900460ff161515156106a357600080fd5b6106ae848484610c68565b90509392505050565b601260ff16600a0a620f42400281565b601281565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561072857600080fd5b600360149054906101000a900460ff16151561074357600080fd5b6000600360146101000a81548160ff0219169083151502179055507f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a1565b600360149054906101000a900460ff1681565b6000600360149054906101000a900460ff161515156107bd57600080fd5b6107c78383611022565b905092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561087357600080fd5b600360149054906101000a900460ff1615151561088f57600080fd5b6001600360146101000a81548160ff0219169083151502179055507f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a1565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6040805190810160405280600381526020017f444156000000000000000000000000000000000000000000000000000000000081525081565b6000600360149054906101000a900460ff1615151561095557600080fd5b61095f83836112b3565b905092915050565b6000600360149054906101000a900460ff1615151561098557600080fd5b61098f83836114d2565b905092915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610a7a57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515610ab657600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515610ca557600080fd5b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515610cf257600080fd5b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515610d7d57600080fd5b610dce826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116ce90919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610e61826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116e790919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f3282600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116ce90919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b600080600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905080831115611133576000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506111c7565b61114683826116ce90919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600191505092915050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156112f057600080fd5b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115151561133d57600080fd5b61138e826000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116ce90919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611421826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116e790919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b600061156382600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116e790919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b60008282111515156116dc57fe5b818303905092915050565b60008082840190508381101515156116fb57fe5b80915050929150505600a165627a7a72305820e95b1643740c167725737e72e91ca24d77e496c685d86bd8e685acc97d684a970029", - "deployedBytecode": "0x6060604052600436106100f1576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146100f6578063095ea7b31461018457806318160ddd146101de57806323b872dd146102075780632ff2e9dc14610280578063313ce567146102a95780633f4ba83a146102d85780635c975abb146102ed578063661884631461031a57806370a08231146103745780638456cb59146103c15780638da5cb5b146103d657806395d89b411461042b578063a9059cbb146104b9578063d73dd62314610513578063dd62ed3e1461056d578063f2fde38b146105d9575b600080fd5b341561010157600080fd5b610109610612565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561014957808201518184015260208101905061012e565b50505050905090810190601f1680156101765780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561018f57600080fd5b6101c4600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061064b565b604051808215151515815260200191505060405180910390f35b34156101e957600080fd5b6101f161067b565b6040518082815260200191505060405180910390f35b341561021257600080fd5b610266600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610685565b604051808215151515815260200191505060405180910390f35b341561028b57600080fd5b6102936106b7565b6040518082815260200191505060405180910390f35b34156102b457600080fd5b6102bc6106c7565b604051808260ff1660ff16815260200191505060405180910390f35b34156102e357600080fd5b6102eb6106cc565b005b34156102f857600080fd5b61030061078c565b604051808215151515815260200191505060405180910390f35b341561032557600080fd5b61035a600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061079f565b604051808215151515815260200191505060405180910390f35b341561037f57600080fd5b6103ab600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506107cf565b6040518082815260200191505060405180910390f35b34156103cc57600080fd5b6103d4610817565b005b34156103e157600080fd5b6103e96108d8565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561043657600080fd5b61043e6108fe565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561047e578082015181840152602081019050610463565b50505050905090810190601f1680156104ab5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156104c457600080fd5b6104f9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610937565b604051808215151515815260200191505060405180910390f35b341561051e57600080fd5b610553600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610967565b604051808215151515815260200191505060405180910390f35b341561057857600080fd5b6105c3600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610997565b6040518082815260200191505060405180910390f35b34156105e457600080fd5b610610600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610a1e565b005b6040805190810160405280600981526020017f44415620546f6b656e000000000000000000000000000000000000000000000081525081565b6000600360149054906101000a900460ff1615151561066957600080fd5b6106738383610b76565b905092915050565b6000600154905090565b6000600360149054906101000a900460ff161515156106a357600080fd5b6106ae848484610c68565b90509392505050565b601260ff16600a0a620f42400281565b601281565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561072857600080fd5b600360149054906101000a900460ff16151561074357600080fd5b6000600360146101000a81548160ff0219169083151502179055507f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a1565b600360149054906101000a900460ff1681565b6000600360149054906101000a900460ff161515156107bd57600080fd5b6107c78383611022565b905092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561087357600080fd5b600360149054906101000a900460ff1615151561088f57600080fd5b6001600360146101000a81548160ff0219169083151502179055507f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a1565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6040805190810160405280600381526020017f444156000000000000000000000000000000000000000000000000000000000081525081565b6000600360149054906101000a900460ff1615151561095557600080fd5b61095f83836112b3565b905092915050565b6000600360149054906101000a900460ff1615151561098557600080fd5b61098f83836114d2565b905092915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610a7a57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515610ab657600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515610ca557600080fd5b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515610cf257600080fd5b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515610d7d57600080fd5b610dce826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116ce90919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610e61826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116e790919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f3282600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116ce90919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b600080600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905080831115611133576000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506111c7565b61114683826116ce90919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600191505092915050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156112f057600080fd5b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115151561133d57600080fd5b61138e826000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116ce90919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611421826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116e790919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b600061156382600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116e790919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b60008282111515156116dc57fe5b818303905092915050565b60008082840190508381101515156116fb57fe5b80915050929150505600a165627a7a72305820e95b1643740c167725737e72e91ca24d77e496c685d86bd8e685acc97d684a970029", - "sourceMap": "233:3451:1:-;;;268:5:5;247:26;;;;;;;;;;;;;;;;;;;;813:110:1;;;;;;;;509:10:7;501:5;;:18;;;;;;;;;;;;;;;;;;539:2:1;603:17;;597:2;:23;586:7;:35;846:12;:29;;;;539:2;603:17;;597:2;:23;586:7;:35;881:8;:20;890:10;881:20;;;;;;;;;;;;;;;:37;;;;233:3451;;;;;;", - "deployedSourceMap": "233:3451:1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;420:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:2;8:100;;;99:1;94:3;90;84:5;80:1;75:3;71;64:6;52:2;49:1;45:3;40:15;;8:100;;;12:14;3:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2270:136:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;371:83:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1486:158:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;545:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;506:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;833:87:5;;;;;;;;;;;;;;247:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3503:179:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1189:107:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;666:85:5;;;;;;;;;;;;;;238:20:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;465:37:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:2;8:100;;;99:1;94:3;90;84:5;80:1;75:3;71;64:6;52:2;49:1;45:3;40:15;;8:100;;;12:14;3:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1080:128:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2869:169;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2300:126:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;832:169:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;420:41:1;;;;;;;;;;;;;;;;;;;;:::o;2270:136::-;2351:4;416:6:5;;;;;;;;;;;415:7;407:16;;;;;;;;2370:31:1;2384:8;2394:6;2370:13;:31::i;:::-;2363:38;;2270:136;;;;:::o;371:83:8:-;415:7;437:12;;430:19;;371:83;:::o;1486:158:1:-;1582:4;416:6:5;;;;;;;;;;;415:7;407:16;;;;;;;;1601:38:1;1620:5;1627:3;1632:6;1601:18;:38::i;:::-;1594:45;;1486:158;;;;;:::o;545:76::-;539:2;603:17;;597:2;:23;586:7;:35;545:76;:::o;506:35::-;539:2;506:35;:::o;833:87:5:-;653:5:7;;;;;;;;;;;639:19;;:10;:19;;;631:28;;;;;;;;568:6:5;;;;;;;;;;;560:15;;;;;;;;895:5;886:6;;:14;;;;;;;;;;;;;;;;;;906:9;;;;;;;;;;833:87::o;247:26::-;;;;;;;;;;;;;:::o;3503:179:1:-;3600:12;416:6:5;;;;;;;;;;;415:7;407:16;;;;;;;;3627:50:1;3650:8;3660:16;3627:22;:50::i;:::-;3620:57;;3503:179;;;;:::o;1189:107:8:-;1245:15;1275:8;:16;1284:6;1275:16;;;;;;;;;;;;;;;;1268:23;;1189:107;;;:::o;666:85:5:-;653:5:7;;;;;;;;;;;639:19;;:10;:19;;;631:28;;;;;;;;416:6:5;;;;;;;;;;;415:7;407:16;;;;;;;;729:4;720:6;;:13;;;;;;;;;;;;;;;;;;739:7;;;;;;;;;;666:85::o;238:20:7:-;;;;;;;;;;;;;:::o;465:37:1:-;;;;;;;;;;;;;;;;;;;;:::o;1080:128::-;1157:4;416:6:5;;;;;;;;;;;415:7;407:16;;;;;;;;1176:27:1;1191:3;1196:6;1176:14;:27::i;:::-;1169:34;;1080:128;;;;:::o;2869:169::-;2961:12;416:6:5;;;;;;;;;;;415:7;407:16;;;;;;;;2988:45:1;3011:8;3021:11;2988:22;:45::i;:::-;2981:52;;2869:169;;;;:::o;2300:126:11:-;2374:7;2396;:15;2404:6;2396:15;;;;;;;;;;;;;;;:25;2412:8;2396:25;;;;;;;;;;;;;;;;2389:32;;2300:126;;;;:::o;832:169:7:-;653:5;;;;;;;;;;;639:19;;:10;:19;;;631:28;;;;;;;;928:1;908:22;;:8;:22;;;;900:31;;;;;;;;965:8;937:37;;958:5;;;;;;;;;;;937:37;;;;;;;;;;;;988:8;980:5;;:16;;;;;;;;;;;;;;;;;;832:169;:::o;1798:183:11:-;1865:4;1909:6;1877:7;:19;1885:10;1877:19;;;;;;;;;;;;;;;:29;1897:8;1877:29;;;;;;;;;;;;;;;:38;;;;1942:8;1921:38;;1930:10;1921:38;;;1952:6;1921:38;;;;;;;;;;;;;;;;;;1972:4;1965:11;;1798:183;;;;:::o;736:439::-;818:4;853:1;838:17;;:3;:17;;;;830:26;;;;;;;;880:8;:15;889:5;880:15;;;;;;;;;;;;;;;;870:6;:25;;862:34;;;;;;;;920:7;:14;928:5;920:14;;;;;;;;;;;;;;;:26;935:10;920:26;;;;;;;;;;;;;;;;910:6;:36;;902:45;;;;;;;;972:27;992:6;972:8;:15;981:5;972:15;;;;;;;;;;;;;;;;:19;;:27;;;;:::i;:::-;954:8;:15;963:5;954:15;;;;;;;;;;;;;;;:45;;;;1021:25;1039:6;1021:8;:13;1030:3;1021:13;;;;;;;;;;;;;;;;:17;;:25;;;;:::i;:::-;1005:8;:13;1014:3;1005:13;;;;;;;;;;;;;;;:41;;;;1081:38;1112:6;1081:7;:14;1089:5;1081:14;;;;;;;;;;;;;;;:26;1096:10;1081:26;;;;;;;;;;;;;;;;:30;;:38;;;;:::i;:::-;1052:7;:14;1060:5;1052:14;;;;;;;;;;;;;;;:26;1067:10;1052:26;;;;;;;;;;;;;;;:67;;;;1141:3;1125:28;;1134:5;1125:28;;;1146:6;1125:28;;;;;;;;;;;;;;;;;;1166:4;1159:11;;736:439;;;;;:::o;3602:398::-;3685:4;3697:13;3713:7;:19;3721:10;3713:19;;;;;;;;;;;;;;;:29;3733:8;3713:29;;;;;;;;;;;;;;;;3697:45;;3771:8;3752:16;:27;3748:164;;;3821:1;3789:7;:19;3797:10;3789:19;;;;;;;;;;;;;;;:29;3809:8;3789:29;;;;;;;;;;;;;;;:33;;;;3748:164;;;3875:30;3888:16;3875:8;:12;;:30;;;;:::i;:::-;3843:7;:19;3851:10;3843:19;;;;;;;;;;;;;;;:29;3863:8;3843:29;;;;;;;;;;;;;;;:62;;;;3748:164;3938:8;3917:61;;3926:10;3917:61;;;3948:7;:19;3956:10;3948:19;;;;;;;;;;;;;;;:29;3968:8;3948:29;;;;;;;;;;;;;;;;3917:61;;;;;;;;;;;;;;;;;;3991:4;3984:11;;3602:398;;;;;:::o;608:379:8:-;671:4;706:1;691:17;;:3;:17;;;;683:26;;;;;;;;733:8;:20;742:10;733:20;;;;;;;;;;;;;;;;723:6;:30;;715:39;;;;;;;;847:32;872:6;847:8;:20;856:10;847:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;824:8;:20;833:10;824:20;;;;;;;;;;;;;;;:55;;;;901:25;919:6;901:8;:13;910:3;901:13;;;;;;;;;;;;;;;;:17;;:25;;;;:::i;:::-;885:8;:13;894:3;885:13;;;;;;;;;;;;;;;:41;;;;953:3;932:33;;941:10;932:33;;;958:6;932:33;;;;;;;;;;;;;;;;;;978:4;971:11;;608:379;;;;:::o;2883:257:11:-;2961:4;3005:46;3039:11;3005:7;:19;3013:10;3005:19;;;;;;;;;;;;;;;:29;3025:8;3005:29;;;;;;;;;;;;;;;;:33;;:46;;;;:::i;:::-;2973:7;:19;2981:10;2973:19;;;;;;;;;;;;;;;:29;2993:8;2973:29;;;;;;;;;;;;;;;:78;;;;3078:8;3057:61;;3066:10;3057:61;;;3088:7;:19;3096:10;3088:19;;;;;;;;;;;;;;;:29;3108:8;3088:29;;;;;;;;;;;;;;;;3057:61;;;;;;;;;;;;;;;;;;3131:4;3124:11;;2883:257;;;;:::o;836:110:6:-;894:7;921:1;916;:6;;909:14;;;;;;940:1;936;:5;929:12;;836:110;;;;:::o;1008:129::-;1066:7;1081:9;1097:1;1093;:5;1081:17;;1116:1;1111;:6;;1104:14;;;;;;1131:1;1124:8;;1008:129;;;;;:::o", - "source": "pragma solidity ^0.4.15;\n\n// solium-disable uppercase\nimport 'zeppelin-solidity/contracts/token/ERC20/StandardToken.sol';\nimport 'zeppelin-solidity/contracts/lifecycle/Pausable.sol';\n\n\n/**\n * @title DAV Token\n * @dev ERC20 token\n */\ncontract DAVToken is StandardToken, Pausable {\n\n // Token constants\n // NOTE: These are placeholder values used during development. Final supply and precision to be determined later.\n string public constant name = 'DAV Token';\n string public constant symbol = 'DAV';\n uint8 public constant decimals = 18;\n uint256 public constant INITIAL_SUPPLY = 1000000 * (10 ** uint256(decimals)); // Number of tokens padded with 0s for number of decimal places\n\n /**\n * @notice DAVToken constructor\n * Runs once on initial contract creation. Sets total supply and balances.\n */\n function DAVToken() public {\n totalSupply_ = INITIAL_SUPPLY;\n balances[msg.sender] = INITIAL_SUPPLY;\n }\n\n /**\n * @notice transfer token for a specified address\n * @param _to The address to transfer to.\n * @param _value The amount to be transferred.\n */\n function transfer(address _to, uint256 _value) public whenNotPaused returns (bool) {\n return super.transfer(_to, _value);\n }\n\n /**\n * @notice Transfer tokens from one address to another\n * @param _from address The address which you want to send tokens from\n * @param _to address The address which you want to transfer to\n * @param _value uint256 the amount of tokens to be transferred\n */\n function transferFrom(address _from, address _to, uint256 _value) public whenNotPaused returns (bool) {\n return super.transferFrom(_from, _to, _value);\n }\n\n /**\n * @notice Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.\n *\n * Beware that changing an allowance with this method brings the risk that someone may use both the old\n * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this\n * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards:\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n * @param _spender The address which will spend the funds.\n * @param _value The amount of tokens to be spent.\n */\n function approve(address _spender, uint256 _value) public whenNotPaused returns (bool) {\n return super.approve(_spender, _value);\n }\n\n /**\n * @notice Increase the amount of tokens that an owner is allowed to a spender.\n *\n * approve should be called when allowed[_spender] == 0. To increment\n * allowed value is better to use this function to avoid 2 calls (and wait until\n * the first transaction is mined)\n * From MonolithDAO Token.sol\n * @param _spender The address which will spend the funds.\n * @param _addedValue The amount of tokens to increase the allowance by.\n */\n function increaseApproval(address _spender, uint _addedValue) public whenNotPaused returns (bool success) {\n return super.increaseApproval(_spender, _addedValue);\n }\n\n /**\n * @notice Decrease the amount of tokens that an owner allowed to a spender.\n *\n * approve should be called when allowed[_spender] == 0. To decrement\n * allowed value is better to use this function to avoid 2 calls (and wait until\n * the first transaction is mined)\n * From MonolithDAO Token.sol\n * @param _spender The address which will spend the funds.\n * @param _subtractedValue The amount of tokens to decrease the allowance by.\n */\n function decreaseApproval(address _spender, uint _subtractedValue) public whenNotPaused returns (bool success) {\n return super.decreaseApproval(_spender, _subtractedValue);\n }\n}\n", - "sourcePath": "/Users/anatolyt/projects/dav/contracts/contracts/DAVToken.sol", - "ast": { - "absolutePath": "/Users/anatolyt/projects/dav/contracts/contracts/DAVToken.sol", - "exportedSymbols": { - "DAVToken": [ - 288 - ] - }, - "id": 289, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 154, - "literals": [ - "solidity", - "^", - "0.4", - ".15" - ], - "nodeType": "PragmaDirective", - "src": "0:24:1" - }, - { - "absolutePath": "zeppelin-solidity/contracts/token/ERC20/StandardToken.sol", - "file": "zeppelin-solidity/contracts/token/ERC20/StandardToken.sol", - "id": 155, - "nodeType": "ImportDirective", - "scope": 289, - "sourceUnit": 1150, - "src": "54:67:1", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "zeppelin-solidity/contracts/lifecycle/Pausable.sol", - "file": "zeppelin-solidity/contracts/lifecycle/Pausable.sol", - "id": 156, - "nodeType": "ImportDirective", - "scope": 289, - "sourceUnit": 579, - "src": "122:60:1", - "symbolAliases": [], - "unitAlias": "" - }, - { - "baseContracts": [ - { - "arguments": [], - "baseName": { - "contractScope": null, - "id": 157, - "name": "StandardToken", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1149, - "src": "254:13:1", - "typeDescriptions": { - "typeIdentifier": "t_contract$_StandardToken_$1149", - "typeString": "contract StandardToken" - } - }, - "id": 158, - "nodeType": "InheritanceSpecifier", - "src": "254:13:1" - }, - { - "arguments": [], - "baseName": { - "contractScope": null, - "id": 159, - "name": "Pausable", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 578, - "src": "269:8:1", - "typeDescriptions": { - "typeIdentifier": "t_contract$_Pausable_$578", - "typeString": "contract Pausable" - } - }, - "id": 160, - "nodeType": "InheritanceSpecifier", - "src": "269:8:1" - } - ], - "contractDependencies": [ - 578, - 732, - 828, - 871, - 903, - 1149 - ], - "contractKind": "contract", - "documentation": "@title DAV Token\n@dev ERC20 token", - "fullyImplemented": true, - "id": 288, - "linearizedBaseContracts": [ - 288, - 578, - 732, - 1149, - 828, - 871, - 903 - ], - "name": "DAVToken", - "nodeType": "ContractDefinition", - "nodes": [ - { - "constant": true, - "id": 163, - "name": "name", - "nodeType": "VariableDeclaration", - "scope": 288, - "src": "420:41:1", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_string_memory", - "typeString": "string memory" - }, - "typeName": { - "id": 161, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "420:6:1", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string storage pointer" - } - }, - "value": { - "argumentTypes": null, - "hexValue": "44415620546f6b656e", - "id": 162, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "450:11:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_a3aeff9fd921030cd609843bb7ccb973fa7b1cea0b5811568ec0b96e473afb9f", - "typeString": "literal_string \"DAV Token\"" - }, - "value": "DAV Token" - }, - "visibility": "public" - }, - { - "constant": true, - "id": 166, - "name": "symbol", - "nodeType": "VariableDeclaration", - "scope": 288, - "src": "465:37:1", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_string_memory", - "typeString": "string memory" - }, - "typeName": { - "id": 164, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "465:6:1", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string storage pointer" - } - }, - "value": { - "argumentTypes": null, - "hexValue": "444156", - "id": 165, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "497:5:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_f12e4a671ff413835d47c9a78729402d619e1c0248a8cd54a43dfd5008905692", - "typeString": "literal_string \"DAV\"" - }, - "value": "DAV" - }, - "visibility": "public" - }, - { - "constant": true, - "id": 169, - "name": "decimals", - "nodeType": "VariableDeclaration", - "scope": 288, - "src": "506:35:1", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 167, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "506:5:1", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "value": { - "argumentTypes": null, - "hexValue": "3138", - "id": 168, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "539:2:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_18_by_1", - "typeString": "int_const 18" - }, - "value": "18" - }, - "visibility": "public" - }, - { - "constant": true, - "id": 179, - "name": "INITIAL_SUPPLY", - "nodeType": "VariableDeclaration", - "scope": 288, - "src": "545:76:1", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 170, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "545:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 178, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "hexValue": "31303030303030", - "id": 171, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "586:7:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_1000000_by_1", - "typeString": "int_const 1000000" - }, - "value": "1000000" - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 176, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "hexValue": "3130", - "id": 172, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "597:2:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_10_by_1", - "typeString": "int_const 10" - }, - "value": "10" - }, - "nodeType": "BinaryOperation", - "operator": "**", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 174, - "name": "decimals", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 169, - "src": "611:8:1", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - ], - "id": 173, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "603:7:1", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": "uint256" - }, - "id": 175, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "603:17:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "597:23:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 177, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "596:25:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "586:35:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "public" - }, - { - "body": { - "id": 193, - "nodeType": "Block", - "src": "840:83:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 184, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 182, - "name": "totalSupply_", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 747, - "src": "846:12:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 183, - "name": "INITIAL_SUPPLY", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 179, - "src": "861:14:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "846:29:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 185, - "nodeType": "ExpressionStatement", - "src": "846:29:1" - }, - { - "expression": { - "argumentTypes": null, - "id": 191, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 186, - "name": "balances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 745, - "src": "881:8:1", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 189, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 187, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1161, - "src": "890:3:1", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 188, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "890:10:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "881:20:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 190, - "name": "INITIAL_SUPPLY", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 179, - "src": "904:14:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "881:37:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 192, - "nodeType": "ExpressionStatement", - "src": "881:37:1" - } - ] - }, - "id": 194, - "implemented": true, - "isConstructor": true, - "isDeclaredConst": false, - "modifiers": [], - "name": "DAVToken", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 180, - "nodeType": "ParameterList", - "parameters": [], - "src": "830:2:1" - }, - "payable": false, - "returnParameters": { - "id": 181, - "nodeType": "ParameterList", - "parameters": [], - "src": "840:0:1" - }, - "scope": 288, - "src": "813:110:1", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 211, - "nodeType": "Block", - "src": "1163:45:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 207, - "name": "_to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 196, - "src": "1191:3:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 208, - "name": "_value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 198, - "src": "1196:6:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 205, - "name": "super", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1187, - "src": "1176:5:1", - "typeDescriptions": { - "typeIdentifier": "t_super$_DAVToken_$288", - "typeString": "contract super DAVToken" - } - }, - "id": 206, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "transfer", - "nodeType": "MemberAccess", - "referencedDeclaration": 815, - "src": "1176:14:1", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", - "typeString": "function (address,uint256) returns (bool)" - } - }, - "id": 209, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1176:27:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 204, - "id": 210, - "nodeType": "Return", - "src": "1169:34:1" - } - ] - }, - "id": 212, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [ - { - "arguments": [], - "id": 201, - "modifierName": { - "argumentTypes": null, - "id": 200, - "name": "whenNotPaused", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 539, - "src": "1134:13:1", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "1134:13:1" - } - ], - "name": "transfer", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 199, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 196, - "name": "_to", - "nodeType": "VariableDeclaration", - "scope": 212, - "src": "1098:11:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 195, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1098:7:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 198, - "name": "_value", - "nodeType": "VariableDeclaration", - "scope": 212, - "src": "1111:14:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 197, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1111:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1097:29:1" - }, - "payable": false, - "returnParameters": { - "id": 204, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 203, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 212, - "src": "1157:4:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 202, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "1157:4:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1156:6:1" - }, - "scope": 288, - "src": "1080:128:1", - "stateMutability": "nonpayable", - "superFunction": 815, - "visibility": "public" - }, - { - "body": { - "id": 232, - "nodeType": "Block", - "src": "1588:56:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 227, - "name": "_from", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 214, - "src": "1620:5:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 228, - "name": "_to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 216, - "src": "1627:3:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 229, - "name": "_value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 218, - "src": "1632:6:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 225, - "name": "super", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1187, - "src": "1601:5:1", - "typeDescriptions": { - "typeIdentifier": "t_super$_DAVToken_$288", - "typeString": "contract super DAVToken" - } - }, - "id": 226, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "transferFrom", - "nodeType": "MemberAccess", - "referencedDeclaration": 1003, - "src": "1601:18:1", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$", - "typeString": "function (address,address,uint256) returns (bool)" - } - }, - "id": 230, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1601:38:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 224, - "id": 231, - "nodeType": "Return", - "src": "1594:45:1" - } - ] - }, - "id": 233, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [ - { - "arguments": [], - "id": 221, - "modifierName": { - "argumentTypes": null, - "id": 220, - "name": "whenNotPaused", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 539, - "src": "1559:13:1", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "1559:13:1" - } - ], - "name": "transferFrom", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 219, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 214, - "name": "_from", - "nodeType": "VariableDeclaration", - "scope": 233, - "src": "1508:13:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 213, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1508:7:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 216, - "name": "_to", - "nodeType": "VariableDeclaration", - "scope": 233, - "src": "1523:11:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 215, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1523:7:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 218, - "name": "_value", - "nodeType": "VariableDeclaration", - "scope": 233, - "src": "1536:14:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 217, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1536:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1507:44:1" - }, - "payable": false, - "returnParameters": { - "id": 224, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 223, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 233, - "src": "1582:4:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 222, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "1582:4:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1581:6:1" - }, - "scope": 288, - "src": "1486:158:1", - "stateMutability": "nonpayable", - "superFunction": 1003, - "visibility": "public" - }, - { - "body": { - "id": 250, - "nodeType": "Block", - "src": "2357:49:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 246, - "name": "_spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 235, - "src": "2384:8:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 247, - "name": "_value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 237, - "src": "2394:6:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 244, - "name": "super", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1187, - "src": "2370:5:1", - "typeDescriptions": { - "typeIdentifier": "t_super$_DAVToken_$288", - "typeString": "contract super DAVToken" - } - }, - "id": 245, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "approve", - "nodeType": "MemberAccess", - "referencedDeclaration": 1031, - "src": "2370:13:1", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", - "typeString": "function (address,uint256) returns (bool)" - } - }, - "id": 248, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2370:31:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 243, - "id": 249, - "nodeType": "Return", - "src": "2363:38:1" - } - ] - }, - "id": 251, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [ - { - "arguments": [], - "id": 240, - "modifierName": { - "argumentTypes": null, - "id": 239, - "name": "whenNotPaused", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 539, - "src": "2328:13:1", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "2328:13:1" - } - ], - "name": "approve", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 238, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 235, - "name": "_spender", - "nodeType": "VariableDeclaration", - "scope": 251, - "src": "2287:16:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 234, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2287:7:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 237, - "name": "_value", - "nodeType": "VariableDeclaration", - "scope": 251, - "src": "2305:14:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 236, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2305:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "2286:34:1" - }, - "payable": false, - "returnParameters": { - "id": 243, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 242, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 251, - "src": "2351:4:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 241, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "2351:4:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "2350:6:1" - }, - "scope": 288, - "src": "2270:136:1", - "stateMutability": "nonpayable", - "superFunction": 1031, - "visibility": "public" - }, - { - "body": { - "id": 268, - "nodeType": "Block", - "src": "2975:63:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 264, - "name": "_spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 253, - "src": "3011:8:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 265, - "name": "_addedValue", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 255, - "src": "3021:11:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 262, - "name": "super", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1187, - "src": "2988:5:1", - "typeDescriptions": { - "typeIdentifier": "t_super$_DAVToken_$288", - "typeString": "contract super DAVToken" - } - }, - "id": 263, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "increaseApproval", - "nodeType": "MemberAccess", - "referencedDeclaration": 1088, - "src": "2988:22:1", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", - "typeString": "function (address,uint256) returns (bool)" - } - }, - "id": 266, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2988:45:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 261, - "id": 267, - "nodeType": "Return", - "src": "2981:52:1" - } - ] - }, - "id": 269, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [ - { - "arguments": [], - "id": 258, - "modifierName": { - "argumentTypes": null, - "id": 257, - "name": "whenNotPaused", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 539, - "src": "2938:13:1", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "2938:13:1" - } - ], - "name": "increaseApproval", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 256, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 253, - "name": "_spender", - "nodeType": "VariableDeclaration", - "scope": 269, - "src": "2895:16:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 252, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2895:7:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 255, - "name": "_addedValue", - "nodeType": "VariableDeclaration", - "scope": 269, - "src": "2913:16:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 254, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "2913:4:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "2894:36:1" - }, - "payable": false, - "returnParameters": { - "id": 261, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 260, - "name": "success", - "nodeType": "VariableDeclaration", - "scope": 269, - "src": "2961:12:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 259, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "2961:4:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "2960:14:1" - }, - "scope": 288, - "src": "2869:169:1", - "stateMutability": "nonpayable", - "superFunction": 1088, - "visibility": "public" - }, - { - "body": { - "id": 286, - "nodeType": "Block", - "src": "3614:68:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 282, - "name": "_spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 271, - "src": "3650:8:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 283, - "name": "_subtractedValue", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 273, - "src": "3660:16:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 280, - "name": "super", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1187, - "src": "3627:5:1", - "typeDescriptions": { - "typeIdentifier": "t_super$_DAVToken_$288", - "typeString": "contract super DAVToken" - } - }, - "id": 281, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "decreaseApproval", - "nodeType": "MemberAccess", - "referencedDeclaration": 1148, - "src": "3627:22:1", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", - "typeString": "function (address,uint256) returns (bool)" - } - }, - "id": 284, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3627:50:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 279, - "id": 285, - "nodeType": "Return", - "src": "3620:57:1" - } - ] - }, - "id": 287, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [ - { - "arguments": [], - "id": 276, - "modifierName": { - "argumentTypes": null, - "id": 275, - "name": "whenNotPaused", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 539, - "src": "3577:13:1", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "3577:13:1" - } - ], - "name": "decreaseApproval", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 274, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 271, - "name": "_spender", - "nodeType": "VariableDeclaration", - "scope": 287, - "src": "3529:16:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 270, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3529:7:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 273, - "name": "_subtractedValue", - "nodeType": "VariableDeclaration", - "scope": 287, - "src": "3547:21:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 272, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "3547:4:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "3528:41:1" - }, - "payable": false, - "returnParameters": { - "id": 279, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 278, - "name": "success", - "nodeType": "VariableDeclaration", - "scope": 287, - "src": "3600:12:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 277, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "3600:4:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "3599:14:1" - }, - "scope": 288, - "src": "3503:179:1", - "stateMutability": "nonpayable", - "superFunction": 1148, - "visibility": "public" - } - ], - "scope": 289, - "src": "233:3451:1" - } - ], - "src": "0:3685:1" - }, - "legacyAST": { - "absolutePath": "/Users/anatolyt/projects/dav/contracts/contracts/DAVToken.sol", - "exportedSymbols": { - "DAVToken": [ - 288 - ] - }, - "id": 289, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 154, - "literals": [ - "solidity", - "^", - "0.4", - ".15" - ], - "nodeType": "PragmaDirective", - "src": "0:24:1" - }, - { - "absolutePath": "zeppelin-solidity/contracts/token/ERC20/StandardToken.sol", - "file": "zeppelin-solidity/contracts/token/ERC20/StandardToken.sol", - "id": 155, - "nodeType": "ImportDirective", - "scope": 289, - "sourceUnit": 1150, - "src": "54:67:1", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "zeppelin-solidity/contracts/lifecycle/Pausable.sol", - "file": "zeppelin-solidity/contracts/lifecycle/Pausable.sol", - "id": 156, - "nodeType": "ImportDirective", - "scope": 289, - "sourceUnit": 579, - "src": "122:60:1", - "symbolAliases": [], - "unitAlias": "" - }, - { - "baseContracts": [ - { - "arguments": [], - "baseName": { - "contractScope": null, - "id": 157, - "name": "StandardToken", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1149, - "src": "254:13:1", - "typeDescriptions": { - "typeIdentifier": "t_contract$_StandardToken_$1149", - "typeString": "contract StandardToken" - } - }, - "id": 158, - "nodeType": "InheritanceSpecifier", - "src": "254:13:1" - }, - { - "arguments": [], - "baseName": { - "contractScope": null, - "id": 159, - "name": "Pausable", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 578, - "src": "269:8:1", - "typeDescriptions": { - "typeIdentifier": "t_contract$_Pausable_$578", - "typeString": "contract Pausable" - } - }, - "id": 160, - "nodeType": "InheritanceSpecifier", - "src": "269:8:1" - } - ], - "contractDependencies": [ - 578, - 732, - 828, - 871, - 903, - 1149 - ], - "contractKind": "contract", - "documentation": "@title DAV Token\n@dev ERC20 token", - "fullyImplemented": true, - "id": 288, - "linearizedBaseContracts": [ - 288, - 578, - 732, - 1149, - 828, - 871, - 903 - ], - "name": "DAVToken", - "nodeType": "ContractDefinition", - "nodes": [ - { - "constant": true, - "id": 163, - "name": "name", - "nodeType": "VariableDeclaration", - "scope": 288, - "src": "420:41:1", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_string_memory", - "typeString": "string memory" - }, - "typeName": { - "id": 161, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "420:6:1", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string storage pointer" - } - }, - "value": { - "argumentTypes": null, - "hexValue": "44415620546f6b656e", - "id": 162, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "450:11:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_a3aeff9fd921030cd609843bb7ccb973fa7b1cea0b5811568ec0b96e473afb9f", - "typeString": "literal_string \"DAV Token\"" - }, - "value": "DAV Token" - }, - "visibility": "public" - }, - { - "constant": true, - "id": 166, - "name": "symbol", - "nodeType": "VariableDeclaration", - "scope": 288, - "src": "465:37:1", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_string_memory", - "typeString": "string memory" - }, - "typeName": { - "id": 164, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "465:6:1", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string storage pointer" - } - }, - "value": { - "argumentTypes": null, - "hexValue": "444156", - "id": 165, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "497:5:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_f12e4a671ff413835d47c9a78729402d619e1c0248a8cd54a43dfd5008905692", - "typeString": "literal_string \"DAV\"" - }, - "value": "DAV" - }, - "visibility": "public" - }, - { - "constant": true, - "id": 169, - "name": "decimals", - "nodeType": "VariableDeclaration", - "scope": 288, - "src": "506:35:1", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 167, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "506:5:1", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "value": { - "argumentTypes": null, - "hexValue": "3138", - "id": 168, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "539:2:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_18_by_1", - "typeString": "int_const 18" - }, - "value": "18" - }, - "visibility": "public" - }, - { - "constant": true, - "id": 179, - "name": "INITIAL_SUPPLY", - "nodeType": "VariableDeclaration", - "scope": 288, - "src": "545:76:1", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 170, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "545:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 178, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "hexValue": "31303030303030", - "id": 171, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "586:7:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_1000000_by_1", - "typeString": "int_const 1000000" - }, - "value": "1000000" - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 176, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "hexValue": "3130", - "id": 172, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "597:2:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_10_by_1", - "typeString": "int_const 10" - }, - "value": "10" - }, - "nodeType": "BinaryOperation", - "operator": "**", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 174, - "name": "decimals", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 169, - "src": "611:8:1", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - ], - "id": 173, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "603:7:1", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": "uint256" - }, - "id": 175, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "603:17:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "597:23:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 177, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "596:25:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "586:35:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "public" - }, - { - "body": { - "id": 193, - "nodeType": "Block", - "src": "840:83:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 184, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 182, - "name": "totalSupply_", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 747, - "src": "846:12:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 183, - "name": "INITIAL_SUPPLY", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 179, - "src": "861:14:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "846:29:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 185, - "nodeType": "ExpressionStatement", - "src": "846:29:1" - }, - { - "expression": { - "argumentTypes": null, - "id": 191, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 186, - "name": "balances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 745, - "src": "881:8:1", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 189, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 187, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1161, - "src": "890:3:1", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 188, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "890:10:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "881:20:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 190, - "name": "INITIAL_SUPPLY", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 179, - "src": "904:14:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "881:37:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 192, - "nodeType": "ExpressionStatement", - "src": "881:37:1" - } - ] - }, - "id": 194, - "implemented": true, - "isConstructor": true, - "isDeclaredConst": false, - "modifiers": [], - "name": "DAVToken", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 180, - "nodeType": "ParameterList", - "parameters": [], - "src": "830:2:1" - }, - "payable": false, - "returnParameters": { - "id": 181, - "nodeType": "ParameterList", - "parameters": [], - "src": "840:0:1" - }, - "scope": 288, - "src": "813:110:1", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 211, - "nodeType": "Block", - "src": "1163:45:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 207, - "name": "_to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 196, - "src": "1191:3:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 208, - "name": "_value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 198, - "src": "1196:6:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 205, - "name": "super", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1187, - "src": "1176:5:1", - "typeDescriptions": { - "typeIdentifier": "t_super$_DAVToken_$288", - "typeString": "contract super DAVToken" - } - }, - "id": 206, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "transfer", - "nodeType": "MemberAccess", - "referencedDeclaration": 815, - "src": "1176:14:1", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", - "typeString": "function (address,uint256) returns (bool)" - } - }, - "id": 209, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1176:27:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 204, - "id": 210, - "nodeType": "Return", - "src": "1169:34:1" - } - ] - }, - "id": 212, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [ - { - "arguments": [], - "id": 201, - "modifierName": { - "argumentTypes": null, - "id": 200, - "name": "whenNotPaused", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 539, - "src": "1134:13:1", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "1134:13:1" - } - ], - "name": "transfer", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 199, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 196, - "name": "_to", - "nodeType": "VariableDeclaration", - "scope": 212, - "src": "1098:11:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 195, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1098:7:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 198, - "name": "_value", - "nodeType": "VariableDeclaration", - "scope": 212, - "src": "1111:14:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 197, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1111:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1097:29:1" - }, - "payable": false, - "returnParameters": { - "id": 204, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 203, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 212, - "src": "1157:4:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 202, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "1157:4:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1156:6:1" - }, - "scope": 288, - "src": "1080:128:1", - "stateMutability": "nonpayable", - "superFunction": 815, - "visibility": "public" - }, - { - "body": { - "id": 232, - "nodeType": "Block", - "src": "1588:56:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 227, - "name": "_from", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 214, - "src": "1620:5:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 228, - "name": "_to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 216, - "src": "1627:3:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 229, - "name": "_value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 218, - "src": "1632:6:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 225, - "name": "super", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1187, - "src": "1601:5:1", - "typeDescriptions": { - "typeIdentifier": "t_super$_DAVToken_$288", - "typeString": "contract super DAVToken" - } - }, - "id": 226, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "transferFrom", - "nodeType": "MemberAccess", - "referencedDeclaration": 1003, - "src": "1601:18:1", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$", - "typeString": "function (address,address,uint256) returns (bool)" - } - }, - "id": 230, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1601:38:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 224, - "id": 231, - "nodeType": "Return", - "src": "1594:45:1" - } - ] - }, - "id": 233, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [ - { - "arguments": [], - "id": 221, - "modifierName": { - "argumentTypes": null, - "id": 220, - "name": "whenNotPaused", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 539, - "src": "1559:13:1", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "1559:13:1" - } - ], - "name": "transferFrom", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 219, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 214, - "name": "_from", - "nodeType": "VariableDeclaration", - "scope": 233, - "src": "1508:13:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 213, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1508:7:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 216, - "name": "_to", - "nodeType": "VariableDeclaration", - "scope": 233, - "src": "1523:11:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 215, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1523:7:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 218, - "name": "_value", - "nodeType": "VariableDeclaration", - "scope": 233, - "src": "1536:14:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 217, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1536:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1507:44:1" - }, - "payable": false, - "returnParameters": { - "id": 224, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 223, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 233, - "src": "1582:4:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 222, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "1582:4:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1581:6:1" - }, - "scope": 288, - "src": "1486:158:1", - "stateMutability": "nonpayable", - "superFunction": 1003, - "visibility": "public" - }, - { - "body": { - "id": 250, - "nodeType": "Block", - "src": "2357:49:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 246, - "name": "_spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 235, - "src": "2384:8:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 247, - "name": "_value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 237, - "src": "2394:6:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 244, - "name": "super", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1187, - "src": "2370:5:1", - "typeDescriptions": { - "typeIdentifier": "t_super$_DAVToken_$288", - "typeString": "contract super DAVToken" - } - }, - "id": 245, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "approve", - "nodeType": "MemberAccess", - "referencedDeclaration": 1031, - "src": "2370:13:1", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", - "typeString": "function (address,uint256) returns (bool)" - } - }, - "id": 248, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2370:31:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 243, - "id": 249, - "nodeType": "Return", - "src": "2363:38:1" - } - ] - }, - "id": 251, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [ - { - "arguments": [], - "id": 240, - "modifierName": { - "argumentTypes": null, - "id": 239, - "name": "whenNotPaused", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 539, - "src": "2328:13:1", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "2328:13:1" - } - ], - "name": "approve", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 238, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 235, - "name": "_spender", - "nodeType": "VariableDeclaration", - "scope": 251, - "src": "2287:16:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 234, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2287:7:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 237, - "name": "_value", - "nodeType": "VariableDeclaration", - "scope": 251, - "src": "2305:14:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 236, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2305:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "2286:34:1" - }, - "payable": false, - "returnParameters": { - "id": 243, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 242, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 251, - "src": "2351:4:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 241, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "2351:4:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "2350:6:1" - }, - "scope": 288, - "src": "2270:136:1", - "stateMutability": "nonpayable", - "superFunction": 1031, - "visibility": "public" - }, - { - "body": { - "id": 268, - "nodeType": "Block", - "src": "2975:63:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 264, - "name": "_spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 253, - "src": "3011:8:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 265, - "name": "_addedValue", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 255, - "src": "3021:11:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 262, - "name": "super", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1187, - "src": "2988:5:1", - "typeDescriptions": { - "typeIdentifier": "t_super$_DAVToken_$288", - "typeString": "contract super DAVToken" - } - }, - "id": 263, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "increaseApproval", - "nodeType": "MemberAccess", - "referencedDeclaration": 1088, - "src": "2988:22:1", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", - "typeString": "function (address,uint256) returns (bool)" - } - }, - "id": 266, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2988:45:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 261, - "id": 267, - "nodeType": "Return", - "src": "2981:52:1" - } - ] - }, - "id": 269, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [ - { - "arguments": [], - "id": 258, - "modifierName": { - "argumentTypes": null, - "id": 257, - "name": "whenNotPaused", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 539, - "src": "2938:13:1", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "2938:13:1" - } - ], - "name": "increaseApproval", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 256, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 253, - "name": "_spender", - "nodeType": "VariableDeclaration", - "scope": 269, - "src": "2895:16:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 252, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2895:7:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 255, - "name": "_addedValue", - "nodeType": "VariableDeclaration", - "scope": 269, - "src": "2913:16:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 254, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "2913:4:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "2894:36:1" - }, - "payable": false, - "returnParameters": { - "id": 261, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 260, - "name": "success", - "nodeType": "VariableDeclaration", - "scope": 269, - "src": "2961:12:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 259, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "2961:4:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "2960:14:1" - }, - "scope": 288, - "src": "2869:169:1", - "stateMutability": "nonpayable", - "superFunction": 1088, - "visibility": "public" - }, - { - "body": { - "id": 286, - "nodeType": "Block", - "src": "3614:68:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 282, - "name": "_spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 271, - "src": "3650:8:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 283, - "name": "_subtractedValue", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 273, - "src": "3660:16:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 280, - "name": "super", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1187, - "src": "3627:5:1", - "typeDescriptions": { - "typeIdentifier": "t_super$_DAVToken_$288", - "typeString": "contract super DAVToken" - } - }, - "id": 281, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "decreaseApproval", - "nodeType": "MemberAccess", - "referencedDeclaration": 1148, - "src": "3627:22:1", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", - "typeString": "function (address,uint256) returns (bool)" - } - }, - "id": 284, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3627:50:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 279, - "id": 285, - "nodeType": "Return", - "src": "3620:57:1" - } - ] - }, - "id": 287, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [ - { - "arguments": [], - "id": 276, - "modifierName": { - "argumentTypes": null, - "id": 275, - "name": "whenNotPaused", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 539, - "src": "3577:13:1", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "3577:13:1" - } - ], - "name": "decreaseApproval", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 274, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 271, - "name": "_spender", - "nodeType": "VariableDeclaration", - "scope": 287, - "src": "3529:16:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 270, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3529:7:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 273, - "name": "_subtractedValue", - "nodeType": "VariableDeclaration", - "scope": 287, - "src": "3547:21:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 272, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "3547:4:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "3528:41:1" - }, - "payable": false, - "returnParameters": { - "id": 279, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 278, - "name": "success", - "nodeType": "VariableDeclaration", - "scope": 287, - "src": "3600:12:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 277, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "3600:4:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "3599:14:1" - }, - "scope": 288, - "src": "3503:179:1", - "stateMutability": "nonpayable", - "superFunction": 1148, - "visibility": "public" - } - ], - "scope": 289, - "src": "233:3451:1" - } - ], - "src": "0:3685:1" - }, - "compiler": { - "name": "solc", - "version": "0.4.19+commit.c4cbbb05.Emscripten.clang" - }, - "networks": { - "1522233337963": { - "events": {}, - "links": {}, - "address": "0xcfeb869f69431e42cdb54a4f4f105c19c080a601", - "transactionHash": "0x4d7fa60a5a3186f4e3c1894326325e0b18db88ace1ed34caf9356ca7a602d81d" - }, - "1522241052538": { - "events": {}, - "links": {}, - "address": "0xcfeb869f69431e42cdb54a4f4f105c19c080a601", - "transactionHash": "0x4d7fa60a5a3186f4e3c1894326325e0b18db88ace1ed34caf9356ca7a602d81d" - } - }, - "schemaVersion": "2.0.0", - "updatedAt": "2018-03-28T12:44:25.027Z" -} \ No newline at end of file diff --git a/src/build/contracts/Identity.json b/src/build/contracts/Identity.json deleted file mode 100644 index f046b02..0000000 --- a/src/build/contracts/Identity.json +++ /dev/null @@ -1,4106 +0,0 @@ -{ - "contractName": "Identity", - "abi": [ - { - "inputs": [ - { - "name": "_davTokenContract", - "type": "address" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "constant": false, - "inputs": [ - { - "name": "_id", - "type": "address" - }, - { - "name": "_v", - "type": "uint8" - }, - { - "name": "_r", - "type": "bytes32" - }, - { - "name": "_s", - "type": "bytes32" - } - ], - "name": "register", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "registerSimple", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "_id", - "type": "address" - } - ], - "name": "getBalance", - "outputs": [ - { - "name": "balance", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "_id", - "type": "address" - }, - { - "name": "_wallet", - "type": "address" - } - ], - "name": "verifyOwnership", - "outputs": [ - { - "name": "verified", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "_id", - "type": "address" - } - ], - "name": "isRegistered", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x6060604052341561000f57600080fd5b6040516020806108d58339810160405280805190602001909190505080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506108598061007c6000396000f30060606040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806307957360146100725780633c56e2ae146100e25780635db3f96314610141578063c3c5a54714610156578063f8b2cb4f146101a7575b600080fd5b341561007d57600080fd5b6100c8600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506101f4565b604051808215151515815260200191505060405180910390f35b34156100ed57600080fd5b61013f600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803560ff16906020019091908035600019169060200190919080356000191690602001909190505061028e565b005b341561014c57600080fd5b610154610529565b005b341561016157600080fd5b61018d600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061065f565b604051808215151515815260200191505060405180910390f35b34156101b257600080fd5b6101de600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506106e3565b6040518082815260200191505060405180910390f35b60008173ffffffffffffffffffffffffffffffffffffffff166000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614905092915050565b6000806000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561031557600080fd5b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000007f444156204964656e7469747920526567697374726174696f6e00000000000000604051808266ffffffffffffff191666ffffffffffffff191681526019019150506040518091039020604051808363ffffffff191663ffffffff19168152601c01826000191660001916815260200192505050604051809103902090508473ffffffffffffffffffffffffffffffffffffffff16600182868686604051600081526020016040526000604051602001526040518085600019166000191681526020018460ff1660ff16815260200183600019166000191681526020018260001916600019168152602001945050505050602060405160208103908084039060008661646e5a03f1151561044957600080fd5b50506020604051035173ffffffffffffffffffffffffffffffffffffffff1614151561047457600080fd5b6020604051908101604052803373ffffffffffffffffffffffffffffffffffffffff168152506000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050505050505050565b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156105af57600080fd5b6020604051908101604052803373ffffffffffffffffffffffffffffffffffffffff168152506000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550905050565b6000806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a082316000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b151561080b57600080fd5b6102c65a03f1151561081c57600080fd5b5050506040518051905090509190505600a165627a7a7230582014bb95bdcac1b8fc55a809fdfd0a889b557b4961636d394ea96a13b5c7097af70029", - "deployedBytecode": "0x60606040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806307957360146100725780633c56e2ae146100e25780635db3f96314610141578063c3c5a54714610156578063f8b2cb4f146101a7575b600080fd5b341561007d57600080fd5b6100c8600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506101f4565b604051808215151515815260200191505060405180910390f35b34156100ed57600080fd5b61013f600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803560ff16906020019091908035600019169060200190919080356000191690602001909190505061028e565b005b341561014c57600080fd5b610154610529565b005b341561016157600080fd5b61018d600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061065f565b604051808215151515815260200191505060405180910390f35b34156101b257600080fd5b6101de600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506106e3565b6040518082815260200191505060405180910390f35b60008173ffffffffffffffffffffffffffffffffffffffff166000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614905092915050565b6000806000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561031557600080fd5b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000007f444156204964656e7469747920526567697374726174696f6e00000000000000604051808266ffffffffffffff191666ffffffffffffff191681526019019150506040518091039020604051808363ffffffff191663ffffffff19168152601c01826000191660001916815260200192505050604051809103902090508473ffffffffffffffffffffffffffffffffffffffff16600182868686604051600081526020016040526000604051602001526040518085600019166000191681526020018460ff1660ff16815260200183600019166000191681526020018260001916600019168152602001945050505050602060405160208103908084039060008661646e5a03f1151561044957600080fd5b50506020604051035173ffffffffffffffffffffffffffffffffffffffff1614151561047457600080fd5b6020604051908101604052803373ffffffffffffffffffffffffffffffffffffffff168152506000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050505050505050565b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156105af57600080fd5b6020604051908101604052803373ffffffffffffffffffffffffffffffffffffffff168152506000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550905050565b6000806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a082316000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b151561080b57600080fd5b6102c65a03f1151561081c57600080fd5b5050506040518051905090509190505600a165627a7a7230582014bb95bdcac1b8fc55a809fdfd0a889b557b4961636d394ea96a13b5c7097af70029", - "sourceMap": "80:1785:2:-;;;556:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;623:17;615:5;;:25;;;;;;;;;;;;;;;;;;556:89;80:1785;;;;;;", - "deployedSourceMap": "80:1785:2:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1568:142;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;649:518;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1171:261;;;;;;;;;;;;;;1754:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1436:128;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1568:142;1644:13;1698:7;1672:33;;:10;:15;1683:3;1672:15;;;;;;;;;;;;;;;:22;;;;;;;;;;;;:33;;;1665:40;;1568:142;;;;:::o;649:518::-;857:20;813:3;787:10;:15;798:3;787:15;;;;;;;;;;;;;;;:22;;;;;;;;;;;;:29;;;772:50;;;;;;;;890:25;927:24;917:35;;;;;;;;;;;;;;;;;;;;;;;;880:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;857:96;;1045:3;1006:42;;:35;1016:12;1030:2;1034;1038;1006:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:42;;;991:63;;;;;;;;1117:45;;;;;;;;;1145:10;1117:45;;;;;1099:10;:15;1110:3;1099:15;;;;;;;;;;;;;;;:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;649:518;;;;;:::o;1171:261::-;1303:3;1270:10;:22;1281:10;1270:22;;;;;;;;;;;;;;;:29;;;;;;;;;;;;:36;;;1255:57;;;;;;;;1382:45;;;;;;;;;1410:10;1382:45;;;;;1357:10;:22;1368:10;1357:22;;;;;;;;;;;;;;;:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1171:261::o;1754:109::-;1810:4;1855:3;1829:10;:15;1840:3;1829:15;;;;;;;;;;;;;;;:22;;;;;;;;;;;;:29;;;;1822:36;;1754:109;;;:::o;1436:128::-;1490:15;1520:5;;;;;;;;;;;:15;;;1536:10;:15;1547:3;1536:15;;;;;;;;;;;;;;;:22;;;;;;;;;;;;1520:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1513:46;;1436:128;;;:::o", - "source": "pragma solidity ^0.4.15;\n\nimport './DAVToken.sol';\n\n\n/**\n * @title Identity\n */\ncontract Identity {\n\n struct DAVIdentity {\n address wallet;\n }\n\n mapping (address => DAVIdentity) private identities;\n\n DAVToken private token;\n\n // Prefix to added to messages signed by web3\n bytes28 private constant ETH_SIGNED_MESSAGE_PREFIX = '\\x19Ethereum Signed Message:\\n32';\n bytes25 private constant DAV_REGESTRATION_REQUEST = 'DAV Identity Registration';\n\n\n /**\n * @dev Constructor\n *\n * @param _davTokenContract address of the DAVToken contract\n */\n function Identity(DAVToken _davTokenContract) public {\n token = _davTokenContract;\n }\n\n function register(address _id, uint8 _v, bytes32 _r, bytes32 _s) public {\n // Make sure id isn't registered already\n require(\n identities[_id].wallet == 0x0\n );\n // Generate message hash\n bytes32 prefixedHash = keccak256(ETH_SIGNED_MESSAGE_PREFIX, keccak256(DAV_REGESTRATION_REQUEST));\n // Verify message signature\n require(\n ecrecover(prefixedHash, _v, _r, _s) == _id\n );\n\n // Register in identities mapping\n identities[_id] = DAVIdentity({\n wallet: msg.sender\n });\n }\n\n function registerSimple() public {\n // Make sure id isn't registered already\n require(\n identities[msg.sender].wallet == 0x0\n );\n\n // Register in identities mapping\n identities[msg.sender] = DAVIdentity({\n wallet: msg.sender\n });\n }\n\n function getBalance(address _id) public view returns (uint256 balance) {\n return token.balanceOf(identities[_id].wallet);\n }\n\n function verifyOwnership(address _id, address _wallet) public view returns (bool verified) {\n return identities[_id].wallet == _wallet;\n }\n\n // Check identity registration status\n function isRegistered(address _id) public view returns (bool) {\n return identities[_id].wallet != 0x0;\n }\n}\n", - "sourcePath": "/Users/anatolyt/projects/dav/contracts/contracts/Identity.sol", - "ast": { - "absolutePath": "/Users/anatolyt/projects/dav/contracts/contracts/Identity.sol", - "exportedSymbols": { - "Identity": [ - 439 - ] - }, - "id": 440, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 290, - "literals": [ - "solidity", - "^", - "0.4", - ".15" - ], - "nodeType": "PragmaDirective", - "src": "0:24:2" - }, - { - "absolutePath": "/Users/anatolyt/projects/dav/contracts/contracts/DAVToken.sol", - "file": "./DAVToken.sol", - "id": 291, - "nodeType": "ImportDirective", - "scope": 440, - "sourceUnit": 289, - "src": "26:24:2", - "symbolAliases": [], - "unitAlias": "" - }, - { - "baseContracts": [], - "contractDependencies": [], - "contractKind": "contract", - "documentation": "@title Identity", - "fullyImplemented": true, - "id": 439, - "linearizedBaseContracts": [ - 439 - ], - "name": "Identity", - "nodeType": "ContractDefinition", - "nodes": [ - { - "canonicalName": "Identity.DAVIdentity", - "id": 294, - "members": [ - { - "constant": false, - "id": 293, - "name": "wallet", - "nodeType": "VariableDeclaration", - "scope": 294, - "src": "128:14:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 292, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "128:7:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "name": "DAVIdentity", - "nodeType": "StructDefinition", - "scope": 439, - "src": "103:44:2", - "visibility": "public" - }, - { - "constant": false, - "id": 298, - "name": "identities", - "nodeType": "VariableDeclaration", - "scope": 439, - "src": "151:51:2", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_DAVIdentity_$294_storage_$", - "typeString": "mapping(address => struct Identity.DAVIdentity storage ref)" - }, - "typeName": { - "id": 297, - "keyType": { - "id": 295, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "160:7:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "151:32:2", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_DAVIdentity_$294_storage_$", - "typeString": "mapping(address => struct Identity.DAVIdentity storage ref)" - }, - "valueType": { - "contractScope": null, - "id": 296, - "name": "DAVIdentity", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 294, - "src": "171:11:2", - "typeDescriptions": { - "typeIdentifier": "t_struct$_DAVIdentity_$294_storage_ptr", - "typeString": "struct Identity.DAVIdentity storage pointer" - } - } - }, - "value": null, - "visibility": "private" - }, - { - "constant": false, - "id": 300, - "name": "token", - "nodeType": "VariableDeclaration", - "scope": 439, - "src": "207:22:2", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DAVToken_$288", - "typeString": "contract DAVToken" - }, - "typeName": { - "contractScope": null, - "id": 299, - "name": "DAVToken", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 288, - "src": "207:8:2", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DAVToken_$288", - "typeString": "contract DAVToken" - } - }, - "value": null, - "visibility": "private" - }, - { - "constant": true, - "id": 303, - "name": "ETH_SIGNED_MESSAGE_PREFIX", - "nodeType": "VariableDeclaration", - "scope": 439, - "src": "282:87:2", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes28", - "typeString": "bytes28" - }, - "typeName": { - "id": 301, - "name": "bytes28", - "nodeType": "ElementaryTypeName", - "src": "282:7:2", - "typeDescriptions": { - "typeIdentifier": "t_bytes28", - "typeString": "bytes28" - } - }, - "value": { - "argumentTypes": null, - "hexValue": "19457468657265756d205369676e6564204d6573736167653a0a3332", - "id": 302, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "335:34:2", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_178a2411ab6fbc1ba11064408972259c558d0e82fd48b0aba3ad81d14f065e73", - "typeString": "literal_string \"\u0019Ethereum Signed Message:\n32\"" - }, - "value": "\u0019Ethereum Signed Message:\n32" - }, - "visibility": "private" - }, - { - "constant": true, - "id": 306, - "name": "DAV_REGESTRATION_REQUEST", - "nodeType": "VariableDeclaration", - "scope": 439, - "src": "373:79:2", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes25", - "typeString": "bytes25" - }, - "typeName": { - "id": 304, - "name": "bytes25", - "nodeType": "ElementaryTypeName", - "src": "373:7:2", - "typeDescriptions": { - "typeIdentifier": "t_bytes25", - "typeString": "bytes25" - } - }, - "value": { - "argumentTypes": null, - "hexValue": "444156204964656e7469747920526567697374726174696f6e", - "id": 305, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "425:27:2", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_3d75604157f80934d3965cbdf5676395ddaf5f92b8d7c90caf745f93d35d2066", - "typeString": "literal_string \"DAV Identity Registration\"" - }, - "value": "DAV Identity Registration" - }, - "visibility": "private" - }, - { - "body": { - "id": 315, - "nodeType": "Block", - "src": "609:36:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 313, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 311, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 300, - "src": "615:5:2", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DAVToken_$288", - "typeString": "contract DAVToken" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 312, - "name": "_davTokenContract", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 308, - "src": "623:17:2", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DAVToken_$288", - "typeString": "contract DAVToken" - } - }, - "src": "615:25:2", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DAVToken_$288", - "typeString": "contract DAVToken" - } - }, - "id": 314, - "nodeType": "ExpressionStatement", - "src": "615:25:2" - } - ] - }, - "id": 316, - "implemented": true, - "isConstructor": true, - "isDeclaredConst": false, - "modifiers": [], - "name": "Identity", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 309, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 308, - "name": "_davTokenContract", - "nodeType": "VariableDeclaration", - "scope": 316, - "src": "574:26:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DAVToken_$288", - "typeString": "contract DAVToken" - }, - "typeName": { - "contractScope": null, - "id": 307, - "name": "DAVToken", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 288, - "src": "574:8:2", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DAVToken_$288", - "typeString": "contract DAVToken" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "573:28:2" - }, - "payable": false, - "returnParameters": { - "id": 310, - "nodeType": "ParameterList", - "parameters": [], - "src": "609:0:2" - }, - "scope": 439, - "src": "556:89:2", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 365, - "nodeType": "Block", - "src": "721:446:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 333, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 328, - "name": "identities", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 298, - "src": "787:10:2", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_DAVIdentity_$294_storage_$", - "typeString": "mapping(address => struct Identity.DAVIdentity storage ref)" - } - }, - "id": 330, - "indexExpression": { - "argumentTypes": null, - "id": 329, - "name": "_id", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 318, - "src": "798:3:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "787:15:2", - "typeDescriptions": { - "typeIdentifier": "t_struct$_DAVIdentity_$294_storage", - "typeString": "struct Identity.DAVIdentity storage ref" - } - }, - "id": 331, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "wallet", - "nodeType": "MemberAccess", - "referencedDeclaration": 293, - "src": "787:22:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "hexValue": "307830", - "id": 332, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "813:3:2", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0x0" - }, - "src": "787:29:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 327, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1164, - "src": "772:7:2", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 334, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "772:50:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 335, - "nodeType": "ExpressionStatement", - "src": "772:50:2" - }, - { - "assignments": [ - 337 - ], - "declarations": [ - { - "constant": false, - "id": 337, - "name": "prefixedHash", - "nodeType": "VariableDeclaration", - "scope": 366, - "src": "857:20:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 336, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "857:7:2", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 344, - "initialValue": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 339, - "name": "ETH_SIGNED_MESSAGE_PREFIX", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 303, - "src": "890:25:2", - "typeDescriptions": { - "typeIdentifier": "t_bytes28", - "typeString": "bytes28" - } - }, - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 341, - "name": "DAV_REGESTRATION_REQUEST", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 306, - "src": "927:24:2", - "typeDescriptions": { - "typeIdentifier": "t_bytes25", - "typeString": "bytes25" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes25", - "typeString": "bytes25" - } - ], - "id": 340, - "name": "keccak256", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1155, - "src": "917:9:2", - "typeDescriptions": { - "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$", - "typeString": "function () pure returns (bytes32)" - } - }, - "id": 342, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "917:35:2", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes28", - "typeString": "bytes28" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 338, - "name": "keccak256", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1155, - "src": "880:9:2", - "typeDescriptions": { - "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$", - "typeString": "function () pure returns (bytes32)" - } - }, - "id": 343, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "880:73:2", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "857:96:2" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 353, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 347, - "name": "prefixedHash", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 337, - "src": "1016:12:2", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "argumentTypes": null, - "id": 348, - "name": "_v", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 320, - "src": "1030:2:2", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - { - "argumentTypes": null, - "id": 349, - "name": "_r", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 322, - "src": "1034:2:2", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "argumentTypes": null, - "id": 350, - "name": "_s", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 324, - "src": "1038:2:2", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 346, - "name": "ecrecover", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1154, - "src": "1006:9:2", - "typeDescriptions": { - "typeIdentifier": "t_function_ecrecover_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$", - "typeString": "function (bytes32,uint8,bytes32,bytes32) pure returns (address)" - } - }, - "id": 351, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1006:35:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "id": 352, - "name": "_id", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 318, - "src": "1045:3:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "1006:42:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 345, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1164, - "src": "991:7:2", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 354, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "991:63:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 355, - "nodeType": "ExpressionStatement", - "src": "991:63:2" - }, - { - "expression": { - "argumentTypes": null, - "id": 363, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 356, - "name": "identities", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 298, - "src": "1099:10:2", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_DAVIdentity_$294_storage_$", - "typeString": "mapping(address => struct Identity.DAVIdentity storage ref)" - } - }, - "id": 358, - "indexExpression": { - "argumentTypes": null, - "id": 357, - "name": "_id", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 318, - "src": "1110:3:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "1099:15:2", - "typeDescriptions": { - "typeIdentifier": "t_struct$_DAVIdentity_$294_storage", - "typeString": "struct Identity.DAVIdentity storage ref" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 360, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1161, - "src": "1145:3:2", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 361, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1145:10:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": null, - "id": 359, - "name": "DAVIdentity", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 294, - "src": "1117:11:2", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_struct$_DAVIdentity_$294_storage_ptr_$", - "typeString": "type(struct Identity.DAVIdentity storage pointer)" - } - }, - "id": 362, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "structConstructorCall", - "lValueRequested": false, - "names": [ - "wallet" - ], - "nodeType": "FunctionCall", - "src": "1117:45:2", - "typeDescriptions": { - "typeIdentifier": "t_struct$_DAVIdentity_$294_memory", - "typeString": "struct Identity.DAVIdentity memory" - } - }, - "src": "1099:63:2", - "typeDescriptions": { - "typeIdentifier": "t_struct$_DAVIdentity_$294_storage", - "typeString": "struct Identity.DAVIdentity storage ref" - } - }, - "id": 364, - "nodeType": "ExpressionStatement", - "src": "1099:63:2" - } - ] - }, - "id": 366, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "register", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 325, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 318, - "name": "_id", - "nodeType": "VariableDeclaration", - "scope": 366, - "src": "667:11:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 317, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "667:7:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 320, - "name": "_v", - "nodeType": "VariableDeclaration", - "scope": 366, - "src": "680:8:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 319, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "680:5:2", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 322, - "name": "_r", - "nodeType": "VariableDeclaration", - "scope": 366, - "src": "690:10:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 321, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "690:7:2", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 324, - "name": "_s", - "nodeType": "VariableDeclaration", - "scope": 366, - "src": "702:10:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 323, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "702:7:2", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "666:47:2" - }, - "payable": false, - "returnParameters": { - "id": 326, - "nodeType": "ParameterList", - "parameters": [], - "src": "721:0:2" - }, - "scope": 439, - "src": "649:518:2", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 389, - "nodeType": "Block", - "src": "1204:228:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 376, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 370, - "name": "identities", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 298, - "src": "1270:10:2", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_DAVIdentity_$294_storage_$", - "typeString": "mapping(address => struct Identity.DAVIdentity storage ref)" - } - }, - "id": 373, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 371, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1161, - "src": "1281:3:2", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 372, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1281:10:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "1270:22:2", - "typeDescriptions": { - "typeIdentifier": "t_struct$_DAVIdentity_$294_storage", - "typeString": "struct Identity.DAVIdentity storage ref" - } - }, - "id": 374, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "wallet", - "nodeType": "MemberAccess", - "referencedDeclaration": 293, - "src": "1270:29:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "hexValue": "307830", - "id": 375, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1303:3:2", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0x0" - }, - "src": "1270:36:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 369, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1164, - "src": "1255:7:2", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 377, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1255:57:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 378, - "nodeType": "ExpressionStatement", - "src": "1255:57:2" - }, - { - "expression": { - "argumentTypes": null, - "id": 387, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 379, - "name": "identities", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 298, - "src": "1357:10:2", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_DAVIdentity_$294_storage_$", - "typeString": "mapping(address => struct Identity.DAVIdentity storage ref)" - } - }, - "id": 382, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 380, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1161, - "src": "1368:3:2", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 381, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1368:10:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "1357:22:2", - "typeDescriptions": { - "typeIdentifier": "t_struct$_DAVIdentity_$294_storage", - "typeString": "struct Identity.DAVIdentity storage ref" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 384, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1161, - "src": "1410:3:2", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 385, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1410:10:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": null, - "id": 383, - "name": "DAVIdentity", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 294, - "src": "1382:11:2", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_struct$_DAVIdentity_$294_storage_ptr_$", - "typeString": "type(struct Identity.DAVIdentity storage pointer)" - } - }, - "id": 386, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "structConstructorCall", - "lValueRequested": false, - "names": [ - "wallet" - ], - "nodeType": "FunctionCall", - "src": "1382:45:2", - "typeDescriptions": { - "typeIdentifier": "t_struct$_DAVIdentity_$294_memory", - "typeString": "struct Identity.DAVIdentity memory" - } - }, - "src": "1357:70:2", - "typeDescriptions": { - "typeIdentifier": "t_struct$_DAVIdentity_$294_storage", - "typeString": "struct Identity.DAVIdentity storage ref" - } - }, - "id": 388, - "nodeType": "ExpressionStatement", - "src": "1357:70:2" - } - ] - }, - "id": 390, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "registerSimple", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 367, - "nodeType": "ParameterList", - "parameters": [], - "src": "1194:2:2" - }, - "payable": false, - "returnParameters": { - "id": 368, - "nodeType": "ParameterList", - "parameters": [], - "src": "1204:0:2" - }, - "scope": 439, - "src": "1171:261:2", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 405, - "nodeType": "Block", - "src": "1507:57:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 399, - "name": "identities", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 298, - "src": "1536:10:2", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_DAVIdentity_$294_storage_$", - "typeString": "mapping(address => struct Identity.DAVIdentity storage ref)" - } - }, - "id": 401, - "indexExpression": { - "argumentTypes": null, - "id": 400, - "name": "_id", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 392, - "src": "1547:3:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "1536:15:2", - "typeDescriptions": { - "typeIdentifier": "t_struct$_DAVIdentity_$294_storage", - "typeString": "struct Identity.DAVIdentity storage ref" - } - }, - "id": 402, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "wallet", - "nodeType": "MemberAccess", - "referencedDeclaration": 293, - "src": "1536:22:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 397, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 300, - "src": "1520:5:2", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DAVToken_$288", - "typeString": "contract DAVToken" - } - }, - "id": 398, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "balanceOf", - "nodeType": "MemberAccess", - "referencedDeclaration": 827, - "src": "1520:15:2", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", - "typeString": "function (address) view external returns (uint256)" - } - }, - "id": 403, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1520:39:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 396, - "id": 404, - "nodeType": "Return", - "src": "1513:46:2" - } - ] - }, - "id": 406, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "getBalance", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 393, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 392, - "name": "_id", - "nodeType": "VariableDeclaration", - "scope": 406, - "src": "1456:11:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 391, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1456:7:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1455:13:2" - }, - "payable": false, - "returnParameters": { - "id": 396, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 395, - "name": "balance", - "nodeType": "VariableDeclaration", - "scope": 406, - "src": "1490:15:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 394, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1490:7:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1489:17:2" - }, - "scope": 439, - "src": "1436:128:2", - "stateMutability": "view", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 422, - "nodeType": "Block", - "src": "1659:51:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 420, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 415, - "name": "identities", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 298, - "src": "1672:10:2", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_DAVIdentity_$294_storage_$", - "typeString": "mapping(address => struct Identity.DAVIdentity storage ref)" - } - }, - "id": 417, - "indexExpression": { - "argumentTypes": null, - "id": 416, - "name": "_id", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 408, - "src": "1683:3:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "1672:15:2", - "typeDescriptions": { - "typeIdentifier": "t_struct$_DAVIdentity_$294_storage", - "typeString": "struct Identity.DAVIdentity storage ref" - } - }, - "id": 418, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "wallet", - "nodeType": "MemberAccess", - "referencedDeclaration": 293, - "src": "1672:22:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "id": 419, - "name": "_wallet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 410, - "src": "1698:7:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "1672:33:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 414, - "id": 421, - "nodeType": "Return", - "src": "1665:40:2" - } - ] - }, - "id": 423, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "verifyOwnership", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 411, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 408, - "name": "_id", - "nodeType": "VariableDeclaration", - "scope": 423, - "src": "1593:11:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 407, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1593:7:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 410, - "name": "_wallet", - "nodeType": "VariableDeclaration", - "scope": 423, - "src": "1606:15:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 409, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1606:7:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1592:30:2" - }, - "payable": false, - "returnParameters": { - "id": 414, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 413, - "name": "verified", - "nodeType": "VariableDeclaration", - "scope": 423, - "src": "1644:13:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 412, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "1644:4:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1643:15:2" - }, - "scope": 439, - "src": "1568:142:2", - "stateMutability": "view", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 437, - "nodeType": "Block", - "src": "1816:47:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 435, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 430, - "name": "identities", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 298, - "src": "1829:10:2", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_DAVIdentity_$294_storage_$", - "typeString": "mapping(address => struct Identity.DAVIdentity storage ref)" - } - }, - "id": 432, - "indexExpression": { - "argumentTypes": null, - "id": 431, - "name": "_id", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 425, - "src": "1840:3:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "1829:15:2", - "typeDescriptions": { - "typeIdentifier": "t_struct$_DAVIdentity_$294_storage", - "typeString": "struct Identity.DAVIdentity storage ref" - } - }, - "id": 433, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "wallet", - "nodeType": "MemberAccess", - "referencedDeclaration": 293, - "src": "1829:22:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "hexValue": "307830", - "id": 434, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1855:3:2", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0x0" - }, - "src": "1829:29:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 429, - "id": 436, - "nodeType": "Return", - "src": "1822:36:2" - } - ] - }, - "id": 438, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "isRegistered", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 426, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 425, - "name": "_id", - "nodeType": "VariableDeclaration", - "scope": 438, - "src": "1776:11:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 424, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1776:7:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1775:13:2" - }, - "payable": false, - "returnParameters": { - "id": 429, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 428, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 438, - "src": "1810:4:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 427, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "1810:4:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1809:6:2" - }, - "scope": 439, - "src": "1754:109:2", - "stateMutability": "view", - "superFunction": null, - "visibility": "public" - } - ], - "scope": 440, - "src": "80:1785:2" - } - ], - "src": "0:1866:2" - }, - "legacyAST": { - "absolutePath": "/Users/anatolyt/projects/dav/contracts/contracts/Identity.sol", - "exportedSymbols": { - "Identity": [ - 439 - ] - }, - "id": 440, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 290, - "literals": [ - "solidity", - "^", - "0.4", - ".15" - ], - "nodeType": "PragmaDirective", - "src": "0:24:2" - }, - { - "absolutePath": "/Users/anatolyt/projects/dav/contracts/contracts/DAVToken.sol", - "file": "./DAVToken.sol", - "id": 291, - "nodeType": "ImportDirective", - "scope": 440, - "sourceUnit": 289, - "src": "26:24:2", - "symbolAliases": [], - "unitAlias": "" - }, - { - "baseContracts": [], - "contractDependencies": [], - "contractKind": "contract", - "documentation": "@title Identity", - "fullyImplemented": true, - "id": 439, - "linearizedBaseContracts": [ - 439 - ], - "name": "Identity", - "nodeType": "ContractDefinition", - "nodes": [ - { - "canonicalName": "Identity.DAVIdentity", - "id": 294, - "members": [ - { - "constant": false, - "id": 293, - "name": "wallet", - "nodeType": "VariableDeclaration", - "scope": 294, - "src": "128:14:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 292, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "128:7:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "name": "DAVIdentity", - "nodeType": "StructDefinition", - "scope": 439, - "src": "103:44:2", - "visibility": "public" - }, - { - "constant": false, - "id": 298, - "name": "identities", - "nodeType": "VariableDeclaration", - "scope": 439, - "src": "151:51:2", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_DAVIdentity_$294_storage_$", - "typeString": "mapping(address => struct Identity.DAVIdentity storage ref)" - }, - "typeName": { - "id": 297, - "keyType": { - "id": 295, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "160:7:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "151:32:2", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_DAVIdentity_$294_storage_$", - "typeString": "mapping(address => struct Identity.DAVIdentity storage ref)" - }, - "valueType": { - "contractScope": null, - "id": 296, - "name": "DAVIdentity", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 294, - "src": "171:11:2", - "typeDescriptions": { - "typeIdentifier": "t_struct$_DAVIdentity_$294_storage_ptr", - "typeString": "struct Identity.DAVIdentity storage pointer" - } - } - }, - "value": null, - "visibility": "private" - }, - { - "constant": false, - "id": 300, - "name": "token", - "nodeType": "VariableDeclaration", - "scope": 439, - "src": "207:22:2", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DAVToken_$288", - "typeString": "contract DAVToken" - }, - "typeName": { - "contractScope": null, - "id": 299, - "name": "DAVToken", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 288, - "src": "207:8:2", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DAVToken_$288", - "typeString": "contract DAVToken" - } - }, - "value": null, - "visibility": "private" - }, - { - "constant": true, - "id": 303, - "name": "ETH_SIGNED_MESSAGE_PREFIX", - "nodeType": "VariableDeclaration", - "scope": 439, - "src": "282:87:2", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes28", - "typeString": "bytes28" - }, - "typeName": { - "id": 301, - "name": "bytes28", - "nodeType": "ElementaryTypeName", - "src": "282:7:2", - "typeDescriptions": { - "typeIdentifier": "t_bytes28", - "typeString": "bytes28" - } - }, - "value": { - "argumentTypes": null, - "hexValue": "19457468657265756d205369676e6564204d6573736167653a0a3332", - "id": 302, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "335:34:2", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_178a2411ab6fbc1ba11064408972259c558d0e82fd48b0aba3ad81d14f065e73", - "typeString": "literal_string \"\u0019Ethereum Signed Message:\n32\"" - }, - "value": "\u0019Ethereum Signed Message:\n32" - }, - "visibility": "private" - }, - { - "constant": true, - "id": 306, - "name": "DAV_REGESTRATION_REQUEST", - "nodeType": "VariableDeclaration", - "scope": 439, - "src": "373:79:2", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes25", - "typeString": "bytes25" - }, - "typeName": { - "id": 304, - "name": "bytes25", - "nodeType": "ElementaryTypeName", - "src": "373:7:2", - "typeDescriptions": { - "typeIdentifier": "t_bytes25", - "typeString": "bytes25" - } - }, - "value": { - "argumentTypes": null, - "hexValue": "444156204964656e7469747920526567697374726174696f6e", - "id": 305, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "425:27:2", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_3d75604157f80934d3965cbdf5676395ddaf5f92b8d7c90caf745f93d35d2066", - "typeString": "literal_string \"DAV Identity Registration\"" - }, - "value": "DAV Identity Registration" - }, - "visibility": "private" - }, - { - "body": { - "id": 315, - "nodeType": "Block", - "src": "609:36:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 313, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 311, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 300, - "src": "615:5:2", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DAVToken_$288", - "typeString": "contract DAVToken" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 312, - "name": "_davTokenContract", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 308, - "src": "623:17:2", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DAVToken_$288", - "typeString": "contract DAVToken" - } - }, - "src": "615:25:2", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DAVToken_$288", - "typeString": "contract DAVToken" - } - }, - "id": 314, - "nodeType": "ExpressionStatement", - "src": "615:25:2" - } - ] - }, - "id": 316, - "implemented": true, - "isConstructor": true, - "isDeclaredConst": false, - "modifiers": [], - "name": "Identity", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 309, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 308, - "name": "_davTokenContract", - "nodeType": "VariableDeclaration", - "scope": 316, - "src": "574:26:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DAVToken_$288", - "typeString": "contract DAVToken" - }, - "typeName": { - "contractScope": null, - "id": 307, - "name": "DAVToken", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 288, - "src": "574:8:2", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DAVToken_$288", - "typeString": "contract DAVToken" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "573:28:2" - }, - "payable": false, - "returnParameters": { - "id": 310, - "nodeType": "ParameterList", - "parameters": [], - "src": "609:0:2" - }, - "scope": 439, - "src": "556:89:2", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 365, - "nodeType": "Block", - "src": "721:446:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 333, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 328, - "name": "identities", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 298, - "src": "787:10:2", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_DAVIdentity_$294_storage_$", - "typeString": "mapping(address => struct Identity.DAVIdentity storage ref)" - } - }, - "id": 330, - "indexExpression": { - "argumentTypes": null, - "id": 329, - "name": "_id", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 318, - "src": "798:3:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "787:15:2", - "typeDescriptions": { - "typeIdentifier": "t_struct$_DAVIdentity_$294_storage", - "typeString": "struct Identity.DAVIdentity storage ref" - } - }, - "id": 331, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "wallet", - "nodeType": "MemberAccess", - "referencedDeclaration": 293, - "src": "787:22:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "hexValue": "307830", - "id": 332, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "813:3:2", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0x0" - }, - "src": "787:29:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 327, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1164, - "src": "772:7:2", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 334, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "772:50:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 335, - "nodeType": "ExpressionStatement", - "src": "772:50:2" - }, - { - "assignments": [ - 337 - ], - "declarations": [ - { - "constant": false, - "id": 337, - "name": "prefixedHash", - "nodeType": "VariableDeclaration", - "scope": 366, - "src": "857:20:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 336, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "857:7:2", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 344, - "initialValue": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 339, - "name": "ETH_SIGNED_MESSAGE_PREFIX", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 303, - "src": "890:25:2", - "typeDescriptions": { - "typeIdentifier": "t_bytes28", - "typeString": "bytes28" - } - }, - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 341, - "name": "DAV_REGESTRATION_REQUEST", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 306, - "src": "927:24:2", - "typeDescriptions": { - "typeIdentifier": "t_bytes25", - "typeString": "bytes25" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes25", - "typeString": "bytes25" - } - ], - "id": 340, - "name": "keccak256", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1155, - "src": "917:9:2", - "typeDescriptions": { - "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$", - "typeString": "function () pure returns (bytes32)" - } - }, - "id": 342, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "917:35:2", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes28", - "typeString": "bytes28" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 338, - "name": "keccak256", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1155, - "src": "880:9:2", - "typeDescriptions": { - "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$", - "typeString": "function () pure returns (bytes32)" - } - }, - "id": 343, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "880:73:2", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "857:96:2" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 353, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 347, - "name": "prefixedHash", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 337, - "src": "1016:12:2", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "argumentTypes": null, - "id": 348, - "name": "_v", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 320, - "src": "1030:2:2", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - { - "argumentTypes": null, - "id": 349, - "name": "_r", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 322, - "src": "1034:2:2", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "argumentTypes": null, - "id": 350, - "name": "_s", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 324, - "src": "1038:2:2", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 346, - "name": "ecrecover", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1154, - "src": "1006:9:2", - "typeDescriptions": { - "typeIdentifier": "t_function_ecrecover_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$", - "typeString": "function (bytes32,uint8,bytes32,bytes32) pure returns (address)" - } - }, - "id": 351, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1006:35:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "id": 352, - "name": "_id", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 318, - "src": "1045:3:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "1006:42:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 345, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1164, - "src": "991:7:2", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 354, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "991:63:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 355, - "nodeType": "ExpressionStatement", - "src": "991:63:2" - }, - { - "expression": { - "argumentTypes": null, - "id": 363, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 356, - "name": "identities", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 298, - "src": "1099:10:2", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_DAVIdentity_$294_storage_$", - "typeString": "mapping(address => struct Identity.DAVIdentity storage ref)" - } - }, - "id": 358, - "indexExpression": { - "argumentTypes": null, - "id": 357, - "name": "_id", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 318, - "src": "1110:3:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "1099:15:2", - "typeDescriptions": { - "typeIdentifier": "t_struct$_DAVIdentity_$294_storage", - "typeString": "struct Identity.DAVIdentity storage ref" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 360, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1161, - "src": "1145:3:2", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 361, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1145:10:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": null, - "id": 359, - "name": "DAVIdentity", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 294, - "src": "1117:11:2", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_struct$_DAVIdentity_$294_storage_ptr_$", - "typeString": "type(struct Identity.DAVIdentity storage pointer)" - } - }, - "id": 362, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "structConstructorCall", - "lValueRequested": false, - "names": [ - "wallet" - ], - "nodeType": "FunctionCall", - "src": "1117:45:2", - "typeDescriptions": { - "typeIdentifier": "t_struct$_DAVIdentity_$294_memory", - "typeString": "struct Identity.DAVIdentity memory" - } - }, - "src": "1099:63:2", - "typeDescriptions": { - "typeIdentifier": "t_struct$_DAVIdentity_$294_storage", - "typeString": "struct Identity.DAVIdentity storage ref" - } - }, - "id": 364, - "nodeType": "ExpressionStatement", - "src": "1099:63:2" - } - ] - }, - "id": 366, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "register", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 325, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 318, - "name": "_id", - "nodeType": "VariableDeclaration", - "scope": 366, - "src": "667:11:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 317, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "667:7:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 320, - "name": "_v", - "nodeType": "VariableDeclaration", - "scope": 366, - "src": "680:8:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 319, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "680:5:2", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 322, - "name": "_r", - "nodeType": "VariableDeclaration", - "scope": 366, - "src": "690:10:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 321, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "690:7:2", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 324, - "name": "_s", - "nodeType": "VariableDeclaration", - "scope": 366, - "src": "702:10:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 323, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "702:7:2", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "666:47:2" - }, - "payable": false, - "returnParameters": { - "id": 326, - "nodeType": "ParameterList", - "parameters": [], - "src": "721:0:2" - }, - "scope": 439, - "src": "649:518:2", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 389, - "nodeType": "Block", - "src": "1204:228:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 376, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 370, - "name": "identities", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 298, - "src": "1270:10:2", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_DAVIdentity_$294_storage_$", - "typeString": "mapping(address => struct Identity.DAVIdentity storage ref)" - } - }, - "id": 373, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 371, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1161, - "src": "1281:3:2", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 372, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1281:10:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "1270:22:2", - "typeDescriptions": { - "typeIdentifier": "t_struct$_DAVIdentity_$294_storage", - "typeString": "struct Identity.DAVIdentity storage ref" - } - }, - "id": 374, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "wallet", - "nodeType": "MemberAccess", - "referencedDeclaration": 293, - "src": "1270:29:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "hexValue": "307830", - "id": 375, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1303:3:2", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0x0" - }, - "src": "1270:36:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 369, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1164, - "src": "1255:7:2", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 377, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1255:57:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 378, - "nodeType": "ExpressionStatement", - "src": "1255:57:2" - }, - { - "expression": { - "argumentTypes": null, - "id": 387, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 379, - "name": "identities", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 298, - "src": "1357:10:2", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_DAVIdentity_$294_storage_$", - "typeString": "mapping(address => struct Identity.DAVIdentity storage ref)" - } - }, - "id": 382, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 380, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1161, - "src": "1368:3:2", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 381, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1368:10:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "1357:22:2", - "typeDescriptions": { - "typeIdentifier": "t_struct$_DAVIdentity_$294_storage", - "typeString": "struct Identity.DAVIdentity storage ref" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 384, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1161, - "src": "1410:3:2", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 385, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1410:10:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": null, - "id": 383, - "name": "DAVIdentity", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 294, - "src": "1382:11:2", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_struct$_DAVIdentity_$294_storage_ptr_$", - "typeString": "type(struct Identity.DAVIdentity storage pointer)" - } - }, - "id": 386, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "structConstructorCall", - "lValueRequested": false, - "names": [ - "wallet" - ], - "nodeType": "FunctionCall", - "src": "1382:45:2", - "typeDescriptions": { - "typeIdentifier": "t_struct$_DAVIdentity_$294_memory", - "typeString": "struct Identity.DAVIdentity memory" - } - }, - "src": "1357:70:2", - "typeDescriptions": { - "typeIdentifier": "t_struct$_DAVIdentity_$294_storage", - "typeString": "struct Identity.DAVIdentity storage ref" - } - }, - "id": 388, - "nodeType": "ExpressionStatement", - "src": "1357:70:2" - } - ] - }, - "id": 390, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "registerSimple", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 367, - "nodeType": "ParameterList", - "parameters": [], - "src": "1194:2:2" - }, - "payable": false, - "returnParameters": { - "id": 368, - "nodeType": "ParameterList", - "parameters": [], - "src": "1204:0:2" - }, - "scope": 439, - "src": "1171:261:2", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 405, - "nodeType": "Block", - "src": "1507:57:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 399, - "name": "identities", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 298, - "src": "1536:10:2", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_DAVIdentity_$294_storage_$", - "typeString": "mapping(address => struct Identity.DAVIdentity storage ref)" - } - }, - "id": 401, - "indexExpression": { - "argumentTypes": null, - "id": 400, - "name": "_id", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 392, - "src": "1547:3:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "1536:15:2", - "typeDescriptions": { - "typeIdentifier": "t_struct$_DAVIdentity_$294_storage", - "typeString": "struct Identity.DAVIdentity storage ref" - } - }, - "id": 402, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "wallet", - "nodeType": "MemberAccess", - "referencedDeclaration": 293, - "src": "1536:22:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 397, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 300, - "src": "1520:5:2", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DAVToken_$288", - "typeString": "contract DAVToken" - } - }, - "id": 398, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "balanceOf", - "nodeType": "MemberAccess", - "referencedDeclaration": 827, - "src": "1520:15:2", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", - "typeString": "function (address) view external returns (uint256)" - } - }, - "id": 403, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1520:39:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 396, - "id": 404, - "nodeType": "Return", - "src": "1513:46:2" - } - ] - }, - "id": 406, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "getBalance", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 393, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 392, - "name": "_id", - "nodeType": "VariableDeclaration", - "scope": 406, - "src": "1456:11:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 391, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1456:7:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1455:13:2" - }, - "payable": false, - "returnParameters": { - "id": 396, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 395, - "name": "balance", - "nodeType": "VariableDeclaration", - "scope": 406, - "src": "1490:15:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 394, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1490:7:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1489:17:2" - }, - "scope": 439, - "src": "1436:128:2", - "stateMutability": "view", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 422, - "nodeType": "Block", - "src": "1659:51:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 420, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 415, - "name": "identities", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 298, - "src": "1672:10:2", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_DAVIdentity_$294_storage_$", - "typeString": "mapping(address => struct Identity.DAVIdentity storage ref)" - } - }, - "id": 417, - "indexExpression": { - "argumentTypes": null, - "id": 416, - "name": "_id", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 408, - "src": "1683:3:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "1672:15:2", - "typeDescriptions": { - "typeIdentifier": "t_struct$_DAVIdentity_$294_storage", - "typeString": "struct Identity.DAVIdentity storage ref" - } - }, - "id": 418, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "wallet", - "nodeType": "MemberAccess", - "referencedDeclaration": 293, - "src": "1672:22:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "id": 419, - "name": "_wallet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 410, - "src": "1698:7:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "1672:33:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 414, - "id": 421, - "nodeType": "Return", - "src": "1665:40:2" - } - ] - }, - "id": 423, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "verifyOwnership", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 411, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 408, - "name": "_id", - "nodeType": "VariableDeclaration", - "scope": 423, - "src": "1593:11:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 407, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1593:7:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 410, - "name": "_wallet", - "nodeType": "VariableDeclaration", - "scope": 423, - "src": "1606:15:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 409, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1606:7:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1592:30:2" - }, - "payable": false, - "returnParameters": { - "id": 414, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 413, - "name": "verified", - "nodeType": "VariableDeclaration", - "scope": 423, - "src": "1644:13:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 412, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "1644:4:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1643:15:2" - }, - "scope": 439, - "src": "1568:142:2", - "stateMutability": "view", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 437, - "nodeType": "Block", - "src": "1816:47:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 435, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 430, - "name": "identities", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 298, - "src": "1829:10:2", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_DAVIdentity_$294_storage_$", - "typeString": "mapping(address => struct Identity.DAVIdentity storage ref)" - } - }, - "id": 432, - "indexExpression": { - "argumentTypes": null, - "id": 431, - "name": "_id", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 425, - "src": "1840:3:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "1829:15:2", - "typeDescriptions": { - "typeIdentifier": "t_struct$_DAVIdentity_$294_storage", - "typeString": "struct Identity.DAVIdentity storage ref" - } - }, - "id": 433, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "wallet", - "nodeType": "MemberAccess", - "referencedDeclaration": 293, - "src": "1829:22:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "hexValue": "307830", - "id": 434, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1855:3:2", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0x0" - }, - "src": "1829:29:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 429, - "id": 436, - "nodeType": "Return", - "src": "1822:36:2" - } - ] - }, - "id": 438, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "isRegistered", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 426, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 425, - "name": "_id", - "nodeType": "VariableDeclaration", - "scope": 438, - "src": "1776:11:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 424, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1776:7:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1775:13:2" - }, - "payable": false, - "returnParameters": { - "id": 429, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 428, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 438, - "src": "1810:4:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 427, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "1810:4:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1809:6:2" - }, - "scope": 439, - "src": "1754:109:2", - "stateMutability": "view", - "superFunction": null, - "visibility": "public" - } - ], - "scope": 440, - "src": "80:1785:2" - } - ], - "src": "0:1866:2" - }, - "compiler": { - "name": "solc", - "version": "0.4.19+commit.c4cbbb05.Emscripten.clang" - }, - "networks": { - "1522233337963": { - "events": {}, - "links": {}, - "address": "0xc89ce4735882c9f0f0fe26686c53074e09b0d550", - "transactionHash": "0x79aca0d88559641cba68912d9f2e1a2ac6db5776d00815ab35a9f1451f308f3b" - }, - "1522241052538": { - "events": {}, - "links": {}, - "address": "0xc89ce4735882c9f0f0fe26686c53074e09b0d550", - "transactionHash": "0x79aca0d88559641cba68912d9f2e1a2ac6db5776d00815ab35a9f1451f308f3b" - } - }, - "schemaVersion": "2.0.0", - "updatedAt": "2018-03-28T12:44:25.016Z" -} \ No newline at end of file From f45f0121ca5dc6a699de9cea4353eeec03a7ad87 Mon Sep 17 00:00:00 2001 From: srfrnk Date: Wed, 28 Mar 2018 18:47:48 +0300 Subject: [PATCH 034/180] fix: vehicle_id --- src/components/VehicleBid.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/VehicleBid.jsx b/src/components/VehicleBid.jsx index c68a154..d0055e3 100644 --- a/src/components/VehicleBid.jsx +++ b/src/components/VehicleBid.jsx @@ -6,7 +6,7 @@ import currencyImage from '../images/dav.svg'; const VehicleBid = ({bid, vehicle, shown, chooseBid}) => { const clickChooseBid = (e) => { e.preventDefault(); - chooseBid(bid.id, bid.user_id, bid.price); + chooseBid(bid.id, bid.vehicle_id, bid.price); }; let classNames = ['vehicle-bid-card']; From 290c2d1f984f8453fba97c821a3a726c65eff4e2 Mon Sep 17 00:00:00 2001 From: Garrison Date: Thu, 29 Mar 2018 01:31:41 -0400 Subject: [PATCH 035/180] replaced sort_button.svg --- src/images/sort_button.svg | 33 ++++++++++++++++----------------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/src/images/sort_button.svg b/src/images/sort_button.svg index a347166..78f9e8d 100644 --- a/src/images/sort_button.svg +++ b/src/images/sort_button.svg @@ -1,26 +1,25 @@ - - - sort-icon + + + filtr Created with Sketch. - - - - - + + + + - - - - - - - - + + + + + + + + - \ No newline at end of file + From dd3350288e0a1d4493e551266a1034dd47ceec48 Mon Sep 17 00:00:00 2001 From: Anatoly T Date: Thu, 29 Mar 2018 17:40:10 +0300 Subject: [PATCH 036/180] fix: userId to lower --- src/reducers/settings.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/reducers/settings.js b/src/reducers/settings.js index 2198f93..eaea1e5 100644 --- a/src/reducers/settings.js +++ b/src/reducers/settings.js @@ -11,7 +11,7 @@ const defaultState = { export default handleActions({ [updateDavId]: (state, {payload: { davId }}) => { - return {...state, user_id: davId}; + return {...state, user_id: davId.toLowerCase()}; }, }, defaultState); From 31204a865133cbaeab79d98cd2a388bc14b4997f Mon Sep 17 00:00:00 2001 From: Anatoly T Date: Fri, 30 Mar 2018 01:58:17 +0300 Subject: [PATCH 037/180] feat: approve completed mission --- src/actions/index.js | 7 ++++++- src/components/MissionScreen.jsx | 15 ++++++++++++--- src/containers/MissionContainer.jsx | 11 +++++++++-- src/lib/dav.js | 29 ++++++++++++++++++++++++++++- src/reducers/mission.js | 5 +++++ 5 files changed, 60 insertions(+), 7 deletions(-) diff --git a/src/actions/index.js b/src/actions/index.js index daef2b2..6276059 100644 --- a/src/actions/index.js +++ b/src/actions/index.js @@ -10,7 +10,8 @@ import { import { initWeb3, registerDavId as davRegisterDavId, - createMissionTransaction as davCreateMissionTransaction + createMissionTransaction as davCreateMissionTransaction, + approveCompletedMission as davApproveCompletedMission } from '../lib/dav'; export const updateApp = createAction('UPDATE_APP'); @@ -23,6 +24,8 @@ export const verifyDavId = createAction('VERIFY_DAV_ID', initWeb3); export const updateDavId = createAction('UPDATE_DAV_ID'); +export const updateContractMissionIdMissionId = createAction('UPDATE_CONTRACT_MISSION_ID'); + export const registerDavId = createAction('REGISTER_DAV_ID', davRegisterDavId); export const registerDavIdFulfilled = createAction('REGISTER_DAV_ID_FULFILLED'); @@ -59,6 +62,8 @@ export const createMissionTransactionFulfilled = createAction('CREATE_MISSION_TR export const createMissionTransactionFailed = createAction('CREATE_MISSION_TRANSACTION_FAILED'); +export const approveCompletedMission = createAction('APPROVE_COMPLETED_MISSION', davApproveCompletedMission); + export const confirmTakeoff = createAction( 'CONFIRM_TAKEOFF', apiConfirmTakeoff, diff --git a/src/components/MissionScreen.jsx b/src/components/MissionScreen.jsx index 06d7242..9be0b7a 100644 --- a/src/components/MissionScreen.jsx +++ b/src/components/MissionScreen.jsx @@ -4,7 +4,6 @@ import gpsPointIcon from '../images/gps_point.svg'; import timeIcon from '../images/time.svg'; import currencyImage from '../images/dav.svg'; import PropTypes from 'prop-types'; -import Link from '../containers/LinkContainer.jsx'; import {humanReadableVehicleStatus} from '../lib/utils'; class MissionScreen extends Component { @@ -13,6 +12,11 @@ class MissionScreen extends Component { super(props); } + approveCompletedMission() { + this.props.approveCompletedMission(); + this.props.history.push(this.props.appPath+'/'); + } + render() { if (this.props.missionComplete) { return ( @@ -21,7 +25,9 @@ class MissionScreen extends Component {

Delivery completed successfully

Cost for delivery:

{(this.props.price/1000000000000000000).toFixed(2)} DAV

- Close +
); @@ -53,11 +59,14 @@ class MissionScreen extends Component { } MissionScreen.propTypes = { + history: PropTypes.object.isRequired, + appPath: PropTypes.string, vehicleStatus: PropTypes.string, missionComplete: PropTypes.bool.isRequired, leg: PropTypes.string, timeLeftInLeg: PropTypes.number, - price: PropTypes.number + price: PropTypes.number, + approveCompletedMission: PropTypes.func.isRequired, }; export default MissionScreen; diff --git a/src/containers/MissionContainer.jsx b/src/containers/MissionContainer.jsx index 5d64a86..639abbf 100644 --- a/src/containers/MissionContainer.jsx +++ b/src/containers/MissionContainer.jsx @@ -1,6 +1,12 @@ import { connect } from 'react-redux'; +import { withRouter } from 'react-router-dom'; import MissionScreen from '../components/MissionScreen.jsx'; import { getVehicleArray } from '../reducers/vehicles'; +import { approveCompletedMission } from '../actions'; + +const mapDispatchToProps = (dispatch) => ({ + approveCompletedMission: () => dispatch(approveCompletedMission()) +}); const matchStateToProps = (state) => { const vehicles = getVehicleArray(state.vehicles); @@ -32,6 +38,7 @@ const matchStateToProps = (state) => { props.missionComplete = mission.status === 'completed'; props.price = parseFloat(mission.price); + props.appPath = state.app.path; return props; }; @@ -40,5 +47,5 @@ const matchStateToProps = (state) => { export default connect( matchStateToProps, - () => ({}) -)(MissionScreen); + mapDispatchToProps +)(withRouter(MissionScreen)); diff --git a/src/lib/dav.js b/src/lib/dav.js index cebdd7b..da53c81 100644 --- a/src/lib/dav.js +++ b/src/lib/dav.js @@ -3,6 +3,7 @@ import timeout from 'callback-timeout'; import { chooseBid, updateDavId, + updateContractMissionIdMissionId, unlockWallet, unregisteredDavId, registerDavIdFulfilled, @@ -121,6 +122,18 @@ let davJS = function(davId, wallet) { }); }); }; + + this.approveCompletedMission = function (missionId) { + let dav = this; + if (process.env.NODE_ENV === 'development' && BLOCKCHAIN_TYPE === 'NONE') { + return Promise.resolve(true); + } + + return dav.davContracts.getInstance('mission') + .then((instance) => { + return instance.fulfilled(missionId, dav.davId, { from: dav.wallet }); + }); + }; }; export const initWeb3 = () => { @@ -178,7 +191,11 @@ export const createMissionTransaction = (bidId, vehicle_id, price) => { return Promise.resolve('Blockchain is disabled'); } davSDK.createMissionTransaction(vehicle_id, price).then((response) => { - console.log(response); + if(response.logs.length > 0) { + let contractMissionId = response.logs[0].args.id; + console.log(contractMissionId); + store.dispatch(updateContractMissionIdMissionId({ contractMissionId })); + } store.dispatch(createMissionTransactionFulfilled(response)); store.dispatch(chooseBid(bidId)); }).catch(err => { @@ -187,3 +204,13 @@ export const createMissionTransaction = (bidId, vehicle_id, price) => { }); }; +export const approveCompletedMission = () => { + let contractMissionId = store.getState().mission.contractMissionId; + + davSDK.approveCompletedMission(contractMissionId).then((response) => { + console.log(response.logs[0]); + }).catch(err => { + console.log(err); + }); +}; + diff --git a/src/reducers/mission.js b/src/reducers/mission.js index 4150096..2ef9635 100644 --- a/src/reducers/mission.js +++ b/src/reducers/mission.js @@ -1,6 +1,7 @@ import { handleActions } from 'redux-actions'; import { chooseBidFulfilled, + updateContractMissionIdMissionId, confirmTakeoffPending, confirmTakeoffFulfilled, updateStatusFulfilled, @@ -50,6 +51,10 @@ export default handleActions( return { ...state, ...mission }; }, + [updateContractMissionIdMissionId]: (state, {payload: { contractMissionId }}) => { + return { ...state, contractMissionId: contractMissionId }; + }, + [confirmTakeoffPending]: state => ({ ...state, status: 'takeoff_confirmation_initiated', From a6d61ccb20763024c0af51d809f5e09c5d17ec6c Mon Sep 17 00:00:00 2001 From: srfrnk Date: Fri, 30 Mar 2018 07:50:16 +0300 Subject: [PATCH 038/180] fix: lint --- src/components/SearchingScreen.jsx | 35 +++++++++++++++--------------- 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/src/components/SearchingScreen.jsx b/src/components/SearchingScreen.jsx index 6612334..223b9cb 100644 --- a/src/components/SearchingScreen.jsx +++ b/src/components/SearchingScreen.jsx @@ -89,8 +89,7 @@ class SearchingScreen extends Component { /* eslint-enable indent */ } - render() { - + render() { const { bids, vehicles, @@ -162,25 +161,25 @@ class SearchingScreen extends Component {
{stage === 'signing' && vehicleOnMission && ( -
-
-

Initiating DAV Transaction

-

Signing secure smart contract between:

- +
+

Initiating DAV Transaction

+

Signing secure smart contract between:

+ +
+ Signing smart contract -
- Signing smart contract -
-
+
- )} +
+ )}
); From c397ff9f99119dff15ecd50b47842821e8bc146d Mon Sep 17 00:00:00 2001 From: srfrnk Date: Fri, 30 Mar 2018 11:19:20 +0300 Subject: [PATCH 039/180] chore: compile --- src/components/OrderScreen.jsx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/components/OrderScreen.jsx b/src/components/OrderScreen.jsx index a9d9701..fa01f3f 100644 --- a/src/components/OrderScreen.jsx +++ b/src/components/OrderScreen.jsx @@ -77,7 +77,7 @@ class OrderScreen extends Component { getSizeContainer() { } - dismissDialog() { + dismissDialog() { this.props.closeWalletDialog(); } @@ -100,8 +100,8 @@ class OrderScreen extends Component {

Please Sign in To A Wallet

-

It seems that you are not signed in to
- an existing wallet in your browser.
+

It seems that you are not signed in to
+ an existing wallet in your browser.
Please sign in, or create a new wallet.

- Note: This is an Ethereum transaction that will
+ Note: This is an Ethereum transaction that will
cost you some Gas
); - + return (
From c9e2da16df45e21f4f104e4baf7c22cd811d6a93 Mon Sep 17 00:00:00 2001 From: cg-cnu Date: Sat, 31 Mar 2018 01:40:18 +0530 Subject: [PATCH 040/180] refactor: changed all the image names with underscore to hyphen --- src/components/BidSelectionHeader.jsx | 4 ++-- src/components/MissionScreen.jsx | 2 +- src/images/{gps_point.svg => gps-point.svg} | 0 src/images/{size_box.svg => size-box.svg} | 0 src/images/{size_can.svg => size-can.svg} | 0 src/images/{size_letter.svg => size-letter.svg} | 0 src/images/{size_pizza.svg => size-pizza.svg} | 0 src/images/{sort_button.svg => sort-button.svg} | 0 src/images/{x_button.svg => x-button.svg} | 0 src/lib/utils.js | 8 ++++---- 10 files changed, 7 insertions(+), 7 deletions(-) rename src/images/{gps_point.svg => gps-point.svg} (100%) rename src/images/{size_box.svg => size-box.svg} (100%) rename src/images/{size_can.svg => size-can.svg} (100%) rename src/images/{size_letter.svg => size-letter.svg} (100%) rename src/images/{size_pizza.svg => size-pizza.svg} (100%) rename src/images/{sort_button.svg => sort-button.svg} (100%) rename src/images/{x_button.svg => x-button.svg} (100%) diff --git a/src/components/BidSelectionHeader.jsx b/src/components/BidSelectionHeader.jsx index 6a484cf..277a74c 100644 --- a/src/components/BidSelectionHeader.jsx +++ b/src/components/BidSelectionHeader.jsx @@ -2,9 +2,9 @@ import React, { Component } from 'react'; import PropTypes from 'prop-types'; import Link from '../containers/LinkContainer.jsx'; import './BidSelectionHeader.css'; -import sort_button from '../images/sort_button.svg'; +import sort_button from '../images/sort-button.svg'; import arrow from '../images/arrow-left.svg'; -import x_button from '../images/x_button.svg'; +import x_button from '../images/x-button.svg'; import check from '../images/check.svg'; const CheckMark = props => ( diff --git a/src/components/MissionScreen.jsx b/src/components/MissionScreen.jsx index 06d7242..087d461 100644 --- a/src/components/MissionScreen.jsx +++ b/src/components/MissionScreen.jsx @@ -1,6 +1,6 @@ import React, {Component} from 'react'; import './MissionScreen.css'; -import gpsPointIcon from '../images/gps_point.svg'; +import gpsPointIcon from '../images/gps-point.svg'; import timeIcon from '../images/time.svg'; import currencyImage from '../images/dav.svg'; import PropTypes from 'prop-types'; diff --git a/src/images/gps_point.svg b/src/images/gps-point.svg similarity index 100% rename from src/images/gps_point.svg rename to src/images/gps-point.svg diff --git a/src/images/size_box.svg b/src/images/size-box.svg similarity index 100% rename from src/images/size_box.svg rename to src/images/size-box.svg diff --git a/src/images/size_can.svg b/src/images/size-can.svg similarity index 100% rename from src/images/size_can.svg rename to src/images/size-can.svg diff --git a/src/images/size_letter.svg b/src/images/size-letter.svg similarity index 100% rename from src/images/size_letter.svg rename to src/images/size-letter.svg diff --git a/src/images/size_pizza.svg b/src/images/size-pizza.svg similarity index 100% rename from src/images/size_pizza.svg rename to src/images/size-pizza.svg diff --git a/src/images/sort_button.svg b/src/images/sort-button.svg similarity index 100% rename from src/images/sort_button.svg rename to src/images/sort-button.svg diff --git a/src/images/x_button.svg b/src/images/x-button.svg similarity index 100% rename from src/images/x_button.svg rename to src/images/x-button.svg diff --git a/src/lib/utils.js b/src/lib/utils.js index f8c5d4f..4e2ee42 100644 --- a/src/lib/utils.js +++ b/src/lib/utils.js @@ -1,10 +1,10 @@ import randomString from 'randomstring'; // icons -import sizeLetter from '../images/size_letter.svg'; -import sizeCan from '../images/size_can.svg'; -import sizePizza from '../images/size_pizza.svg'; -import sizeBox from '../images/size_box.svg'; +import sizeLetter from '../images/size-letter.svg'; +import sizeCan from '../images/size-can.svg'; +import sizePizza from '../images/size-pizza.svg'; +import sizeBox from '../images/size-box.svg'; export const makeImage = imageData => { return new Promise((resolve, reject) => { From 11a489683c1f87e031a73d1778d72e5bee1697f2 Mon Sep 17 00:00:00 2001 From: meet_cric Date: Sat, 31 Mar 2018 01:46:22 +0530 Subject: [PATCH 041/180] update blockchain signing gif --- src/images/signing.gif | Bin 84819 -> 139586 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/images/signing.gif b/src/images/signing.gif index a0c821055bd943cf65ee8e4ad9a113ae056d8342..74eb9de0612cf4aa55108436241dc20bebdd7593 100644 GIT binary patch literal 139586 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

bcq=c1GiK{}?Hn&OVM_ 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

GZ=0@ydYEUGb0Q)9mPb^cMe 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

%SA?s-~yfSmfr?7 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

nu6xirf!uz(&xXb>pa3 zw2cxhg4>8SPNtQipd0w0mzYxx(pDmJPSEE!c({Lx^vwSUgVW>Jg>&OgGAiPKJp=t1 zAv`+!474N>SS7saR5x@JfVV@CP&#e6EKA$j3YBCIg)qrREaN7r^kaq)P01PI8a1%7 z=w<%+Iv!h;OCuTax=PTnq@Xq^KS_6xO{f zU_VjG74GX@YsQ90@Of!amN_3~bz*QeDQbHqO{BZ{jk}z*tVj$;?=t5IRXq4yehT@H z7DN@pr=D^(V2g!V(@|DK6!B*!BZKV(FVS(Rq&62IgBgw5Zq%oF8W?yP^N^2ACljl| zm9cihZ_yBV48NG}s>$bY`h<8L zE>B0oU!BC%!R^n4!WWP3Wa#K+aW&eeL#2oV%Z49yZ7MS2`8(x*1bhSZrj zG$pW-(H6|Y*i4UWD@d=}3rxwr_yMVrH_UE){PQ&`vk`Bz(0gND89j3~o{=^1OQ1={ zZHTF%LzXlWmW5zOr`aeTW{UMq4eH<)LAfg0A;|;R`He`mMGMlp_~K)=0uvi!xZ>W5 z?6htlOE!mxxY`0)?6)|ZpLTPjp=T_%%%+ijq^0HB0~ydTCbV2i-aj*1X0p3iwZhh= z&Pdd(hk5XMo0KGgt08XbTT#T+6t^}ryP6$K>s&PrFU_5cx7b!eFaXWPz&@0hB3W#-1PLmDw$lwuZY$L+QG zs+3%66RCMD2(F5$R-E-onZC(@u?LkRS3 z0F3^EgLCiH1?uo$*Iq+5$}@=se6m8sM>$f&>~3@iU1Nc*??7u!Kc=M+hO4$AF;J>x zqH(_>E3pr;h-IuC)Doma(K>!BtF=4Q58JLBw+NAiyW<^L+1|CXvgS-p?+J@)YSSIy z9DL`Pt^&%;HP_iYa8IWqBU5!shS#IRMTdis-Z8w2hnpluW>oR00;AmVT;4!wF{&%`0iGASg*Gm8pU(PUHEsUtSK6|hPrACh9Aputqu zb%+uBMz)Q}P&#zQMijG>Z=_-qKX5v5;YuY8MJ!e5qa7vua97QDwdEoLQW>;wyo=v> z$Qvh(Jm~IBlBYVw(4$0F+dCh^Or_GOBGq>?c_H+3A-za%B^RT*AnEl(1WPL0e2kkI zB|tKZ2OpB{iLu1I-Q%BRdN}N`Adb|joHHhOE!>&7%d(#CX-@c@e)IFJL!N5X~HdSR_YNXj3>gdIoXC+4CJP&R?iuS6Yva<~_aToVKA7bR| zxsHEc)K~@@pW!zYmdwh+X)z}pW%7v3bchcQPyJZgoR1G+^ecFM%=(Ln`zmD}fG86+ zJ-#jLW1nbkEtJsle&Ja;SxvRG(xHN$k$x>^R~e<;KZdVkr$lErFj|piF?+_!6HMaj z?bJd`wS`Q$$=!)^=bFrx)dV#h?b^5g z0d|oVHOnEeyY3ETIj5Dzd$B6VYWi;0jD*$XkeC4r9w>(NF3UE@Od?1S#!LQ-*V=)6 zzNl%Ns&Q$VzrHQ4Lk=4iM9D}x`*|l^7by8`*SGmH{phj9BXo*h=|_pS&Zr^}WwW32 z+gfd>ekdl$c@%;QVZVYRR5p5~;f$;KC9cbP68;{_?b?^>2JfmHus)@fHDb)_0M^zO zer1r*6-#3~V5Y&;mc!GE08wg~_1GgoQ^|!Mg9P)MM9GWAB6RiGV+MjK_2T59G)N5u zOYDdY>*!nzY+THxHDHN#R54bkmbhRYthhj^;#f%(z`W8prl*`wN*QQO5|M#(^i(!i zB;S$?kPZW4H?(;eyV=5jVi15}baDX!th(1Njfhc}0bo{KzQ}(nv`nsHJiukSe$`KU z2R_A@F)_;=ct#shCuNP;rTc00T8&jJ=7VVsz!-F^h4YgW7OZA<;j>feY4V%5;sqHh zT0~nXJ25gHO1AUOsxGgol&RvQySM>HLOpbVOL2S5mQ_XCRC>RXSjIktw#9wWjq%7t z+DsKpCkGl~kSkayKeQ#0g)=h1n!bO{XnklOa850Z3a1|iG~r)N0vfSG#8eah=OGB9 zRNLx6H;qe2sXAFSG%YTXDEW8`U(-7ZSq98W&u*xeM!)QeA@b_F)}3uu$5Gf4>M-?O zn1hZm{_|@F45uC2OD>ZhKYtmCxzT)5*dT=EjmM!*{;*1vj-B!w-B|(guQ#$l7in%! z)XD@dtmMfQ{)dqEymQB9lFA^=ZThy!-C3}*^zDV(aAVtiVPuAd@3WF&w6j4x9V>q^q5btsmkE;_Vab{-EO$cr;M}DPA*% z5naTP%C+@8shNnp-(&f%OumHg$|L5#J!u&u1?f<1K%7KVK@%YjYLySAM^|#v4LrhZ zdM_Y9@08=CW8B`KoR7&hK^D*yu$<>r^#|r2?(+ad2GIylvL z^I*j15jW#FUe~lKmV?m@E+YtohxoNG50jRSHn$~=3^%}0DEv?+3>qka#dT(toncBZ zoU(UUNR_qqc~eeOzM?!a*xf|f^+7>j<%&pf!b(@!=4Yw3Z$l66u4o_`x5q+b74ol{ zMC);tnVJsAAKWdU(z4~xbaS)C6W+4BoeO) z%II(GU71MP(63)dC$Ja#;r_Y0l81UkGsBKFSj?x#RPTpVoi9 zi7Qv1^(F@%Ux4=-u_^WBXv-1$xoA>;1NKfH?0r+U*rX{BXI5MXwDC?~fGujTOpfUF zNW*B3*MxQXv(pYtE$b`}FmYEsxdP`>{FntHdOhLK5~w#HNztyUbTbg0n^wPb&vp;z=pV5%q-@< zaxi_y!Ff@SY}kN|moZ{7N}19RR;`ec;Mb)>!Y2}2fPGI2ZcsCRu$&Lu+fC;HdqX*W zbmuHCmEl0yT?zJP9b`t*sBOd{HgAZY6L?;Mt%o`es>tsE%{R&i}o z`r}p-jn2|NVgMmjC!X`9db&vpLmE4nv{@oB5@nulSj~ATp0!^RyJ2Mvz3Kc#Out;C zNps{a`@dPpYU`@r+>BY_DfLvQu6u6eFjTJ8Rp91iG3A8BVPoTyInsTT7>y)R-<1Ou3}- zl>%sIHT3<(4v9x5MN11lj;=W`w_Kr0kc2gsr)3d?8u%1G6M7Isd>0QtQLy?DUd6Mg zx{NDI(>CE;(hlQnch^`l@#Ni2hEJAZHT#`D=8NFc!o?ZUS+qXSVx8@p;=@idsH#Kd zj$pLn3R^|>xXMHj1K$FB}_jS6NMOSbXJNypOwYo9`7lwsKVq)FwBzX{KyhO-151?E#|33H=Up1|CKxsT`=iCC}~PAY?B zzy!nw)Y9?39xvpijIkHiMrGzNd$O9PQ@MxA(C3to0C4m6qaxheQ+9k+R>2>9xc-oX z0=hs!Uk9}JP>2+kEM*e+8~bq7NX}c{)3sV}y#J1BB7;bDm2I@ zX_(rPk15#vEHq-rN-3Y%?4Dh|!_b9#N8b1XZGm)9DjMl;GPEc6AXh$VEF?^Mm)<_~ z;$_~`D~n=2GG2TM&N@&qtT|97FXJ=>q;`hL?=)Z|)U{{ANlmvJa&)NJf!~zR($$vL zuAdC4Xxyo8-qr0HaLS<(%Vyi0bTtU3x+AI8Wx`bKN@cS;wR>U1`nRh->#^9C03${N zE|bK?brO5%LB7d79@^Wx)+56A4=4~Gog8wuU7fii8;Z!1tGsjM_pww~@-uQD;sW~e zPPz%?JD-dd7t#sj0FjFuCOneGR!aNnPo9rd(j)97G8AR3G3|&aGl`9uw(7|vY&fGr z(sO7}K;oH7Uh@&$VhIaI;e#d2-1kcr-BThHAg5!ftb@q5wF<%(b0q;aot3bfReMI~RJS3KK<#8#kHO2vRO#nnWr(lhh-X#FJbGET-!R1#{7pGT_|x zQ@cr5H0KjcvyNl%AIF)RbsU~jB?YOoASQ;#2RXEuc*Sy_@f{JNK~F9*0$X=i%>x%h zRWs8TCM;{UVKlnA9swPPkuHL#Ei^w96I$LI?I)y!((A^!q70<3bC|4+_maM%+CfaS z*1hx4sfcX{`*M*2~? zp7~9JjI(;QcPD;+bXd5MvHd)UR_>0_#c?i`wey7ZHCx&3G;XjV3SZ53&i6gu3qTXP zd6&w|M41je^Y*G30ERbkw@}K&5Ew=amSL->WU@$?S38WpC3@gVgIL4XnGV_V9=3;utY4C*MI8MEB%_Rsg-~q_8>$*kIimE|+Aovi!rG`!JRLk+uC{=; zt5MxW;@N?S;PKJ}w9UoBd~$$)qVMVX}!Bhd@rAlB;^GVOAbXDIPc$#J>2T}Cc zNX`Vp%;Z8|B&L=RHRj!ER8Q*e?+Ab;4>h5}ssdn}b{$7UR5h*a_((!@tO9DrqutTd zH>G{o z9|6nO5%pQmjRh?~4_KOW>b_$&)xl@l^Rku0UypcwlOw>F^;*vK*7EX~%!7of4T>$^ zAgg9UOOg%bMY$h>IH1GJSPuv~#OM-d3kBapU4v81;q@><)NDAW&Y*Czs;ihBuQ#ke}Xp%{yo=Rs!xe$ZlP{y9y z8>QcenN+A*v9}}Q$A1c|1G<)x%fJG~5rLL+l$-;Y22xrAQDF?Blg9n42X#h%l5z zlSEFebgJ}M(HoWIshF?@?8~YG*&@ucb}378#W*+(xvWVpSC8Q>e@)jShqH8C+X2X? zXAy7R_1uei8L%c7I0R>trIeNTfU`V;l~p)9XBb~ghd0PiT%m7)3;wK!-J;Rt)APSz zjRSqqbbjLd>w5{FJU&VdrR^Q;z|TVI+IklmsU`F_p$uts1pr}Ys~L>%8Y$-SZ<94F zM@2)CXuRpd;H$x-vQ-#0!=zwOd2jAPh|_N4Fm<=gy9cOLUbT_w6A{E)_1A3BJs%xj zV2OP`WcOC4W<;hW)F_ogbK3`{HJoK{`FMY3a8?KSqK069=0WU<;K6hQ^UEW|r4h~N zY>hLTZViW&UrgJ|aR_-XM*^wU)t8@p{CZIzVdYX3GGq!pk0H7LY2xsr@3^hG`2a{5 zJaNI9)5MqG?^rgRzPqp8;)J^hfl9y-H@1CbXppUwbkM*1%dx~G_XB5$YGvW=t21AaopYNe5pqkbA2(Hqm}kNYyx{Ull*_(2-K~%6-Ycw#2u3BPYBW`nt%*V_- zN}282`JTvCSAg7X8iGVE zu6y46bay6Gt^9FdPCx>YttZ;!rChx-)0f~bZ--{iBb;Q3^v zc^axp2S?}L$()u-ODnB3I_L=Sr$;jNtQ2l<*zC&fHY`#QPr|^x`o*cEJQhJ@BbG&- zy}%x~3SWe=FH$hdb#+JxxRX-MB)(^OiD71yj7*|g=jKavQyvkHTR@Rt%rRsKFv zQ!bB0dL}6Onrn<>D8|CR~Vh*K?i5s<5Tsd10 zH=e>Nv|f4CLqd+)4P`=_5Ml=6^4hAh!~UrT)U@I3ho<5{Jor~FO`L67rlXIn|hhLRphMT5FFV|&xua-+=jQ`@xz9UfoZl&@`K$7?M& zx({u|s1j?{1#ZO`ywkgeQ1S=2Qy9+_#R&}y)if_W?IhMT+sEe<4 zcPs0G`_`))0oIWpw?6YjMJ(Cw6uLjjzei7`G^4lZ;cxrcESxAAi_~P2mNuYsp}M{U1Gq> z&SZlmYP6f>BdA+UES*VMk;`c;yX+p?jU^TdVDM*d77D1H1nd+vvN++FjcF=k&;3BGH~HaDXU z!=l@NTG#Gyo8NnY1q9rp~ASg+8Wf>XzBZ6FItKQe`D|R^S*z>oX_(;&w0){ z(=cGf3cS}q*Vovixa2%e?4xR4dhq?&UG)x$~#nj#fGujEwnDr!6j0?GsOJEIh%d9U^`;l{60_7<(I>&z>4T z?7`v6QyG%@GRGGiDvo}PAL?c|^)>8}M_f6)@Hz(1>TGoAVWdY;&=k1J?hf3=>=0bT zzvwlzALlW1F9tK*tu))P=9q^-4&jX(DFst>AC^>%k5Nzo;b4Po zs8H?$mg_M?@{l~tBHF0`0vWV}Y9slhl~tbP;fg`CLX##%Q9Y!+ojQLz0wG@`Yp*d< zZ8k*q*W2+Ln$Y?-ix}T5j1A0+{3@(irjHxXd^wua3;pFTvCi&K65mRP8($mKi~} z8Dy7h=NoZ3hLAdL=+GlCPUbZzDN=(V5kVcbH4J9_omh3E=N56FezIW6D@R5;Y9kfC^3d9RhL-`r?RtVK3bLAn48$}K%N0j=MsvzK$2uB5$C8#!{>@jTAhqCR zIs8Wa{*2CW#(jHb-ibQu+2^e<_fJE;vfQCDJm_1xOP24Uv^p2v+6PF~J_ya8MuqFk zP{LbtcE_~PX76B7wmEJ}nFsrFxtviapF=sur{P#M2{q4B(JA`X= z-QPEw_9hhUFgr0KPvQk@98<6DA?Jt3KmDmwGIzp5+MG7eSJo;w?BrJ#&wy-ygQ-$T z_u~BG9?Stj^~sW_)e)3@0hI_h7r8Defv`5+ub}BW98(7WgD9S+1$%=EV!Ci4$D4Hc zn5pficY)My1D8t0h}6?}W3Zn2#CTYN6aL_JLJQ&6Ay}!`;Pb(ji*@X2RH=cN`dJJ} z+g!Hn9&V4Vuy}@Be=RE%1(}R&jt(IW041-OR7q2t+icqUT-G(3-GL?m^ zG4e26QCS!(tyv@>exvEKYycPrCApB%fqkvemS)3J$)ck)c89-BrYzGCRRApMDUVX6 zVkjcB6eMl#UpttDn(U5}qIlb)Si(Hf0h|=WzmCZ?+rNWTIjyBCqEc6*-qHZx*_(F3 zM^y2Z`r5-$D}4$w(VFLCmCTeHa7it96*Nj3guGWV3Am_&77-A>pb37URyG+GEHrq8 z6zrJU;RYExoiZpD)?-!2*iyrCf!zz!iLr`D`)Ntd{47o;bkxtCTcI&Ce>w5!G;t|C z+01p%M9=53d9dOA3zJa_PS`l-JUq|gFfRC(ikDNT=X|k-boa+sjn-6jdcDkjyfhoX zd?och40{=htN1ZFNgy`sbp3kNR~aTBKH7{^%68)u?( zN9xIJ8va7zgs(sNaOggN{I;Innq$<2VViL%@_p9y%xWH7i7?2~g`*9ics_ytEWWP| zIa$j{n<@lPyAYE#wTORsW^2#heMIhjoi`ZSkDFT=`rWo`HLLf>u{Brg?^WuCom<7y zG{hkf+9Bp#Dx0roFv22(CpJ5Z?+89OB)osRbd?c;{4?eiSODgi4`{~}@nlJ7gVrQbPrMU44} zCD78&`t^h3_n%A+Y0s9hQWRj$nL>ufRqS<#f47A>-}X@Hg3cS=1>zXCP)*q-#i110z3!oK7ea#4`y)D;Mx%k!O7;l;)!^f zybDMD`TqtDTIxp%+jmKVsOh&;CFG$qN*57FTQAP$JY zg&dtcs}Y%PsaxkS0w=I_cuE3iJA7BMAAFs9Eq%kfUI5RTrnh^c4qWYyMZcn+z#GR2 z6s>7MW5-2#Q^lL4vB_BRLxpT3wpZ6|ZP>5IrZKJPcomJc)Q z$fg;WMwfh4eBmHK@U)fY<}XhODVVFb%9B)Y>@%L@27{Bc(Y>&tWeo?`N_cm=$m9;|2}smHVb3k(?|TKuv?k zT9;p;%b+fV!Du$Dk*(@;d4y>?pZmS?OCF<)4OOnr;oTprp=fo`UuC~!^OV#Gr9sXu zqoVfF+=(UV8u^pI20vGi9w&a<@@PLU)*Oa0lHR9EF>Cky&lXeAlr?|7?8MC#>rc3; z|BV+mikI21;04D1vrP`QI)G6#b0AjnWi*048D>u&!GLomzLDWZ6NylH5jgqHzj}YLy9}imya68z)N;0`)K>(S{8(e0$~`S2Vfq6%tKD0itgD#Yz-Bt3CuvCp7l8=}a)ELflP8vo5MCXn_De1Pas)-7rgSQ*SCNhl>M~{X? zi_B5c>Ev@`o;&t`BR_Vlx8VRtW2OAv?jz8*IwU6NtW*Fcah%$Yu zCEhRDBC^D90y|(p_ylm1C+STF;_`}^K~(UBHMCMYD!NnYO$hrYM{Smc#dz3wW=0hP z9%2lAL!GU^AbGWxN(q{^_ac0u|=MCXWIDtgPjygohw3NpV;3$}>bm!?`>(V*GE=c#qcrgnwn; z(6KW4%WQ31ua)y!$f#Z34)0d1@z^#iie#b!jby zpiM+iQc-kN@_qI&Y_O=9lpa&=n9%naF5_vDoDtjOdlv3gdEPds*T4*mNV0J!itt2= zgwM1mi!CN7IvwO+v*T#=XFN9Kz{#6f!m6fqnl_^?l`*ITlN(Vp(8}m@gYEW_jJYYZ z=t2yltUC{}i6Px@F|Hc}`sl~Yiq(5+w~F;pzamISxdhFgS7Oo~B~FPO43J*#rabdb zJj49uDt(tYO;MW)+a3zeKE@2#vVpYNMR*(@zOYGUA?RMtv}xG8cqgaotr z=*trM$30+o&=Uooxf+yO7%Ya@MaDmg%Fj7vhe7hRq=G2IT3GLf!+4a&y`n$}(AtVF!BnBLGLym6^H>z2cMPJP^e($cig^xSVb5DJluJrME!q@S*-Vd{ zs#5!iEJ3}VNR2tSMay5ScbK>lkL^YZi*t$`^cBZd=TK%1gfP2p<_;m>?X1IStfc{Tbki!SeEOQi)Dih6mX_lOhd)5ie_Z|e<`nxX_q&2K!qHQ3e-I~xGbdNn}p)( zSTpXIs}Epu)(;O13y3g;M~copE#hqQ)e6jP=GzgZ&4taiwYW;&Dn%d(Y+Jh=x~h>S z4*6MRIE(!78u8f%RHR}vKnxA?+7%>rr7xEN=ILvcxlI}mU0k7yS7!NB zaF{Gj#5l|??YC)VIaUxy;rH4JOW3y{4VA6dul_&EHV=i2i14Xln%DH8tJ>h{6fB?E0Pe-%7}-xM#bKllf-$| z!?`L(B<|T3L$JbRil{D&75X5vu_ll>Zmls|-6Wpg)?HN8d6`*S(Ey3Kztl6P$p@v_9RnpdR{O-0$H@KDnH>k6SzX7x}#l@+F%z;3yiA0Qdxh zmxA{Vc;R=_o*-cYq}&@~_F}UH&4WHd7Cucwi;7kc;S_Y2mX&!^iKlJU=b0$cKY}y{2eyphe`_S9mqS3$R8(JZe(CQiKce90*m7%ErqNA27O^YYn>7FmqzM-3TJK z%)89R&wV&z+|}iG$)BX^e>}@-@_j>EY#mEP0KLY1qL1zIoc-^i!$m2v^gjr4*#BLy zj8bA8>uC*IM|qisnEYp(9e04B_^*|Njh1^(>0W ziDrJlX0IW9dm40ewNDPZXNR~p{eX$g^B#xiHR!FmK}wCO9Fgh{s5m}JUHMG^ZzGs+ zGi+A{hII7W&1JByVDfgB7Dw}g#_~3D_ zrNPW$dDHy9*X9E(-ft6g#~gRCc}W|=LmHH4lcVy_^M$Hf_y{X=zzSjAFHtf+{OC3L zDv>Gb3ng3LdlLmo?=AR#xtVk7nP_KcWN|oBo zKxUr9xOC0KtyrS4%pfO-JN`I9oOR!z;AA<+SJPtqmyH>5+yX;ZeeA<~HMm*bNKKQt zw6#qZ)no%0j7PzyrK=}3H4JQ~q}M^60FL7D^Sy4zR8FItic^8W$5T>?2AZmv8~Vvq zp5EMedp-o>tBPLT=>Lhe)c=exn+y9V*8bCtrA7-P_b`K3eAX#(W$vRsd%b^C2cSlq zC^TS?tFJ-0DWqleZ6v2rB)sozWT|5NcPcf~PN#@i%NN5fLSGw#mIIVctcTom0uUPe z&UTHZ$GMYsPKoign(MHuLf4FayWedKFS|@!2a7$o>I3vLTM?c@rUoV#Qd~u~gx&N} zr6>w(X^>{7&pX1B_Y39*6V45`x_Z#XRiNZ!irCQ!vd@e;yjMYor%vu&zvtV>>9Z>rLHEs08buG5$sWqU^ z?tYxQh&i`%@%Af!8Bth1m>%8jUxpmQS_ov0k8++58X2oT(JEvS!`yGTa(tS;WjP-2 z{vfLV;?1pb)sS)V`5St(Os9`t%ol9G;UYT&mki8vT{rd%fBy&OxbN0EH#W6yA3D!sy=-UUa=iS z$kXiG4zMO+TMZZ8T;%6*jp(B*_l_l9GFr4X%sCj!dD%uz7mmy-)B3Z~$>=5rZJ(>z z7!QriP@Kzr6>Iv=RqS107G+IJF4HowWiHS4R%I?SHJ$r&o z@hHSRd$G*qr*A+C((s-PK_O*iq{6e4cvnIxq2gJ)0y$D$au2Q-SijiDH$RBcMkAL&yKA4bFQ6S}cB3j$(nJz@r9txc^qYr@_PNOklDLCa?mrC%Q%TJUM83M@jG+u%ySB$oaO`xxkEg-~QE{7^q#wNpfHrkwY5n8Pcsp zCBVk_vnjbP>T|OEZiyM6gc%!M%^t@5{NYrGFEg}y)1Gs{ZK~O5`RSvAS2LnCwBhf+ zh#2Jh7rKgEf1)eiai?acYMw?q{1(O{5ze=Qzt!|-?h4G{C6wH)7pAbJEy`>}Swl^# zg6*smJ$*X^Nm6pv>YgK1M%#181YG<@5SN(u*%*Swu+!hn-ZK0aVivwJE#0P%GT*cY z=p7E$$wj1t0gf3>^_o39)~`W9RYPf!%#bQiOG*}cc03#Pp236EmNR*ff{bzhjt464O!20aStRSqM-~H zSM==Utf}ywgVi#2tp8q9@a^b!ttzb{Q;Ra@-XiQLN82;THz-uD{JqfEAWM$5{(H&MbMVrCJ)h8`F*xHi>EpfdW**p{ngJ{#^Ko z=m>&Zv%oa7?u|Oma|lb!fV2Sdmw?nDoGJse7-^kzg6F49l+?)Lor9f+s2-o<7-^Hm zixB&hfruo73RH5QqysLx{G8-P|OD3*6S=0Q6X^5EqNfHtU zmw7JYEoU&{Lz5*~YC1XoRXDNGy^#OkLgqh7m`!(?wA5Q&hSGThp zN{J3_2AmZLzgD_8*+Ez)j_m^;_XO&ynSv zhgk~O70cV&u6}y4`En{s)J_XknLp2A6sph$gAwf9^@4({EhT*~={yu}=x}{;I3Td1 zniL5jbOi0}=-;lu5q6Y(dGy$plb;~;lu1$1Z#zWvjaP?OYp8cLRW_MK!**+@KlZ(` z2#tR$*F<8R2W0a#j~j$Xj!5<`XYRmS@!_R?#^gB+4S~kz;Z69z(5q;RY4l{}nss_z z_9CU;p1CHb*(S#R$mhHl1je#dYjnwk#WK!)JG_Q>?%jh_Mw));SZm*68jLKeInOmf}fyCh)+I+&7|R*ITFYA_gi5knZ{jW=eMYD1>V z4DMh-4kvEIf+kSK$!?kL$5ETc@(9tMTi1YWyAR&>+lNgD8SyQtTKTSb-xFa;#roBc zFiGmhv#0z1NHO5K4eK7k>WN@a7Z8BGj1b8*FLTPQIdf@Bv%dTlNjw6W0v?rck3Nl4$fwj+^dFl`99N?Qu*qYrA9C zXcpqBJwi2)|FzwC|L2_{g6iga#iGmXB|C8+DbDr{ghWBZjqv(~edwg~H*bsfe0~Dl z`Tg=Gt^ET$?NdsT5%KpCPcriTgRc?r1@g$|7p~;%7Cbi~@O=VRArwNKZN;w-T(y=1 z5}n$avczmMj;_W7G3+#ABmVf+QZE4dqcyl94Eizh^fo)XwdaEz{Avdw)F8Zg6pr(G zJ!XEPuXcm_VTuU`su#1Bu^!11E;pwPWC`+;4>D)wq&1O5x9jo<2>B1g^!S1Mu5I$g zww_(;4WMOT07Qk-K+Gu}4&V(saq8(1mMwo1;|f;c?YT0n+1`$TX0)6qr$XPyE?|yf zNuUI^Q*-UfhhF}C$xXyoX^>4?QMyxz@^=(Y4b~XOf+howDg%=rWT&)@0C=uVatfKz z2Akf-ex0yf$*A;eOpW;Pql3)4pL{iIHos>_R;n>`%YhWH&UuEwZ%w@TUw#n|`mBYb z_00d)#vKp}?SC(WlxHg^KxL%I7>MXbe_>={q)it-4fBfnYl$*nyw8i=#|1~dH)Jy! zvn_`i&z@Y@C>uC_4b-yn1?^amduNEe+G)L;b(uXg&-vlSGq^q!J);K=mG?_UA!ZYOQJ}@{nn4#e zxd=-gHtaILrc%BLojzum((rUZ5ddALFy0}ZNezIYsbXQOuSSj1C)0`tKSOo{>VXH{C%h=NJ@WK2PUCM zdm1tl&t~z=5Q#EFiZPbVd(Uko#ybr1BjA&Ra^?b*FoY|WyIs`u?HB~GWpv2NTrX5h z*1mZ^mm1YFl1qQOA+lEkEO6LrSZAnsC#iJf$urE=O;G;(QwDtx*Yj$JAQu%7Ue-zt>m)1TTwHLd- zbCc=oGtaHKuD>JToRvKN>vi2KJOw=Z{qpM&`InfKr}Zy<2GJwT5>d5-$+E9%VN4I6 zzsrE&e@TyuC?JnGtFox#3Oz0x^={;1X8DF}!Q*BxH@i|FWh1?W#_TRV@it7 z7uBeg!npM*O^4GnAg8EC6>E{aq0Bv}z7K3J zGsKdko`3WcYTx$uFsiN^dolxluaiDYDIrm*1w-H9R6}+HIcdm?nX&ItiJYODxQCi0 z&mFo)pgO=TPHxiUH7c4zgJTGNGCiKqHtP}=BUE~8aH*YFSWIz_*252LxSvaok%(}3 z>Lw{cklI;(P8KqtMJ@_^b*TH)D%~I}?v`x$uUCwXx+DK{`j1C{AoibL$~xvVq(!Z@ zD@~!(${VV`G}i6qk*d|GTfvM0648NV#G9%5S@a`D^-nkvBdyHf5Y^R&B)*Z?`P;o5 zfWbAV*?q6A_Rxw2X@B=d$*GhrXF982(rY&9nTS7#;NEZI2X9qjjW9_ZB9e|#?v8w( zn$%yWJJ4$-+1C~{4?of$56{c>-7oXPW)nABUXZMrn6Y~)<@pnuqC_Q(Vx+^PSMFV{ zGX@STtL?Cr@ILUqSy!H{H0-RL<(&Rmrjey$c^EDtDbGocNQJrN92uu>Xx|C z18e2{;rfH(NhgK+Y~_nIw@J5$6*8F`56_wRh@dF7&v3V`Djh7`=I|RoHP`Q4ozohm z98_lhbq%9qB#70TW9|jTEjn%Z%CaFMm=up1131?2m?I*_8^^!R zB~w|m#y33qIM-+frI2+Sq1b2+XZw;0{`S^a4Sbfg!6^dd)*$x0h8^F1EN2-*4&?Df zB?`{@^|@#PW3kU5*to)~aU344iPVxmE$A|s%sLq<)>*c8FOjTC9vaS?h9@rD{%wPV zkZQ5*h`+1rzqsZ2v87!5i~_7{5jk%?@qZ59ddpbP)0`iA!E-F{8n~sZ*Qeo9i3fM` z*64nm|0XV|lWQ6e`wh7H-E2;U4ec{Or*l${gG-Le9!)5gYI)L&c6i6cKlb2fb8hUH z{XHkm`&w#?1SCx3M1dTdypj=2sc3ew7}e?!R#GSS5K~d=8^Pew%|DN^-8Z7(S)n#q z-QXKC2cCBuWfz|SM)J(3?YYI8k+GVFAfXF~%sVGpweAOo2*^`ypA)?oftQ*nGnu+C zs2fYw`9MbA>CE}Fl$b15RKNNrH^mE|APQSVeoT?tVWfTNfNOZB_k7NGwMimm$sW1Q zL>89WdYW@Lq}doezs5sMbBao6IM-|zhBWEbDM;zmcU-La3a1=0$yM%EVM+XRheSfw z5(gTxku(01{6-TkD=GFo^6i>0f5?9oOWZ$~{a09#?iE%9MzKe;l*c_5&R14%W5?Gj zV*tJ68Lr%6l5>=ub1JnRr-@QIJoc{A-AI}qs&itCG69Y}8ozEZSFGA4!>=%uwAae$ zlUAh=Bga`yf$Bbq=tj|HnyS3pq0{*+EM8*Aa?Id98!KMiEgEdSQ^#5m-OclET}Td3 zInd?BuDyDoDMb98R?;>~kf!&ORYq(Gsyjhm-tY%slcN(eZQc4K^4-xbT(AG#OvUtb z)RmvO9pYp)Bj)KkwGl~9Wa8hzIBje3=TpJo&({YVHytAB7Sd?w6BRAC?XTwhG_7y7wNl*_H ze|n?|CNI5W3Tt^N!PmYtoB*mnuIB=gx(N(X4BqG01~d{y&HOVr+qIJodagRHz)lSDnl467YeJEd_Tz?^wTIhCCTpCHV%>s2z)3<1Xj z^PG4Z+-mQ6m$hLXh9)g@x`S1hejjAafi-<#+WoqskPyGYB|H(EaPM)umWp25*tkrX*Qmo8 z1LMDr{a&N&H4+P*l##c{j98`kX^KSUp$lsL~JbR|6!SN)qY;2CCX4waTg;7U zko#%7?JlW+AfDvDNLaA^4*4Q4)%!41WLo)PvlJXX)f>s%IPhaiv{;Gc8`n6-w4^9q zEsODK!4SyllftaRsIj|295A7aT%ji*P4iJ#zjI^qJiix%2TA#a*LCAwfTx`8WelD6 z9D5tbz^qj9kC8%{o5)p-iXcxG7*yJ+VG&~DXW96_RaWy0af4`6j%?qAv4ry^MIIh` zRa*n%c4$1ci94JK2lurdZB~CBG~~Bzsv+{nzsD?liLy@OfE!17L;c|q-hKPMR z^u}78!1}lmru8ELS#H(bZl8j^k&G=nqa&CJ_R5FtaS)Oj-kvdu5hiT6oQC7ZNuV-c zoc^jv%|%}+!7JPP%U25ZBB2D?XA&>*-!6E0&)qp)?HTM+C>y46gPD4`$75w|@|npg zP_&D{l3K^=`QF51Y#* zcQg0Sq!oUBfo0SkrG}}^`jHEf-(!Gh(@&o>)Dqs^nj?jVCGO9uYj2J|U*Nq$Ud9`b zhyQ-k)#z2+o%m7<)GR(Zou9A2o@+LR%!q`W=Zy8C!a}AQ;T=E+6Mn(77r(S(&5L(T z!vzh&S0d?~Pbmb$hI<~EyYfDDyA3Km|0YP6&S#4pKVO^S2VpP$%TcKt4|`ec6~p_fsS~hv?NNu|%Q3ZPOpC=L|To2sq%pwGyj++U}BKI~pxg1v?>J=EAzAKKaK!p-V1;M;JA zjB=Kss{XWWqjDsOSn?soO)l%Kdq{{Jf?cP8KZuwtTgal`fFLMLt4f^hBN8AmO&kz zUf5Vy!+LgFS7g!EMJJVQkKc@pU`Xs0bYG`&pN*U-eh-a+~D3w z<~4u#3`j`sCx1uD>zR@AM+xfxD3#bqPh->w=M-Iv-d3aiLF9KzQ*FdGWfKYxe(#Op zY>pNF4t1W*I;e>%ou#2p`#P_d*trhth9@2`^Wx^j!(LQmQ7g$=-B~p@O1cK2PzMk< z5H-}=Doc>sUGzCkhL+lBpWhWUm8ZFv9cMGVNv|5R5h`E1HWEZr-PFe*rv0W445nXfHxT(025_SF`(SGMWQv$`MeMm^~LP zKUW3=3P;$oao8JNA@Zhjzu?u|H`iJ@vNQwc(OVcJYinR7#nsx+4^AY@43PUA>Ge3G zntUMbUdFCeKYbq7XpyZDLEw+1B0{4vAZ=&}Ce%!GuU!mY@~-}B?TYpIMNoE8AJN2X zo1iUj1xB!w`Gw)uVudU=eLOn@^+xWWF@19Bi}(u$iG{->PdP{SHxq-tS&7jj`dXav zILO+VvJY_4R!l5jocSPLcT;#};@|?s8t$b!{FaG>23YJ<@DP-3nwCp`u(>S2E$0C^ zkf#N#(d3~e&nC_DrY9Mea!xD&9Asa#k+LdcN98kxw7{i}?T zF10Z6^(^;Z+zlH6QE0ZclNhLnixolFAYj3F@kW{0Z|5$Ff0LyWRKxcBdmzC_Cn;Gz zjB#^82==H&ICtWp84G33(r{C{4Z%kXsCgD*?V_ny5LEzq5nagI`X7nSytC2&%_&|&ftsd~a8GM{J6 zTw`z!>ydg^QUN?Ry91#eAU^xB48-i+OBEDYp)MU}z!)?%)DMlxx#78KxBX+jQ!;9L zDeqj0$xRK)D0-iQHJbPAnc@sJv)4xFEaRnBoh}0Q0inwG$m{H|Wy!9Tiq0-pTPB4* zO?^&sjk883PP$FMbff^L;1bl+H^OlU7?#e!bA z2@dyb+m@s?k9=d~!;+d^xbjOTEWXlruK_$~Z4Vinqe6sXV05Vkw;VK4!nUJ|uAtv| zLbhe%B91DjcOjwb;(9z|jZjpx`byC)?3dxD;hc77ureKO($f1dT-o!7{cVn-o}HnE+kFsVVzMF^6>ypjK0@lW#b)Q2 z;%jRVkSXY}mt?V7Q*GWd&>)u`0Z_!~l#rDnPBd(HU^>yeRJlz!EK)Y6ER9H0Rn}t2 z0MO{KbhurFBhN;ak59SGho(UhO4OdgB%eYXkZdU>gni`VM4cB!%ymLeEjh1I2^^sY z@@;9;E=D#|Gst}o*3We-?dz5;g@#`<*Y8NxPyQ9dvD`IAW_G*nS;lbt)|(SO3Jr<6 zYi-B-hqt*F?rp}Un8E9>QO(EUP`?C`sDWLR`B3Y;YcsW`S)8|CST}|G&quonPY=Rh zMN;YB)uu9CTZc2^+rSP$#O`dn0K{nIuPx$w7BB*TT#R^)-utmPjRkgOk_kkMnjDQL zYADR~rFdG$UR#l6N`nT@DG`lt8Uvl6JRDD9iRyzoT*&r71174TlhkT3Q8QI-CZ$>r zAku+?5maG=zoTXy=*BQ)%qF5$A@CaL`ZPQDkYe(li$2w1Q{b2SN08>(O?HEDfmGA8 zLhI+gFjP>l`f;K(q^p7FOoy;U|O?R-i$j`nTY}QHev^E`C~lVjfM$1 zsqfIpDf^2b<&wBL2yRpJP6*p!9DQIT?@7t6m}o!fR;n5akp=6}KejUjEO~_ndl4dp zFTtm4oUI6bSAb6U-}*oWM5#%WPLa5OKkfBjy=Q!G_qCd&0pESf<~v8YTFCcF>j%dZ zUXRZ=Z?oA)kFt`bYS3uJAB<1FYw$n(U(-Oms09f#`lCx`Vxo+&^pp)TwNy5n`x>F`J>Gj3rFKB(vQE;oo-}=Lf(j}DHnba;i zYVUCe`F&8Du6Hk8uoGk*K_J5C_>1}%V|7YX-3MY)+8fEu=0~uoK%y>eVhG@Omtid5$8Zd2eZo%Li__c;=V-SObMm-Z| zb^*xT2(%Mnu5bjKt?0xTlM>L71QXOfbv4eQvjBX;yjFy;V)D8HTzUyoQrDGbyXz`D z9HuZT(rtoyR*8o$XoBxFF29eOPz7G?DH$>(DZo!JEMG^LUV3{SBi&kg8qR32f77Vu zjMuC_MWqe7+q-Ulr`aQU6(2A8$Ey)_)Ik#*K#MrkXha~Ir!Lj~X*LZRlj`L6282{D zS75M5k@iHd5tkK!7j&0HQq7LBcL8?;XL1F5JBZS{U0GF9a$}Fth^4%-*qdyD2x;>C zq|Ua@caE|)=0$VKD3uI>sxr~8#(MN^N!n!Xahdav2@9m1tx;cblc!1i^-t`pWnz(V zV)GI?jwW0y@ld}14G}Q$q=sfuEEUfc{r>AeP9a98xjcG!@T_yumpgd*-B5gKUxp}G zQnB#}(Cge8G!AQS`UV8YIEyPFHEB~gWd?C#f#$Kfj>}l08$;C&%kJ!~-B9QLoIN{J zeTEnGTS0<7GlAEOoFgBss9~myMtCC+XVodDIE6PKez2_mo2lDyAIypWn5$SQ)%E7H z3VI@u%Tlj~aCu(5H)$3;y?ciqmlXf{^VsI4nkjZ<)IUi>mvUYRGBe&r4JX@P= zdV}LTSgy3)1!Tjh2s-Vy1brq5vu`T{%~(DXwivD6o2Hv(tHO)22LZ5RwuZLyev_Cv zYrFoKjMt$rStRmGJj6^rd}Z&4O32L-`XoKnFMcR+v5R?VN!s-v{Bn-K4k^i-FX==W z+y^MlG**+<+QVce)OK%!SR)1|>wwvS z$wGDq#ig@bxUF&vF-M}q_=*hkjd6L7w6_1f(m)laSw*<6dzK&uS*$g*^^s`AjeUb% zPJ0NA;VJZ&#hEWhb;J7cx>ln}5T5rPtE<>tOD-l~^13rhl3UOHwwzZn6-GPeCnJoQo>nBc#y1iAid*vtMF{eK<6 zvulPh(;%Zpi`sK~gYZ{f#+pB;$wkoYE@Nh(MmW6DOR)BJ*@+0%YBL%s!b3yrQ={Wh zYu!VrM?b|&HX&?&s0qOTY6sSMC{;*EKfNzX_wXYRZ%>@jAn(F8_jAkO!uylA`B&JE5^8Fu2L z0hAXepB7HV8-Rlc57>=lmGGleylLLq3CnYoAC@=H=m0!rubgtYC{Y#u=kG5so6yl$ z26y_;)GzwOje)UHSC$OD>AVis#JPjhS>|TDp|MCNo)Qc-cZupj7HxjWP}vC+jb4dz zP0;1W9076 zL9a9Rtzt8@O{3ViLn~gg??R1_@%sAF2Kd9wHK;5jFjLZ3*UO~2>BCQdhiG;7fPA|@ zPW=D4d(*e3&h`B}$y!NP=9Q2@2mz8X1&kObjfiBeB!r-}21La$7$spS~^_zBapm=k!sWMfao_OkwACn1tbk1KO$$K->IWM(pd z_^ow4`{DWY&vp%C&IOX}?5+`c_NT6Bu#89f`3A9&B3d3Uvv!2N~46ph2ZaB*tNCR*robUdsNK& zQ;7e2|Ux#X6q?(gHYTMh6^OQ0@hM zUZaD^DHlCR)3{u|G``a%DGcby!dFkZ4A=LDKY~4|R_E^83v|Gix`4-Uf8F&wY|x1* z>uxU$gq!d}GIkoNj;t>?^TqVqO%Cm?wzLl;^lb>#7O7 zU}AiDa}$1#H0aiH)M6UZS1-_g##bi=wPV zMSolZ(tMJ`>%3P~>S!X-XO|7{=^atq*@=}3+$h!$GQ>OihIww37|LGtI>n*Z)G9>H z{wM3L>jd1L;h_IzZCo{slAc=iXgWxtKGCeU*7Xn%2NXNM4~Sxtu1ra9x{a#!4w#GN zh(21Dr{?gI+nz*qYpyZu5l>gb;+mhB;>~08XbU9=-r%GbRl{f2nn-6q(Y|Os>#H5F zPWoo-cGFS`EK-Q**IsL?suumjPqi^IT2n)h;r)Dom~k*{3>|EMCA^-Dfi5kLw>0rWNNnWpf7l9jUyc zxALl!Q}rYoXnz8<)@Rh(E}08n*v*wqAdV2CF(8URwL-Y`_Z z?SxpxRbcx$DDfAp3Fb^9<{)0bqZLbx@Sws3jlPR5-KglJZ)nB5e z$ke^D`l%Yr?rN(CwAB|15H9R9nGZKzKWieX+C^(Fq_he|R$`L?w2(qRTk)=vJMR4T zeP{>eV&O-x4q9JcPl2zD*|2i4zMR3AV``Nklq5Sb;IPwzB$|?8c^tMo4&@r!aCulO zqf2I{=xn4t)Fket9qzPh4nP0HeID!CZGuvTU1Y@n{CSe(2z{5Ku=*N*ihd7^6AY~; z71g~zcE|16?;pGftT(9k)>H=`)WUh@d?i&O(7^|*Y*j(xY+a)|??LK3s^Fd|PJ?kO zld&B%zUg5WJMoCh8{es6U``m>y`QOSXa@cH8*NU+Y=bsQQ*~XPNRfZx#21R&+Xqo< zg8brGA9A{iTI{bE`kaLH-Q-)n!$&oMz1A+Ddns?-nLQ+3yss!_^!6Eb*of`LQhCeT zM$!lEv6)=7YXQK!F!o`SdhHF=lsK7t{;U~a5xvXzy=rZFoDTRXIMGU&UgZPSemk0g znKK3-b!r0T;k6MzG0U58QTE3IcuO&F{1WWB>Rj?%`gCEJV2ma^~p(VxhcMx<&HH4bY|Cjp9~3gGg2R z0u76Op93K=j**`ctu;#6t#=mviNrt&(1iihgIa*f%GQQ=;;mIQLfAoQ&;)Rr2?;4r zj<##Tln}e7-y>ED;po4ATj>`?tb-#ih{UkuYpQq?;osQCtM(c$VyT9m-GseJw?nVz zcHH__z?Q^*lG}&z&7}P9>WfWUgQaqdV(il_PkQbFOyQX~I0xz#iS{|Nekc|u!ow|dj2PzvLCLZ zY;i3#nW?W?($TXrqu#?Qy-=&6z>`?8Oh}2MHC573-_4oZzY}A9wPkgYwkOkGh9VgN z;&(r7Kp|t!rkVA{KHtWVxAD!VK6>>^`@huJOS{3#`odCQ1gaBK*V=3N*zoMkqESMX zK~k0z=o&RBfg%fZ43A|7C510sx(hBK){xkh-agmhk<8tM3HDq+PYrXoq*@1U$$JQz z>9MOedQm5t$eYab&JjiSRMO5uedEa2c1fte+%~YNN*Rf@NNwXN!A#0Oo_+6Q646A> zOugsQt<&ri@F(Y=>V+6ZOn?j&)vG9h z?6B<)rwI{4o3EYf=yL;IkYu8kg1UcQv7f~C8gyu9P36Ky`;X)QFd$3mcYH8Q4dTZcpjPGx5VeFCx@eU$P05 z;g5>bv^F1}8tE9>q)GQ-PCe4}&U*f84Wg=#4?d3sTn+y97LMP6zL)vG3+iQF@P7ux z=xz!#W>v0S{F1H15jx+rvTJGN_KqeTaUXv^$slYrV4z8M4BgyfxPGD@h|ctgJJ&Ml zLE2pQ+$~5AoHtP+%|g}ta3sm^K^-_%T_xf9x5u*8-TTNa?d1W3`P{Y2fYq|crco{6 z4|kSzh>UhpvMd=n+?z+*BUrqv0~crMfdrc-XI2!YqtMkQ**0lYi{%;{exk#`!8h(z zqGNlVJrW|R7FcELP{9N$O{Y>Ag8EDZ_SPvzk+FO2Ud}{*0=A~4ej!VmSPqSfH+GXV z5{JKYdDbq3KM7njh}8JVloV;APK|H*fb;{o?uFeuYi?QXz{O~Lg_;2E7RognhTk(+ z(SdCZ!|D0ev=3O~{4V&?ax4bn@((WeF7mN{Hv{~L8)PNVgw61!EZFju;9+2L{L>M3#UZ7^|e zBm7Pgyj`aPLSQbwB$a8fkeDO=Do8xhfly|na5q7E%GaV4A#O9Ifbb{~_xa;azuCDM zeM_uq3d>}6H=$J6=QOcjk4>zCBq<)0xXe{}mXIvO__9l73VjQ>yvWL$d((OAoy=O1 znoD)yeo=9yVlR#%!i`6=1S9KE9+K946UWzz>e{=;fSL&?? zX7=J^C;N&pRSAW*d8wuz?#6wUl$bpRG&#*Ax?) zTSPcjNtGH-rnwUhr_`|1;UN3dU8htf8WFgWlxVcAXT|iRzzaq=nHHE@fCDY;Zp_0I zYs+E;Fv~PRWiT&`BN(bCfYGr-f;ym9Y~C54YSI!(4lQ7epHSnsv?h^N`^hf}fiaFF z!42drk*%DtTyEKsu~TFg-l7y(pj<%%4x?YV)Er%#$jsm9kHxuQq6#%;J~CU&;xFiP zSr||jVa)Ge?#0C!O&G)Jrm?9ReC9SYXFv9Uj*N-hRz~5ZLq%MOi+PCC=6KC;;!Qnx zhWLgYW99QeL-9etq4z*RDY#82N$SKamrO740vifOEth6)gO_cl%shH%eN5SkSBpsa zzk4N-=l|t9W2v%arI3$}m7QdALXkYnP=KacDd5wUIQ)%+B&EDjT6)INdti!Wg5or` zYCc?+vT?Lj`~`O^rC>SdjF}k_u#?L5%{u$JV97+rZ~8}c25~whJm>p=cb<>ZjRiWs zztzbRl#4Qlb`sQ8QhsM{uJ?l;NKxwA^4s5{UdS&&kBsDb)&gwt=8~$r2P_bAN@svB z8oF7G$g${?u3N8zl!@LS;W(Ar#-lzN|JR+Z_XUi1NlzEY5xx~LjfdaAvN+IILQHzP zWWTF=+pX)#`MqmIVjTumqHYcLp%(I8zH#hVk=XtHLvF#)i{YrtYprc+n{L@o%cs^q zGIGam-?`VaIXqI+`}?x4OeIk=ezrln=jMl<P=3~AE{VM;67Aphm)E^d@>s8ONamhhws_*A(W;#F_`4;z zu#0zYaT6VP`-$;Bd3x|`SuP8E`vM*cN#&#JV0J59q>Rms14wfdUWvCT~QZZaH7wA68jm4{3z-ipJ~rR!3ZA|8gZL;h>R{ZATAks zS2q(2Jp)&_8A~!_b>bVOl+?E^f?31sR3~r6W5~f7A^+-sce(>1(GJg!cwZShITC#A z)%z_Nd(wscm;Bd56JfiH+!6EV;qf;`c`qU2%q`zwF)v-<2^%kfbIfc7$aKuz-@)F} zbO2t;g)-v8)2OHbs2r^LpNJ^2}D#YU6}z4z{$ z2)5td-0t}P-yoC7m&lyuqK((c>z8Wg9s+AWC#NnoIP?W?^q!(g?5=z@xG!{0v!>RM zICLK`Qu!W#Eb84a6@>E#7n*-15G7|nf6pwTf!zISrpxQI4u>&9WJQiDU2ny7`bBZgrpWAUw5p-{Zi6Ah{0rVjl`Lr~oL$2}%=ejJ^`J+a2 z>51V^!uG^W@$pi9Vktd%TK?!3Z^m%K;nL|c!q9spo5)H#^3-O<#+D=9oOM^Q2VpW|LYacz^&20biS@xC_|Eh|AxrAbG7D$kEMD)= z$Z-O)PeSe9EYYo`4S8)oHoG3kH38Sp^8tK>m-tA+djc5W1!Y- zBK78R0fm#}UEcnbx9R@HK)AuS_Q-#a6L>iBf9x2^~?7nGDYsgEF( zsMuWwd@Y45k$m<|hl@%MS|pj2i#3c4%M_`-v9wxC4CZtD$K}2=*t%+e(TLpFOJ@r8 zqN~1y!aZF0^|3uWG&T|xLmCU;(M+xp`NwAd_7+~X54VI~B-|4T(jcacK72!s{p>{9 z#fV?6*1dvd5B(|ZbA;o>x1$FP@!J3cw5Y%iHt2Ltg8f*P>^iE`8cFglC8U1?-bAnymSkY4J0#HuRseB9xJq`Sb1YPjVD`6EKko z&-%RW>FpY^pjEG-@5rLlUNq@E(wL_$qPOM68sXakpy^>PA={Z>s{9q9I9y%s@7t;%j;5)Ll%Jy~W@KYEC=j%bs;Pn^}!3puhIT-z&Oe-A^BXA}%G!Ju98!&TERx1qJOcMz>N&OoT%H9{2m=-|w~27tC9M^Mbr|Fi-IL+G|n zB)Bc&H-xm;&~pX&O^>#zkBievsYRn}FRtE;Lm*Ukd^yZi%*c9Wxe|nFi^E^>4gXKE zJs1BEyv2$YTf@Ky4{)?V$?FBVm+k`+W@9h>Vf{KR_IlWn-z+BVi(a-s@MPRsca55q zA8uBw@x)``%wPPP+-R*}uB6}bC$6Zoj#by%k9)Zu8K6cI>>KIYqAl{N_fIF*(};yWuV+iL zEX$!1%pW5M#rlk2ZowBJ+57boW&rx?u)$iq=+qD@TrP{MCgEYqwmeisV!BK3UfM?E>rFX%aP7;BdZ0qYI3#H_KY57w%fyx-dnOh{8^~;X2>~Yp= zMS}>S#a(^e7aeB6jNqL9DjZsDy5h8w1mk{c>Xyv$je3mbP(@F0>CFYTowH3Wtd48o zd6RneW$dMiT8HafFo~IVgwx zr6Y$W6#wNC*kSK8?Pn8$bDjJqQZN^lnWg2OVQ0uha(>N=QxdCilL5wy-fe)qjh zvC2#eWks^&oV0zJb;U7G70;PIRyx>-kAHYuAO3byc{3)A(Tiy2AqMj@K!>p+kCy5%~P=jasx8cl!g(&w+ z9MJ9!+{XREq-GNsF5EVl;SdX?VD>43A~A~14Ja=_xp4bmb(r5<(+8|~`p_NhoB9VT z>an3L@?Rf4GLg)0lpPdG%k&|BD(T~Ta%p4VQrzjdZ*R$hoIXEoM1$ccoUS`7ZDnc^ zPPF(##MHToPw{9n&s}wMR&t3=XwByDa?DD;!{DYrId&DdB(fE*VmuI=rD-HAD4BF- z|A?l(<>_rRLs*nAQqiM(2M-;a8iRYdNj76l;d^TgJ)Gi6xQ7~2(bJDB^I?&I5?@u( zN{sW@N$;H>_a3rzOzmL_jE=4=z+t0>D9GJJxQYR7yWn7{JLc1A4Lf<5|D?1S`;XiW?k*D&NvRiOMcgfjV$9TT+p1sddy-&bUj2kaKypEqp-sMEqH3#++ zl9(ci#?EB&xptEqczB(ht{;9Ghj5LPC>wt=$BmJNrZ;!DAuXg^XINi4k$CydgQWOm z*+-6iT@5+z`T2U+V9%b~pjvw_Tb)^h7ra}fd$@F?=Gg1&ZWb9Nbf`iRb94ClvUT4{ z=YS8|ns5L)GU>+!4UY*u)$P=!InKo@d!hY#_6O1I^e5M&OZVs0E?)n@Rw%@yV46+_tFEu3i|uSN*D#Jeq?ES zhu;d{&jKFI0ui?DY7iq_=G1#FJC)RVLyjXn$*?YFR+9H z?O#i4NX6p~KLBOz*H2Iq+{@}SL%Q>{D_$O^+5dCKef37G)ii63xr@E=nH$AL?mOqE z&tHFs#R$H#1H+=FxUyj3s=mm#d3L9X1?XX7&KucAkQt2)w@5)oA3js?(aWHOHg+13 zhb{`2r8yTDVWLbFKk@G-X>c!il^hRciUuEv4OH~7vDWy4Wu*Y0gNh*Yf5Ydw_YgiY2 zNVW}o)ts&C_eHG-F19>>de@`JTiumGDqmZZuZOm(GWz#F19sd$j zbT5T2`JW(K21km4KNYep6t+(+P6L95%@*NQk={yadJ5o~(wq%$l~7US)0WtucG)1Q z)QNCQ5%15(yB_H=+jL`=1&SHzh-7TYF%ZXy{!{AlD zUPGrXiaYy6?#Q5tEIR1$rC-V;?52=qBZ!1h7Z@BB^JIf)k4?BJ(|fEb{k1Qx;?+jI zzS+E=0c$(1K6c$FK#H94t%p=rQgpa|sSvSL@oJ}sQkG|3cjL~BrWks?6|^7LZb-SB zH#nouk*3Wt`H;1pOx{p~L1iBP{Msfg0(UWR<3KW3GQK#d+jPHTyQCiu^S9UnGr~vS zbuGBRZr-K`!$_mY0#dRkzcr5d-nd3a75(VItbZ2lp2cl9&PURy#P*r}y5^Cz#+C1f z77Tjv1sIdQyu5t0`Pn}m!MP`ze{0ens9fB(@`bU2OJ@B%Rc+VzKB($-n$C3ebNsl6L7^wvwc94`H}R z)Lk!Lvc7ezwt@KI0RMM~+9c^UhU)_C9#ziQ%d@OBeZJH}X&-gtNo%z}6PqXXVTy@< zL*70?N|TnjXkf%j7Uk%>k52EBce0`lCKa~cHCt9@SA;uQ9J?M3Op(VC$mOC>G#nnL zpHN0P<=yP`6<>C9WCN=V2T3x}_wZX2gUUtE#SASh!s0l>iz$cyt?NM z$MiW-xEcSsUY)4rZ@5;&qC^(y;+oWUiWIExJkWf@!kT3=HbuS;#WPbYZNtsz zerdGNi)0m=zN}_NYjkm~W(OlfuW{{IoTnovW!E)%1~Z`-{d%lbr@$uBFW z*AFjfdyKT-H$gKt5AXS98-^!>!)@w+kDlosE`<1xd%ZB5R! z``5OACx7}@zS_!7*V{4O7?%0$_h#xY!`bT88k(`}vFZZW5mtnr8Xf_^?qM<}GxFjA zFzW+WfYh!^#0)5j6-*P$gJ>SF9yb?oguIEO@-Lc z8y_|wCyAOrAMxI~ua+cmPayv!sIP@*f94F{$tuXQZlB7zP9S1YRjP`om?({QPSJpa z7{a~-feTZ{?-8&~^>^yUH$@KGZ}YJ;jkn8~70htp2H%>}ySg}u-?+N=2CRk=hItj1 z;}AU3=&q1xMt&d)5LjSq;bq}1QtKc7tzU2C`{ZAx&0Bx|44Ic( z+Q(qDCPos~UgTlm?6!@kX-SPHvL-aqXF1NHi%4YNkO>W*@;Q;Ue#;YK_D1Y=L(l4V zYlu51x-9tQL}MMEiqm%q3G<^5x6U1aaa39N($Z=uqM`oLo9hjZuGj6AzI%HQPOS5g zBKUYSsc7=TIntEZi6bo>HmyHLSW@4`k#*n+9|0$^uRCMc*(erOH+TR{aEJ*wbju7F z$H1;GQ^Korlo{CkPV|2%wSf=r<0@%k*gn-@N{yc`&bT-H!D;*)tz2hM0A3@!ghoOx zLi)alLJ?#h!L9dHPZesU&G;%yC{Ipz)q0U5R6uO=>OH;s=3vYbcS+pjW@Z*^jL^3G zsX3h4tFq!ox~tj#y49jzw*3>LMAwzey?QmcyL9Ys$qcXxOB^im;YZaL5@m@LY8Ui1 z?SVtV@0$ADHV`WPI@fjAVcE|Cew}C$Yc1B}(j|42zNU3ILS{|wK-f);pDQ(mQn=A6 zChwk{-9IwY(6T_mml9y2)OFVbSo1mrUuM2=!r{*iswyBdo$m?)n?hvuy** zDam{1Sm}xjTn+Tj%%y2i-#_d@RCw>QE>ecT0n*yGfoN^yf^Tu8rpE~?Sg}1PjWN%C zX}K~P^1S1qF7=wAcvGT%6740N3*|~WakO&3b>F2z9{4AEz(^SR! znAzS5!NL_!5aue^{mcIaGMa%sK0|Ra|2e3zcRsc-&$JuO4Y70l7sxQqS&h6P#%Zz| zA9Pk~N^)S1g;~wXOfJtE_jTFhql+6y=A0qbA0|CNuWLel)zpN^FN(|``mBq2&=q+f zQvGE!A*y5Nh%~QHWz0X3(F=vhWoND*G*FwUiImWF`Z6}j>KS?n)yL}H{Xwu@d z+V5K+G@(o?MzuC-&{#*@r+-*#*jnhD9byk-AIETyxI1=tKtRFp$m38UHo+ zQPs8C3NGA3;gGBSayLOX_k+h@R+1`>BXrcNtc=Lx1v{Hnyjx+G@we+O|1Lg2kv77E z%WoWeIDJ9(LeVkOd6@SBBGz?Vd;j#*!z{QV4G69v9wY_9 zWh!Fft_a6kKELKLcF#$@xS2LDfcg)!O;woVzWXiK(+_P7eT3W#kMQPK$gUg{b%!&(8={1Kb(TZcMg_7Pu3ldV+wANg) zL(~l=(6c~x;uGJ{Av6)jy*WJ~^2j!=!J)+Dabpi83^%`X$lR|NQw9AW{ZyRRFk)p2 zQ`p_FZJIb|#`Mc0T}`ZCu&lJiG23~iZXBE7x2~#s%w^~>z07GU*Fsv{PD_R<+n%)P z52U^7ZIEGSOE50_KlOo0O{d03Z*Oolsdq!qSNo!ffE|l@eEPOeWa7?O72XVVT*|wK z4>l&|W&uET1UsieHt;4M6wWW~w~w^gAX)+o)AESzZbnjezX=hyU8^8xKl=*J7TJTR zCAn?MTM1ZVuP}G`9Q*4!R&2=4dq<-VSHprKIM#Julozh7eA6ia~%pk(#ht`)0lh{MpG&m z?nu=QE?WCb2yMY1Ju((Q?3_X2u8-2KQ zU!umQY|HlaprO29M&2$hEX9(Ub0s_$+Esfn^DNnTh%+-)iWLq-@Ja%UqGr|im;I*O-Dz7o}9?E@!Z73s0W;ZL_ zs=RnKT&E{%UVoVm0o!X-V1}yT5Q#XYM;C`NeP%EeZauI`c`DIH(mIIsjCs?;2Z#%G z`c78xm|r&}+dsgfsD@0P^u?{;wH}{tyhI3|kc!MCK_iwqk!XZ#n94+F7ta)Fx=xRD z`VN59{_|%A67UjArIrxekoX2e1F7NEFSmFcTM!wodY{Vegw*t0#~!rGZ9DgV=ctGH z!@gIg$uqE-z6dA%PrYF0$@KVREQG14%RD9dW3fW?plc5t#%vt$q#q{JGjMhSPxe7`JOcaTRVWQlgDt&U38k%Oy@b!tEmifGE}EngfE z0o%2ojffYpX{zFqj!^`)M@!@vdFL;6(F1Frzft5|2h>G~kCgZBsShU-r77+EI`X>x zph!J<_nzQ`AYmxT)UxxwK7j>mUhUT*K(*h8&yRV%<`FKfb}q~5QroD5Q~Px<6p~;f z<-30{ZuZHy%|0lg9_T)=%DcLVEd0rI%@y8+u^OZw-NVIrVYN2HC}%TNWkz!a*Wgx> zeRJKNY(nV>{>}I1i>~{n7T7vrLQ|`X09Z^`LSVGpOa!($R_msnI=zOQS+A-H)C{SK zd9H{P`1BkTs1fz!%#Jr0J{9p?L2DPCMZJsN6b*7cVXC#yRI)S{o7T&zKcm2U`QzI> zac+GdJz0L&pWXcfgfa*#o~ePQrv4)U$1dKml6_GGl7hnxII`@^ySI3%0g;Lt3CcmL zbs_=r4?}Pk0NRJldKH(z65(EW*;x!Hf@gFfI1zN0v9k*b zLL9)^4rWdlUEF~ds}q0kPoow&Yu*i$LVf)c(N)3lYE8=|mC!8UfDx(=E+;y;Pu5=k}6Q#b8@JhXggmIlbro6Zrx z6bbbX`P=@Fa8!19kr7a>s}5p_##%n*p25$R?7w*CVLozgZh}bak~>}49IUWl^bSi6 z5JN7u8t|x{^_3N9HHq{O*_6525Ngi1)_ocI+mDS+EyNA`@)KRT7BLm9u+5v!VTV=K z+@IRq>Md=d?-R#{j7?_X2~@IoWy1^Ok7g2sOuF*-ygU(Ozv#WB7_0G>L`Eg5Id;guU-4_%T z^Tb|i%5aF;PaobH^&DmfUo0`k#jQv8%4YJvhyywgCT!R|kZ3=2zebpR#AR<0bq2E3 zPMm!y8053M%-DZaZ%9 zjkH^7g(dubr5-wyt+|=IsnGN5Uef;7#+m*P8Eo0kBf7lnp+DQ*-)cPWIW1(dgdog9 zTAppS^B1MOa9J!nM=N6o1dqw6Es%FVv~U*;l5M~6(IH))P4)cm6A`!&Eo+w(4@RBX zfKn9vQ5-1&H?UmE8pp%b9*^V#_q5 zB}%Tm$&94R*kNgy?e*b465V442tW9&_V|Nt3uO*dPNeCW1=%{T#ABw<33;kHY@Bbj zlGLy*3rsQveoG7~f~_V_n%;c8;<42ViSk+2(Ru>I;oYDDHC`M!bKJxR zt3ogpvJ$87VF{kVIFi^VKA*e1+k2-_~?YTGZ@7DE{X)J|?CK7YKbc>VSLLDYBq_3rShpo^e5_T-28cCtMvSHs>y zd=Ie$;~8vmGrsyDH7v)Z_Qd{3%nsL#;Ldr3H0tWT5%IVgYp5B5lA^vhaW=tpPPrWk zQyn8K!q&K)NVjk|dtH&~kXn609EY?nEg!7jA2{Ej?my?m?@yQ;1AU)^HN{KK*KomVByH#AD_f!E~_V+vl|zaa|rDIZ+Dt z629J6eT<~MN30K$KJi&nVY|spZ0orb$fgz`mYj#h>^ON zV2WxuIQ2<-Tyu|wn^5>!??@9;AyDre>V*rg(^w&^_;N$|7v`|nnB_iPCy$k$+Ocan zJY*s+DRaWjUDuDvQ{pBbp8L0kygRuux6kR(+7c!XQd@fuoc}yJaW<5*7&RXg^4kla z6ng-&P`4sg69-licqvKS=Wo&KAShOPLDz)Zj{D6@TH}jK(@;{<1UXq~AIcyu&nVty zOk1!o)L+W1ec(ft97P!%=#G21C@CQu96fres#+X7UT4SsY)iu|i$inASs9^rDce@q@3Ip81?(yk z&?N381v>(M0D`;qr~q7FKq6-rMLB@-Hlrtv1!8AN&$D3_MV6E2JxgU;NpCzU4-hkX<>+|Hju_A3=G#&{68PGH25HPF(z%)O{>}VPBJ5Cr|_~ zp7`|czfl|(Db}BRFzm*GuGt@<}nf&jKwi>1clX#Qn&CIj#V))**T2`(JPurkyIsr>>Lk$g;9^vb+QHwsF&k35hJRw7uj-yqmx7`z%nW4-qRmE5+RSn zR=Y#69HbQcL>6{r)z}H__XKg`XCM*4P2*%S*j87H<$b==G+U-HZD_B2&{G4mW|#0U z<#*Tm%`6VLmm=5q`A4lOM>>HjGD~Q&wH+8V5t)~zdPBI*L5x|(%F3}0>CT;@GMUUE~D&Uf+k%h6e4yeAMYM?`9!7q&1%+p)bT zRih_SG%2n;RJJP50tdl!@|D{V*ottz8&!jmIi+10aG#IG$kcU&QP>0WV~9Vuel06l zCikJdHjJwn3A!B10&HS6Gsv!R5YxvE9zsG$D~qIj;>5+WTT#54Hjah6Eio>G7nEYN zivN7PGq4D%D4gG`AFma7*}WR`u3?nK*(ZwR&1tpV=r!$)SuH(yK(SrZHcQe=o0+Wd zz;Pbx%$$X(DJa;@2xq3`y1WupdlY^)dI%Hm)y|kBD}#{c*H6-7qgHS)yy*riwpnta z9e5UnwQNP%X9}c^2B&|p3y1&cG?^nxDIY1?f+JSWN_7l-A9(i7poLs;Z*6&ut1e&+ ze>#XWfdQmR%CuK9WRh!rYmnT4Gqf1PIW)r>qsfDQU)PA!g!=tTppIi-}123ji!5MTE+S3Gz+kHNs@z_DI7GJZ${wQ3+CXwY5WO3 zhIrmxZv>!eSGeAPqRc3SSP@)y3HW^!oD(d{O3$87!Ew-6n?4yX8GAIau>bgFxaU}u zyUT!9PL5%wYuBL1#$-g=JK!c&9bu6nv8c2qeLt+Mdvd3A=*GdwIn9|Fr4b8jV%Ns+ zz3WXQ`U9_5cjuyz2}z#yM=R`6=?`!-zbSZiih{%b;IY3r2*gdj`sM!r%ReOJxY$be zKW{K2mbL-WLNfoqn=Dgd$XBz1u?ls!G^g#Rt@K`&E6}pr*lfrG`!?GAYY5{NYXsi|G#!=s(C1?&QhtGC*W(RDu zuRt#M-|w^lIgX+{#9}i?#TNA6c&M#8Y5a@$z_U(cy+T-GNc26ZHdh1jf4D?Vg#6v4 z@Rc2Xonk1QJGSI^EXJA0nwb1SRLpf<^AFD%ad>g>=QoGE-!bCt{K&j4IK<{K40a=c z$apo^fCqEo)q^`n3{JC+nKbhW>D@mq_>kaa{R`t8=<&Ksc`2rU44T`}q1ZBJ`@>s_ z95_kEzdES8PpI=RGkuG^)xG7oR+f_IA%a)GBS50PQP{*;R7!+sE;p(q>`2EK&db6z zQ9p+JQQNf9)uiOE8SI)dp^0+f|H;6(kD@Z?p*mqh26CWSQFXs&eTO0 zb59e)$3=zdes#L2h09kjx1LJ>b`(#^4V>ex4drZ%fOszVStYluu%Sg3Ls^X$TD%D3 zDAN$5qLujw8^K_rYW>j&eZh*i<2l{;sA7{FGu!-;9=S?Wc8S0#%K}xwAui~ca@Lb` zEqK-{q>0Q_I1g$ne=vc$%Y3NnZS8B}hm@iY9|4+ZgMUx|@^bkv|An@mjTM>b{}kEF zZ>%F!Spi}p4IN&Qsu~V^x>b6qSykts@OnyHT#F}2ltUlxFyblnf_6++@)H0Z1kv!g z`tVK?XQ^E3HWCY!6^X~f@?8#q3@Y%_a_?Q$LtFs+OFa@# zyb+i{Ez1=@5UXGyFkqM6fbZre7w+fFy8ccAt3a6lIj9o<9Zy##Gh#@CJi}jj4bPSx4E+}>&s4^uN5l|fOkv)NlB|Z}# zFda?f1;>;fWPcakj~AXPOLMFvt#XE-a}2(&D%x_rHqbx3Oe0|SA8AHnC$X4M`eUos zKR8@d14(Zp%T>Vx*;Q2fM?R9U5!-=~ggzLLrx#m=fz2K^oS{a+LqQD{%y#!~87Id^nLY3rZQ1#Ww+&(O%{g-s1WF#arAG~zu6WPqM*$ z%Bu%^BId&o{-2QoR;yCX{Na1dAu8b~jF##A)0a z!r)(K98&4_V8|c-7>ue9Hvpl+V|ksXs*w02^11m=H7G1MKHbXBOTQMBbWCa=4X>$7 z&Me@&mlxFVXpz}`c9F;qL)_tR{#T=*O&nY|&~YpwV=oS0;Ppgzfkb-zFNse)t##zc zpx0a5n+%8z62-%bo#6~9IA|imCk4BJK&p&>PpD1j(dHg(y(xNdqlypnIo*pp8IWMB z;-I`4|8-RaHDyFDN1O+Qp~*KDe;C)=6bZ)Mt9pxet=|D&uY0fsAp6ZPV7*wimDI|s z09KXQ4f(pgf5-jQ=4&$O>LfJi;D!h0hf6Esu(Vr#^d#1D^EKYJYG9SCJ~g7TPfvrT zK9xEk*QXACmIS^u&laFn!HNASbB4}^(im3_YJq?O5&iL_|1e zH{2-YK|#?l2O^@84Mi{XLfaiH2&>-^5kjqzr?%X{vLTIvrf<2*5JB! z5!^uPq_+12r?vSb9WDY_ z=%DYvTZ{UIoR;e8`|vSdSlYQPlWQ^$7NXqQUtFl>eV&H>30% ziQA`8!4`b;lRw;eXUnhZp!u*spRO`o(l!Cn^UPL_u!ALfS^kut%*c@4S<7H9m<`cE zVkK_VhU#1*z6FTL>9xLMMAlZh{ zZVM}#LKy~Vo18xSC25@(Nwb|hjYW*QhM22DE4{+qWz!_*VZ*C(P@PG;o9qG{;zm|h z5sVFgo45v|^#ODCu_sA^bW#>+JPaQVm|hX=+iuWs-9k|hpZDu8=e15lZ|!U(s{uC7lRhS!I9!szf^RuiD;18?K;V|fyKGyTGavc3>)Y4pmeKw-PC$-` zWF*_3oX?WW3bP2OPwVBw?L@v+dy~Sh@EQANb~D-a>X*fBEe^n>;yc`WKYydyX;l);og4Z5iJl zrzzc^t%j1P{eUiFS_EU3gE9krRs8BhN#0~&W_K|&t(o-)wY-5%B)I9tRf3I`VsO4p6~_sJh8$ z2f(dJ4ON=dm^Sw?2NX|C2Q0bL z=UFG_Qqihh=Q|Iws*P%s{S@s%ic$o4DNt+@f4|?1H(C@98j0~P*0ock4o++DV!1+? zB+))wpw!r4(MI>2>3M@QH8S%|fp8=5P?%OEQTd{dHZ}v1l?7g(_GmaWnVY<8%O1H@ zTZlbWX*xGEn8~3%lctG}PfKG%XYW40q`BFuN$h{W{vFoKxi<8y_hfqw*0G zY*@Y5bx9}akf%|E^GDtWLlCI_d2WP_ZeipTrU}YY48`}6UTPgAuvJ+h8HC)z3)(Pj zeZ>gc)C8K<1Dr}#lamjZ`b&_)Irs~P_zDb|97QfKqWxpHS*odnzd#c5%fZzQT1X>E zjSXUARhhAqwde|Ad*Q*AMlWA+=r^A<9zEACdJqiVcyJ}ZSjW2kH!&t!Q*4w}%m@6w zqrhc2j{;u#6cAM5uE z;8K^%cac@@0#CjtoW)uD1FZ=-iuoygc7y*pwg5$N_L?h%3KxG|J|N8?{eSc*7v@9m z1-q`1m1IFLk~2aK&{sGwAO}`#-8hLodde*#2QT8^gO^VP-uthfN^+eeT|G&67xs4Q zn-*}(iY2iec?g_cBVuZ(O`<4Nji_#y=)nq|+v9rUWs(>>=r*~rn+&;jCt<`bEjb4g zF9l3$wA0BXU8wNQXPRppV*dR5UrsW?=)y7oHD8F3v+XVg4?e?K+JDOA1@yLn zWzSv=wbZee#5mbWHQQ*s*f}S8S&Hx?0DLQ;h2>`m5-J-feS*x6?@IBUG|bKm?cPh} zcPM=%IB=Ef>%i5$3dLX=IWm4FkRpbod#KF z;?qp*sOgzQduV%HT5cre?^X$Wdd6bp?Kwx*X%q#H(d1|{X(qek5xmJuB-+SzXa5wtNd`O^4(&;JuIAiL{_h4*!Vgplo3O07V>g*AM2=I z%lphILOnTcVnY0oyjPmF6de>=osbb+2z0YWY+K5Bxn)2WzLmMr)jO#>CCZIUhf@Qi zk69L^x48n*hd76*VF}emw|tG3oV~U`+`bPr41VQ=ny}d~Sis}VUeh)^(kLO@=7=c^ zpN6t6CiP_orx#qoJ=LrDsPQ1rF8gD-f21XHUNlYA>*%MUrnp&E={667m@~Uo6~;)O zd@1v{S5Meo&GM+EjE7FA8?|@2S??0jq(55>rwz*cpLq_>;0S()6uYf3Enn1U&UxaG z=+Ag14F-IFk|%jU#(|aAoD^}l722qB33q2e=x6J2X|Y-KV9I&gG=X&Ia>>UAg?;ac z8{hwcX{N3M55PmsPzf11y(&mTxCwJ=4+i#oHH}bmuO(+!mccLER+bCP(#u+@`1-6F zOGKn>dk63fOGjZ;h^BC8^|)WVe?e9U{RHrqF_%Bjs>F8eX^ZnCaZa?Y^zA@^a`b_t zxsty&P)aZ|b;Q^Ccz%$oUFU|)oI_!Kl!!3rWDhQY$jIaRgznW+&7ALA;e*0N5?40y#kuq~7NLOc0q0 zO_t(d@SpIehqFi2=0FE*WDnS4N3+S&2rzdi?AX@p-mqiq9rYuI`?E1^d+S?)Q)n}0AL-LXY` zSiw%pm_^DRWYJcBH8a&P$&it$bK zh$QwLp5nJ!6rzjcsvoYQ-euYwvtJ$@ph2-(DB|Irpkf%|Xbby7`>U?<;nxynMS<1! zoX+?xH`D!fq@H`9HHC-0dI}$m6BFpEJubMg`Se6D0{!cmsBenS*?k6jr4j#MMyJ)@4zf^u&a@u)kpX8Bl6#-$TX&Y zLLj?h(!#GvO&00n*~->KP?2GPy{5PqdkS|M1`k8z?sybD;4zD$(PZqY<=jclQvy+| zhEqNNrkA-`SF3;dK_3Ci*eT;$k>KkkCJwG988?nNS<}T$RBNH#NtNd87llfQVii_? zMLAz>w6=i1{xQv5Q(6hTILjOXQBf-kt|{v2kev||;|f~C$AqI(lcJFFN9dNrJ$ zfSoI|wcafvxmXkY!s93DGBT2v$^y&&Iu1lQqZn`1PM82XH39y<2>KO_6e|05s=smX zivybfJ$Q=$J9zF$FXMh07bT%!?X%$g0fWY;6G;WB!ZbqPlp~U;yA{>=79TY`e#G-h z1)jrx08C5Fe^>e<9z?+%M$iJ#9)vnakQnDj<}^`1mJ+j)9}XzWreVNm=}OA2>v#J$ zi#ZGKmG_v<19sJXOMHg!YLg?1&d~VF6(;7AbjEnbuJU{vpIcDvrf?V+8U>qf%=rz} z#;~2Q3%NJnAO){EH`5EFD#%nC`Xzr)*XNsow3s7hW3}Ha9Ez}m@kdf1^#{Bty0iY~ z%}M0ht@CfyvlRCCm*vvJq?QiakNs!wQ-3A=p#61VCiIk%Oot-wIutGiM} z6t=dW*s8@{Xk)>G43fBaW-Ae%Hi++T6Rav$4`B$=;j}mr;lKRmH&z7#5Y8@exJ9zuLa5f1^FKVdl$fQ=fQ^8#{?L@)aQ5Yv82Rbn zx}pJ{BwSM85OYaurbR{#Hf;UE=n>Kc>bpkFXbKNY%5uz^)Mq)Ob;WHH&RT<0qIc>h zjFXclzPzP7h-n;QY-n-M*bKF~MJb4cnhjBnEumF)8LAb8{-kiJY?K)!zOhSV)K{uf zKpxW)f$H4ODtlv7zR2*d)Oo>yy8m!1O;t3;fc$uUgo&rI@G~>iGXkmU zFrPg>mY`dzF0x1hp|d6iQcOTy;a{Ov-j3OLn8qjNCQ|d6C!7qn(QtB|U>elObEZ8u z(LF3`eGaGIU}tHvaGxmM;XVaQ9!qetAqO%T$F4CBis#GVOCyCm1GXJ(_;uI+AR80O z+gSO3ZsUKAFZzGUM$8tG080bz3NLm3L+02ei?4-zRd2kQ;bD_$r`b*>pwKr*M&zc; zU>y_^otVT8;DZ`lD!bytD-uJ~5mGwSUYb(LZw{5zVQO`o>kzN7W!eYpn*eFX$~j7J z`AW*65=Mr{BM1$#+~`Nu-uHeFPQGD= zJ9N!Fywb0dd2P*#7!_&{uhCPeOmJwy%W~MYM#D$i%FSVG@4B^ItUS2Dcgl-aVX6)1NAC0 z?@Lu<_|Cb${txeoWqSiYSqYl)p;KuvX=zcV>3(2O1EonU-b8}gdJ*+Bb~+UCaaZ*q zTXHziO)XO06Yzs_=v$*MY^mc8F3ohI7TN1xH`^rJyK&p*G7D@E+v+r(q~?3dN%tuh z05*!s%z5sf(T0&fa&ZC&m9=~YM_HIxKQLe#@VBr`tj}Z z{#F|}nO2Prk9=l`E9=D1^Q3hwnp3BD-7ke!9 zcORz?i$j*>`YH5MqDi#IHDg91rbFESWAxL=WP(^q%)j=5KSy7U=a4)*LN1~mzDA}v z`%HeTVepV-;gffNH+V3sbWs$yBDV!$$RlP!>2(DXSxKq(Be<PT7ag0YkcW;gtQ1B)NTh!f^J`si++r zO+S2B4nmnqbzA#!bI)Ay==Ry<}C z;QQ++_~hQ9gbT@~1-Gmt7-!x7*@q7Guvxa~{S(``yL3k_QFjv?N@^i3(j7S-SauWK zl`A~&B&~zwsM@mEk6s;=<~dpiSC`VLz*_DPTP7PBPJqe`p9tha$?fV!Zs7>YSl>5! z6vCyD*|wjvseZC3HesO_fz{;zJ#SnAuhK()vw%9c;8x@7q)MM&Qd&F6h?xEapn*Jt zye?ES@XStX^WLB>+gw3D$jBY=?)bv4Y)?r&`b!flhA z8M}H^b|k)Z7-p`sja8uE-+9vur%$UJfgSmM9(qzwz$E#(sB-9JHX82-kP*Vd%D;g7 z1$%-IjYB1ek}6M&=Q9FY#^$Z%8m@k%wU{AVhfrus=S+iD{N_nJZK>x%gb?Ny=@HY- z4$DhpMFDf)rj27>r*fn*oUW}g-TG^iT6|UZ^}u%dDsZ1+hl-|aw6h!iR!J5*39_MnU>5AdVzjhtm+)^PyntC|bhxcy`dOok&6zzx4@ox!%}+_p8RU;#LMA)<^aj|> z(iFoqsGP)tUgLMX=m8h!D=q?Xf)i+_`JVp>*gcy@xsbX_rkkwRXAs5}pc>0ckO z8Tm;si(Q{dOrO6tz~dsKdI`I>ktL*Os~p75@uQ3K>;?ia36O&Ji_>4awmA5-m?+l_ zw(u%)y0|$Xxjrz?r}62f9#CO{NMpdyp`@+tnpMNcw` z=v5|Wcv;4e=R5ORne$ow4~-}Tyb$_j_7`mePtX9u^0t|gr_ z`S&Y>6lT@538&CuXn>(_M?93`A9tHTnF8{Pw&yQ%vL!asA*vUp`6<*k>M)~n`>chx z9Ln{J*~MxLU1BntPvwoa+I4~%Z7x)I!~G&{Ya0RblSio<>;2N!LD}A_`2l+P>_h)6 zSVUWE2wN+o0#C-1y_E7dg+td!5VKsjv#OOsCDWPRW?H>8K!>)DJRg@+?wZkxmlkHi z%WCaOKCz#xpR$NIv`tb35YluJ6U?fI zWD>m&VwJRYQVcA{3ulV4PdlSz+_Cx?f zM)WYwy|dT(OJ3o_3jj0XhS7K7pF3VF`ht7*$o1TtFxGe_t?nhe_he z%p_$Yq&MGdHUp*C`EY7xhCLNpuqWpTb>snK@RBh!aWPEqzh0r&m&Xgky0r`RaI)~f;lh?#Z z=ESQey&$2ghy#xu{J5CsH{WR!N zSW2;8g@T#7Y`SO8aB~<@NU};J+Og{ARVa3bm4bF0j?`R|5O~KocX;w7b%{%=; zYh$Q-P}ONs+N4TJaI+wBw#&|1?tF&;=z$T)Rxka<#I)$o(%@R1O&MZhf;RMI0~34Ou@YB|LK4b}xop6~Fjim?#tt}3M1hZ>Vyio5-)3Q?sQPo-Lsy+(y>19My zw(Vp>$wt=ug~zX^yc~|am;C6Np7pNY05zgJMT^eJ^CY}c)(L@tP8YCE3z^Yudk-DxU10OuVyOqdG7d@pBI%^ zm|KP0>A!(Ru}_!8vIn`#qGNZiJh<&+E*X;&`1(C|M48+F#>-qqqkMToYxDp>OP^o% zBL%k|{_sKk-_eUk)He=oPAI|@A8~~bQl{^t+C0YJo;%N+84HWbVP<4P8!D~>WO?jf z>>n?@`?8V2$)JywlVJs-6=wtw+kSNKdS4MW%bVzVW?0ApQ5`Giz<%v7_fIBl5EN~G zU%D*;-Yk-gU@zsM8K%Jl_uJQKq_UEe08f-~)so}?^_G_(%|tv0LYW=wZ1)RG6~ZLu z_%-A~@Xdj^d(`zqT-4Zx&SH-#x?fT{R|KFa9l~~oz=(IEQHS`RlBews(s%d z>yqt3bx?$>>hzAB)(&yfFiRjzgE#oE8mIEs12sULn!N@ z3DxO%{1_A}4JIpx4(8m`n=n`2$@nNcX@mF2=xJg88)$_`bC|X?;4rB@-wi}=%kJv| zJ9LMnRX{0W)qL!GW5tV)w-zlL6-tqB4XR#k;o)VfacE^O!yS*#-0l z!aZniM=_f*UKo6n#O>rfg^FN>KuxnB}%D+{`yqUTBDaC)n=KD zelHjj!Y_ThrojF8QwLXM+%Qe7;j0irh4R2QST2KVabZdg1u*0f z!c9Q(+hoam;hd5B3~Q^4!q3fe4bT7{#T>D*I%v*|+!UaMggf(`b#$6}fS!OrUefqQ znc5w>$L`%?2%8!Z#msrWH|NPJ!E{2a|93JFvAn ztXhxOsBO}{GjESNLRq!8&%4R46OuFU~9l&z(%3nx+e;%3t$r6qH*OkvM zbdg7jp{tczd@BcZdCr_zufKt_mi6u2;Mq+9KZUxQcOO30&8?ft=+R1L` znPr0%4ed5;rWG8S^Bueo_mU<&9y}-r@A=M2QUClVl~)p^0L1;Qz<>bhG2g<_;$Bi8 zwqy!xMYvMB18m*|1~g?GfzAxw* zM?6$$DVFYJ>s5i=mx^Y(D0IHjF-R}6k#?D-OtRj-1Phwa%V$mu{k1l#50hxq{3bXr z_^H|tY;Q;D-E8rcPtX|;4G0=f`>B5kt$}g$>HWs%q?(U+(CGSp!$vxpeoKX}eN^dW z>^2yo6U?{JMH)eIt2KN<-vt3ez2}4?6v;|Nn5lDqUl3|`(dku^*4K49of?dgZLg#V zs|;!e>sI`%m%FWaqg#KUFg8lVYhW8==Cxt)sW{Bo*crZWc1--^De^VET~w3{E#cPM z82G6h-L#5(sMV3lOty(5oN3N0b5)B-H7Qy&EWZBRvfeS)8+@nvMeBmO@$&wrlTc}KZ%eE;tT%82vcewE6s7?26*g)fPENL4gHC0$)^*-~&k zJOzJpx(KHV;Y99qNNUV*3xC1mC%uRlJcddFZPapw<0vl)+dtCUsb|nKD|KG)l(s2B zd#O4t5ZefHVyo^MT?2VGMcz)#IpdCMjYF{hxEX2(NXz}SE!aAyfoSpRZ4@&>3yWRn z=0-BN=@^qEaSeXZ9Y{vqR*H6CDxGXc6 zFkQAaFO=cfJ)&L{))}Ut%D4|Z)=p><>8b|!@=a@tCF*U(yQ2ABdbrZBlvQGk{vqUh4yym(>jV(YQJ@!oFv$ z&}{$n#@r?P>=--GLv7l{-iI;h6-+W)TT<*|a3qe;j|q0Q*ADHvKi%~WQjz4e!$PBp z+5#$CuhQ{^N{kXdu_jLwQDgFjET3~vVraW!n4wFs=|YeEY$7;$egYRs>M6IM4juVm z#>d#nuQZ2+2kkHopZ0q~3Y};-XM-UCzI>m6De~Bi;44^ep~3uXF@g8OOm zu(YJq7|)cK25WM%W?^#~yl2P)tVh!*mq?ps;w7NS*a&HChu^@m?zyec3KL0BOAcf{ zry&W#q4lI11CYX)`+0WESFwJ^@@f-xTjJ9v2b%S#mFxbk>P9{81z+S9FrI=BUPL7pt_X- z2bOqr^OYSQh6hPAQ3Yq*1VdslS`Bbww+30dCf7;L@1N8jf;I#}Xlqe79onge7>wv{ zqLB@K%A`hou|$W%a51$r8%}c#h2)s(l@Jamw^Az%1f6*w8}!LCj*zLmKmA&Oi^E;5 zq+JqnZg%Oh1nf@ShzznA?as6~PL?UIRZ9J79uKC|bD(o$K%@#|yeu}W8Iax-=+d&XV8<4!Zg^T8-cDh>dgN=jSEO$sS8n!= zM#v2$$Jl}NcC$NAm*F<^WBs_s65*icL8}IhHuh@=XE6q@LUAy`2-A4WbcBtQc)qWT zwm5&xN|JX*Yqn@x8u7@Po%;XyRE%iO!Fe_bNchnKl5CGCBpsXH=FrsG>89l9K`MP7 zxieim2`t!A;r4eeY&>(Ey{`eDQCbAb$n;UNO8J~8bZ1q!|96kaL|vHdHi5r*8DTNx z;k~7z;7A%BGX&u7N(Ol+)la;l^}?a48*dOqg*k7L_IjzuQ|1G68d4rv7DOz z=?*L3%h1~9s$ zF>`<=OgUKE-idZmLt<5!y6CR~3L|C8Bmp{Zf=d2g9Z??2YGeS5C9Tx+KA5{O?8k>s zgqZCPDarL>3NYg-T8i#o&~U5pxp3}q*P%60N1LefQN%0K4jRyqckgKPO4y}pe=hKO zFExJo#E>7<&4yeDQQ|Cx$-T4I4pgY>L|QpUp*lDl)KL+%6$Y_r+$VhK}J0pK$4>De3f zm}#T#)WizXbeb|n@xB|ubFGGB17yo+STS5JifzE4|A<-P5?uaF~Zq%g3 z8xL{#R=?rqtcCc#>1 z_E1nf+TWqE$)dy|Sv@mFP24{4*XB7dXyJ22A+t}7c^VIiwsXnT#n8lFs(LA~3jZCn#nk=?T^M9^u_7Dpdg2-@G=R~&T zacSkDp3hG~O7DRl^0}p7(Bmf!fwQ1R9F;I>(QM$7n+tvLZ6|=#x%>icSqG80v%v$0 zz!Z}Il5oe?;>$1k8-ZA1n~(mTlwxLu3HvCFHTlWDL*OP1lpDpi@*_Dfb}%S#K<{L3 z6`lG=$#)lA9=342<8$mSzw5(Y&<6BnwuMJpT{hZaQzN(!wTKTjo{CBUS)ok!CR-ra z0=1$RNdvv$xi(;vd4S2Q^q#{aT>hLBfXwNBY&et1uGlf^{y=1J#YNFwhA zMz|l-if!w(#*M0 zqege_Sx;y|nq&h8kcO1>ZzVxgm(O__uns!kbUBrAEcCA)6tLNq8DttE;7BP1`pP!=hACk=VZs~kTPsa5ctf^iY!YBBif3)y zQ%hs8UQSXH{^2NWwRypZ-2rp=z*1?*g+r8jIH*Ml$-d6d6D_1 zQojI#Vnvs9ivBm=-BVm!*L`{Hr(7sDTG{kF(NEcM;*9Sp z+GXdh=j$g4DwHLvq%c-gt|O&JBgUv5XuZis+ssG17@PUC7!udu-;N{SgI?}JY#e8$ z4PL$ul=#;XS6AYrm@+S`r$_^hzE)?Wuda3_M)HB89d|BsV09s1E{K!T%h!1>~sx8#{Ho-v6_Ilq8qS zH3zcyJB`yulSQ=rWVQd+PfhGYv;`TYk$j?3*Phto z$bMc_Fzs-y)}LY)-sAn@_VCzDOrA@6LoF?-NP5jkhvIM!Qx!B#5sd(ZbH~|=zs?a%NIRi^4K(| zRrleP%8Hv*n<7c{R|2MfW=|!LS5?KgtQR?%XsK%2#FBH&(s*V$StdwbvQpW5)AJ4O z*~pU((`eLDFYCeGiv>jkBhMWKkKBDIN%2E=W=2_kKwZ=UAQBBn=2wiiMn0&R`=rBQ zYD$6|)Fyo2#i&79FH(myl(U~4V@sy~tT+!Xws9ks-5L(LV49^x?ZPiv;oPFU8eB&) zGop9G;9Nl zh&n6{q>EJR8hK$lKVFlLsoR@&X0@vD$UnAFPeCg@mT-Y``WPd18jjZ{@tjvf#Qfsh zl!B>sai=tbvShHByTP*#7Kw^)1Jpv?dWNeg*YLN(tu9)@8N^phYkoxlEh%+Cq%PlUL*;5XrWrR8k%)4A{ZVb17EO0Gx0D2(Oom{I)^z!qY z+fVhnHy=w;p;@k{o;SGSB(rgbOGfR{o&&YaKgO)K_Zbg>iJpp%L3;@F`yXF!8;(4R z@*`$i*I&$Zz9g+Frveq3fCqz>1hNV>!*p%W)>Ap@7bztSCQf!(9n=Tb z;!>BtF(>tgiL{tZ==|#ubk@Y*luvDLeplqrGNXgF%ExWW;pP z*JReXkl zoo0#>r;jg))WrMI!Om)V?^mwKcfH7(4Y*`2#mh)kQavkd%+fZA@=IOqFvgNF9;& zSh(`wbVgSd{vp{=TRh-m{ae)82XV}PzJ@liF=*$WU_yl7M?{l3-0^3HSw20>Q;6{z2Os{#OMUqLFK5A z_tvsX4J08~@@Elb3Z#SSM3D_`p@QI(JW<4274A{^QPfyJO(q!@CBH`N~3KE;BtB2I+&4HpXsM4 zT_$@2eaWmzTBQ5T35fekGskH8qb9r)`pRg3GGqlYEJ_Wq&oMK4lDFgW#YF?cJ$2mz zD8uja$STOZB4*VDNeMNctNc=cOuKa=-Z*TD*w8mIrOWCMco-FBwN}w$1DRCtZ*u3) zVUs^HZ0^9HT9H2kPDo6J7ai81D!K_CARj#!NBnwnS<1NR@ANfMTWAI9g7WCY)cQ8$>Es z(IiOYrpmZI8CytHamiE=?jiXaeqv|a2DEma_4Q@vf^t$fF9q3kaBDSgc`r1h<)Xab z1D&Ad8M!-4&wBwum`pU)i;q~*g!qHx_LVOZ(ta&hl?NR5L%TZ@+#0ZeL?rBR?~<-b z3WHQtsGZ72@q$nlv#tZx}10^(m@`q&)Gj>%untwqCuM@6o(9v+<^6tDC zsD&ZEU)(T3Q4F+6mJgCz(rsg&K}0a}&L&ojWXumH))~Cu{d$7NFEknabnRS~lX^m` zB$+zeKg@VUbMNOEi#cO0fmXOYA|<=d3~#KPvDVSfsu{j3<}isNH1PKy ztXMRg!R+fAss3uCw@s9jaOMi2LRfH}i+8vhjq+uK zXGZ2snjAJbe<4Uj0Zg-zi`cb)Y)xwfLYc~8n4d<{8NAFsuoAeB`oz3AwPr!Avi=h+ zy*`#4J9G>teTycL#k)<09suR2mBIVmHO!Hx*IgCF52}3I!L16jC{mO`(9=eeiR}-Q zyC*p%WH3onln2-4yfbke{7dcUa|84&bsd$Tm%q#;i1U-C-Y7CT3F06+oL3>LHq-H0 zQj@e)Qf}kyxBrUEcEn;fmR33KZ-8bzgQ8kePK~JA%fBfQ(9BkW`RgW}mRI)0wI&*k z^n|QP8Mm-hvU2=9n7G1qwKh~z;AF$qFb+Q~AnWDv2^W?A)=RS#R^~WirDtS~VW6xX zHnHD+sm~+E|BN+=EG6kr-lO~0p9vb$M*s_gMA1ScxT+DSf=LUTot}ghaBCxv+>RC9 zOqMXOCQWjky5;J@g`y+wfm@pQsSD`!J?NnI12Sveu@5WPHpd`YS^o73d*cbTw0Hv< zEpdnxtXw3vczh=Wf|Lr?q$Qsg5~_|ZNB(KyhM*~j@~;a9j)yN~rr=+0p&vgI)*>M( z3>CgCW@i~biAFOPEvWXFOKkLJer<4el}G)|O=Ucrj@)#C?8y4DGWh4{RIflYQ2)S* z4PhdASL3)v>emYNs zANeV{o%>Mwvsv@L0FGDr8CRgA5%FbDmb$UY4uvw_#8ucO?!M01X2>92S$~v3 z`;OG2jR1%5!l1Zy3h*gf2f3&hj(!_OHVh>XBHWlU4<~IT!@ujC)C)(9dYFyS@>W+9IG8Fb z|GEQ|xX7d9N^n4yJGZAA2f0S)E7C`&C!G}4$p6hOsQ#@wR^T?ad}ST8wo`9m#Xot& z;nyCff$8bvj6B;*Vp)agf)-bLqvNU!ur|s8h|;c;b|r{xrxMY*F1N?R6@@1_$jE_a z4v1GKNY`|0b7-lD%KGzhyk&i&C@|4s`rw3c>8xII^JWw&xC}L5lUGd`BfYYed1*__ z5cEootri9?R4ZVe$iJl_r88S~Cgz&XVT}?&r+viD3b9CJ@%LXM3pN$HDM!D==Ce@Z z@nN#!XdGcm z-b06>^U6^fxHBL*J^*T$_k~UQ%LDjv`SOZEXSs$7!C)CF;^RSx5Z^oMGK(W@I*6Ir zXPeM0FdBx|ab6p;Y8fdut$1%@w+CL1D03-^br}SEYhRy#`?{_D77@Emsj1DyR!n$2rCW68GNoRT7|DBO_mu9uI-b)wVIcwi-t;}^kv)F@!rt$F z-mlm5+6tXdv2AAle${UIuGMe)2Q03shJuN1R5`;a#87%YP1wFk<{Ix@Ar+dorNr>$eTsW>KzZepl%`cvex#DaSKGGW4YSP%^QZke-ZLZBi z3673fvC~Ehi-;3|=+!%rT`C4!6HimS$lo`Fh~2N|mA>KjA4FKT{+Ahp{`G*H43s2_!hNW&k0tGP)MhRJ>X( za}I$@$e@di$J~vO=>l0x9%q@X!p5qE2acgcgV=6hti!Ac42h(ln!Zf}1Y0se9wSyZ zZeby^sYd}hgP8V`zcyKUjCDZkz&NiXsrci0NNia4DTMMMuEj)5xr9=WI@3Mpw%q?) zhL4~CH8LT)z%oIOs+sCU!{O#Au#lpBYBf(#PmSP@t0Q(RmEa4jB;YU3X*@O?Lxf!6 zT0i-~$&|K^ZpOpM<+q;TO&|$s@lc`I79NTYd~tz_YH)g*ptuv)IK`)S2Cwe`9qv=k zZz!)F1mHl{HC|$FNJIz9V3)cu#*gcQ2cfz(Ml)qCP@#)f4=IX!>3_ape}t_pNCmax zW1K|5EGgaXf3<{Lc(@4F<>IS&)->{=Jlx-5dQTS*gGP$iSKayB#Ywge>dBb`pSZlj}!DScfV$nQ`5 zFoMSt4EvAcP%O1_yAm@Hs641Z(Mx#awu1vHx<~)vew1+_DzPje8vC3OQ57O6jp?&8 zIT@mOr0kAW#j8x@v+#b5CU{XlxZ=*ztM$j{2j7*&NMTrzb;#J-?IP8Gp%DDr$1@E* z6A>S>_TJljAhsZ(?3c1$tPy1voRjbDFa$Ft%R^TF_HUmhfM;f9!?%)r4VP1cJ`TF@ z`gj~hQ$N1sqArfbv*$Qa3%+dnr@yK?A5=q(d4<7-$7)hmW8!JZj293BeGHy##7x!8 zTC{-g)ml}13tDvBi+b1kD5+ByUsTbjAhTe7>*olqi-i`GQyV|ms(4kCIKtHqkd6s3 z&%j3V{UB>p$XlLo&?KkScc^+?cl%`K1vyR*=4AkD5|g<|Adu zwC9Qc?67T&qZa9!Lt+b|9>l%?8?W>d0g`H7j+z&z|Y(X>FSK z>jx9(X9;JE63d8~fo%vy?5c$6ATN!20sf2tlpIaQzdW7!FyXT>Km9KjYT>Rp{cIpi z15NPm+!Jx6^oeOnUUdIqXmUJ2^WHwe6>6sYeMDdY$8EM^i95PEL|D>l(7*0#kSH3b zKT8N)4X&%!pmOahzcn?@f_yM`z5X(+?3@;p^5N?*hy|?4FV#>agY<~TwewCri;_D> z>D)PhlOyT0z5Z_L!J*D&Wi+h`uJ&Rlc&#+v#$ih`skvyb&fQ&VCsG7om9fO&9@g7prj zH>nuZBstbRepj6>tuO|*Y<66htVX8}%g-G8xLzP_K|71gs`&YhBkobGo!-HTyf;0{ z#ap7N~(2%#rd_yAp zdqA=hPI-UsZ!0=Rt%r$=5IvUrfL%dgMrWt{2pj%<iS=1Vw?ju63!RZNp6#XjE&r zLJ4wP4*UTDT?hULxJZChAmn-0ZiHDfod)fp9Ykq7cwx(f@4E7zjg2x6Qge8klbdO0 zhfRWNgG~EmE??82;)pf*(7epq`AmxZSuLrGHHkGzrdL^L@1J&ANzCzIh~*D3xkV)% z`SyBw$OOUMlJai?(N5m2v#Fv2{=Xnu19l%pcmw^ae4fzl+_XKuLc?MR4HAqxajFAQH;*0x-j$qiAXrxQMj6e2$!hWUz4S&U*3YUg(?0P;@-)GW6cQdd zw})TTnpNq3#7>Q9D<)IkKaux622I@|@=3!xHNu|chtbf7FV_N3xUk_Z=p=gOUayT3 zByX!iBv%eoqBq{U@uS#5ft1N)BGDeTJfhGx99q(aveK(OJ5l`Oql~N{vL_bt?i^%G zCMNb7HhQeYWWzQ2>(yu47FElVTxT||Akzd-_{+vR;&KlpWONf!Vh+(Mc>PL9h@o=6b+#z%LJH%m;Ioa^})D$Zk z79J(%mCH@+Wnx>!p2ktHfD*!}A1h`3^};a{H5#;d^0Jc*M71gBEE&or{<(SPzU?*Ke`yNWbvcj*cc#~d5ox5kXU=T;TUNp^@$Gkw^t-FPq4(DVt{^XsAb|aeoJm> z%#OXV1UFk`B|E+l5&JqDh1^o7*Ix>haEUX+RareiVfDyKVOiOIOcYTa_h_#uZpBSA z@`(`EZt@NUGoIS-$#lbqC{bZr<%P))#_UH!Z&jhT|Ik0Gqhy^!O>ca+2%F~!om7hb z<3u6z*4sq`jmhH28-02y{^K_pF9v!$@&~#7&{M|~B>Cr{_>|6-O_(e8w4~y~?Cuj% zD!1*GwMAp&uG2c3WN6DV?t$9We(pIym_1YL*k@V!t}*4#aWQS#y_;8k@X|{t#AVHe z`VT;(zAH@C_}%vKx%<^o7Ut8g+|aPNf{s0@x~eGAQk!H0HEh2Up=K(K)PsfsrIw-} zT9e0EA|LlN8FCO)xbK5=xRd!gFHaab^hFVG=XkG{fjFv$39BF6XcDq-8HWkWOZ}E( zb1Vet-XB#E=#s8t2?qJJM7pj%(?eU_CXG>tYQ$#N+U^XKFw=(IIk_xJg2726&TcaM zUf^yaRIbhEQr2Lm{ePnC(!jAt|M%Fz%cTS{B!5K3F=*K}Vr?`?pe`i~QxO_9n7R~5 z`S1dV1e>Ke)6VprcZSk#A;TWaWhS&^W-*^cx@M=7ITNV5p8_qDCiV1;dMz>hZ)Yod zT`=&89V#6fT}o(un31+XqL@NcQx5e0?5+`|MqiDzs}V=$M(_dv}DCx!gyJ zREYJhJasGa7PdMGGwJm#;?>g7UNIGZ_H1)MyM8pqR!RfqzJfiErRURSQ5l-`8??+a|5EkNP~A~g*h^%L>x;8mGUiy&^?=;La`e)hJkI`y*!nJK&v z1rZh?SaJHlTeeqr4+dJ&=I;%*5yUBTY1E+bAKI zd){n;w;EC6Yi}pI%$(Q&qj^h`0%)j;N_{A#DAju@(%=!Za5W4nxU;hZFXKewADqep z%>BQi8a!D_g9nld{u}GtFc)Ps1X;lYm2eEbRp2AMC`y-3qhp);S)AON&Hf34w?QDA zS}&J-#4sy;!o6K7zSbDQouSBkVh7u3GY0C-Ol>rom$>6~UxyApEGv#_Tj#kL9Ti?Z zqt{JhehMwKRXEX8k?;|D?n8Le-#^H;KqKSsUHxR+tKqip?u{|1nx?KbX?2~8$*z}- zy;U_aBkj(j<;TToX(f;%)~dH~$G@kw?dw5($w$=>+{T@XA zFWw#g%R83e@$UD|49T%aNOyk6yNfGQ%PqhD-0|DqUFRB~LMjV~gs;cs?aPde>e5?q z>~QUEO8uA3(Dgwkvm3<>bG=%eEJn#!5q&nufm|ii5jDF&bk$0I`LvIN$fp*hRHIH( zOo6`7#=dC~fj~^NO)UdJB_~!1_`F}1+q_7Wvcej*v~9vCQgsKkB;gPeh8YUPS7=<0 z#u^dcb5f^{{m&{pk#mqh;~_V94W1y+EdbuiE^}CUPArx4YPte)@`MN1LLAKsgc1yF zH=FZpqkZk<2OiQX?iH8%h4nW*m-US>v@$S1!X>lf5La%lPu7i#665DQu+79H>B)IG9w`X_m8 zJ#HoKo9O-&Cvvi(1MorrYXt`h+*Lc=!`?%elgLZ2^#G2yF*-bWKrG$TV72CdXOt85 z1Wi!tEan^@b$uNha?WNGS}%}-#1UyJnr7b1$&f3D5GWyBDvT=Bdqmo91cEno8Ut8jI+xV_@*6WrDop%Ximc+YkT^$2shg4MscZ==2D&Iby=h4b-E}l zp#t+_lJBirsAM{ZWTbUy2h8N=^iedy$OB;sr=|#)$eAkzo6xYGvWPK&aYG{n7^^;V zz$RFV7)W^0exwV9bg24hXji}@*n!?8&=)qlK`PE#x(miz@H-MaPv-1!ynn!s^oI zo_53DdR1CV)67R>OD!Z9BTXY5<3j(iteu_n{qpIU^LeDgh$=NlbKY8%I0HJrMmeu% z$(8pE_B#~OZhF|{+5!A%H2L&bW@le?!^`T*p@Oo34Ts|L(WG1Yo*$rVyLkV8Z_kwk zoB?k^#R4Ml$ z|AQsrTg9TX)@2y4g8b|vM<<+TLHCGnxvt)xvV=tpgXruDLo}8OA|&b1^rmpynsTj= z9`5joYtsrQ`*@)oqZ8m23KU5KIuq*pf{rqb+6cPD#0qUb#!obw!_#G57LM9><1dw@ zH=XJV_<)O840pu&NcmN!0X$KLKAB4;o1yK@e|>%v&-Qq|YZ#elpNN>R(l{Bb+su}T zz6YC3+!eeLld9saby`(y;pQz55%dd>N%(&`)89vwb`?VaCze(jMk&Y|AltgL^us2* zke&kr&eX;wEt|fh?a~jLsr$P;dcDU(6K9kb?0Oy0-)Xk#7=E6Mqnv+2*R8+X1=d?l zx7##&kW-gBJ6c7=iR?4;jnh_jMgMWon&p&DPW7J>$A^Y=j7m(ZW{6g{u5(aLrsNe3 zYdg-_g!b5q?QVj;z|uG;pSV`iXT{$`oPD|x*(v3+ zSlt4P8lU>ZPspaL5G%u}t&#g$bO++4h@!VBg;7@%>;jkPEi@=WUM6dne*CTZ;_UEH zXBasmsF*VNn*(?)?J;Vt#+Q$*KFZxnf3i#$82E&fRbdpj4&L5yf$=qkgjG-9If*ls zIvYa>C@l&Ur>j?SlE`NAygbE)7ovm?bk3*g!_$lsJ9T+Nm-Q*~`qHa-;RWYtE#szV z3=L=P?8mnPe=jdN;o<;w3DRw;cez&o_*mXU@)0!paY{&>9Pysp`AKyj{$@>;9*1X z*iusjFL=B($wBV&Fz091Yn$WAwr0|LpJ((s!3@uDpAF=96gVQ)-1)Rr3%ZPL$o>u{338d9Hqc1i8DUebs~E)eSNFe zC#4^$W$vqzg9PN$wr5TuAEch?3}Z8Mgpb1{%f_rD6jDelfz5$14Y`wrQJYsu1g78paUUSfZuyBJ+8xAA3fw+jqkFd9lPmsh_xOY0+=xo zKxO6h1w`=fgH?Bq(9e7Om~j(l0M}(C_z{G^0K+(3qv)JWY^9JSJ^kD_c{Ve-#6>v$ zL~5(sgi-~If-!i;I#9d*2R9K@P59NVa(c^4R%kbvjmp=wm{8FzH<|nlr;AGCP5kst zfq2{n@sIOcY*b|69UnWb1tsB*jeE!pgH4|aN{YA_1NvQN{(c3AfZni(B4zBf z<;d=zDxu|E5H1X^&hzNQgX_Y?A^ckuPCj)MHWxv28yNsWsNFNxyZ`|`B` zII?Sp@YJ0m67|SjY1=wt=WSE%JXMIiA+_|^Y93X93D#ms%M=THQT#fn>e)nP>PImX zqL@u^ywSPUi6rv*!#q8KxV%#QABU&U#Ng%get3mP{gz{yd*YhM?Qd|{LU5BWH11<> zPfAqpDDa5cC}O2j+3Rm{&^B(1y(c!~8)Ik*v3u^R|KqJ~;Vu4T`!8PFb%>UPO1&Fs z9KEn_Du0y5hN2TWMv8=S2w`Ry)GYSdF2k9I?1>(n7-klZHOe~%+lkSI&)##S_-qZm z$VuC8WsUlJ%U_}7a-^n@z-PBE8B)GB>7qqUo|P6p@T&WMo&2}~#9LevV+c$H{oC`X zNkD%BM6K_neQjz7&qEDvPY=XkyJ-?LsZx|x1JdxOKl9X@UGB1jqKFZ!lx;L=Ba=6F zgX;1Jcg)mTn;$CSRQW9+vQFE#9a>*(HXHVbplr%C_EMOxG!F2!CBmRMn zI3)`bvE==rQ3th!BxM+RX0X>J3Ce`7V!xA@IU?Sv)eONDu3~Uv*PT93&>Vchr+0NW z@@5`K%#p4AfOPLC6S3{r17Cbu)4rIO_O4MW!5R+2m+Ssn)7jV0h!2-d{bP}( z@L;Sll64R}J#$o8u)VLjBllzbfi&aAN!hP6yK^}^Hs%TY&ctHuZ6j|yGwl`lf0_I> z*Ew9Pr>CwT>iBYB{?M0Ba>*rBUB%q0b=9WI3lPToOKz_T%9OR+pr>68J6NYp{Z@u% zNJ}PM@>?sRBhwyw_&9-wWjZGH$$qGoHlQ7g&;m}9FSH!z~3dUYvkKWlkTl=!@^D?T?e#9;&P#ohX_-P8$(R-so3svWWbZOnD# zcz%hotSshx5oe@IM@v1CB+ke$0 z*vd_Of4G(WH5aP%NRH|KP`cEq2vHCG@IGI$hAi@61?2Xe#|C_8r}_w=Q9hECf|G%y znf7m8AGwKGw?j~H!}-fK5lv7M_FIj?o9HDgj&&D^4OW#WVvhcx_-EU%;q*wQ+!46e z6tb5+c>`lKigU>!VlY7v7*kdtEVWrsW$UwA4vRBoRqYmc^)u#&2$5Kv&gW9Cm_Bn8 zTdff1ioU(S38K!hS~~5do?q1PybiTBC>SF}yc9Cp3@CtRzK|0I9h!u#=QjgPja4D%7tOAS5H-xHGfH=IuRmsmG)gHF-it>eMQqhk!kFq(1G2E zh>O~2(Qpe$y&4Q1{?o?#Fz~T3cL1XW4HzvVZeU`Q+3aAI6%4mqkoiyH>=LPsg#-t^ zsFeeP)eI%G0$R***h!Hn5UZgd<-&^x+=NwP$D-9Nqt7X|sCbJP_DcAw&d-Tg*Y9`ve}rrd#uTqm?j|1*Cmve* zn_T>!&QhBtuUZ7(h>on=vyX9$s6XJXt(+CDsJYVq{y_?x_dNb~mVJspq8|r;n_n85{91#TZ|Bwt& zyrWtUJqFSp4SGm2UjSbm))h3=3xA~>-w4<)hbgjk6%KEElQ|>rWx-J2ZA*QA8Fk$| z?m+ZCj5jdFX3Rq`W!qtpF)Iwp!2dYtssMh#jCWxB0ptT`<%eCfeYRyLAqRI`2< z)>t@Sdj6c;wlv_eT_Vhu~{%* zQ7n1v&y(Jtw#ovx-wt2`PN~*OpxBW)yK>d|ArD_tVRE#ZbmTe=jC{|Xu{b$A8Xj0w zsiT{d$r-xNrDrdPZDaNNDZwW3e6HZ(0%|!L=61!6U3Cg8xf{kf+ z@-*yivo`~4kL&n#QLnnhyyjeIkn|doP;h8)ahG$ReI9HmXxon{ihjL2!*?!Ucn zsDUD$OE>v&Ke;Y*_CVm?b<<jV)#25>jSqyfQZt#KcGBX-Uz4*W!f>8p-|hU0y!ECVTkGqwp!W7|YEr z(}scjPuUW+Ua8%1AowD2$4cG(D6lBItyW3`U{@22&z&Z51zpf#@;lGm!;B-ykbbEZ7{vHQu=aft9Ig+7Eh=H_ z8Yg=Rzonj|Cx^C?Vz%EHMHREIQ>y3|^e9-7oK|D{a?a0rh-RQ86BeTWOCKO!%8%TLkI;gE!pL zKByr%)+zLNSYUI)yCWiPzJ*pN629QW25vK8W;WPtI&bqS%&=YBpV0ctCrI|`Gg`9! zP`%{jC)3R*#r0`(jqa*pt>tiS#NLRwvbfyC=Rz3!lwR+LW9F)o32V~LcIq-JC*zxP zNvfK@Ec+Guasyh)d~Cg^P_~xIuai6qD=;So=JG+l1h3kKEZ>r0y#L)v|Ix@;<++re zPWYc@>2_1=zkcj95e?k2IkbAc%Ob%OX2Nf;)u|}+pGHsZJUfdDa=-d(^dUKwQ1_w4 z)?PdB*%F4aVFd)kxj>vi6BYP0Y0gnD`6HenHw<};YG%A?!={PLNVW{7S0>RU8?*p z-8i;IhDg=WI6^!QQ9Ksz>I{L6s=v6xM_>TseH*=53!+PQ)wbXC9IZb^dzr4t`%xy`k~fvLwf{gMawG4I0{#OIz7 zy{DBdZfWe@<^2e9X1_Ib>h;anBvDDXuI|0vC@LYp>Hrk?zrM=YRxTD_(HwjKZ(A<; znsZ;W3Wttg^^IcwrpS{0NTDz5ij(<*=!bM857;C8YuoU-gsBaf@X{6!P6<)iSs+X7GX$)61bxwdf`~km z5R2PaJAzk{L^cFg8#KI8G^rHEHb56#tFgojJ_{ae<5A(QycQ~Lafl6~zPwprU&%fw z@iy|-@hl8}@z6LPdqGF3A${yaX)gc;UTCf^0nG0g5U-u`0JV~ Date: Mon, 2 Apr 2018 09:52:50 +0530 Subject: [PATCH 042/180] write tests for shiftCoords function --- test/specs/lib.utils.spec.js | 38 ++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 test/specs/lib.utils.spec.js diff --git a/test/specs/lib.utils.spec.js b/test/specs/lib.utils.spec.js new file mode 100644 index 0000000..b3d2bc6 --- /dev/null +++ b/test/specs/lib.utils.spec.js @@ -0,0 +1,38 @@ +import * as utils from '../../src/lib/utils'; + + +describe('shiftCoords function', () => { + + const coordinates = { lat: 19.14641, long: 73.1424 }; + let shiftCoordsSpy; + + beforeAll(() => { + shiftCoordsSpy = jest.spyOn(utils, 'shiftCoords'); + }); + + afterAll(() => { + shiftCoordsSpy.mockClear(); + }); + + it('should receive one object', () => { + utils.shiftCoords(coordinates); + expect(shiftCoordsSpy.mock.calls[0].length).toBe(1); + expect(typeof shiftCoordsSpy.mock.calls[0][0]).toBe('object'); + }); + + it('input object should be a coordinate', () => { + utils.shiftCoords(coordinates); + expect(Object.keys(shiftCoordsSpy.mock.calls[0][0])).toEqual(expect.arrayContaining(['lat', 'long'])); + }); + + it('should return one object', () => { + const output = utils.shiftCoords(coordinates); + expect(typeof output).toBe('object'); + }); + + it('return object should be a coordinate', () => { + const output = utils.shiftCoords(coordinates); + expect(Object.keys(output)).toEqual(expect.arrayContaining(['lat', 'long'])); + }); + +}); \ No newline at end of file From 7c90069eab60f0ca48bc280c9afb36aabcf85381 Mon Sep 17 00:00:00 2001 From: harkirat Date: Mon, 2 Apr 2018 14:13:25 +0530 Subject: [PATCH 043/180] scaling dav logo in missions page --- src/common.css | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/common.css b/src/common.css index 49756c0..b753ac1 100644 --- a/src/common.css +++ b/src/common.css @@ -193,7 +193,7 @@ input, select { } img.currency-symbol { - height: 13px; - margin-bottom: -4px; - margin-left: 3px; + height: 20px; + margin-bottom: -5px; + margin-left: 5px; } From 47c75a8c1a01cd54027e68cf65b8db3a9e86f6e4 Mon Sep 17 00:00:00 2001 From: Siddhant Shekhar Date: Mon, 2 Apr 2018 23:04:57 +0530 Subject: [PATCH 044/180] changed background color of Find Drones Button #161 --- src/common.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/common.css b/src/common.css index b753ac1..7e1c70d 100644 --- a/src/common.css +++ b/src/common.css @@ -122,7 +122,7 @@ h1 { color: #fff; font-weight: 700; font-size: 17px; - background-color: #d8ffed; + background-color: #FFBBAB; pointer-events: none; padding: 20px 20px; } From e9613934cb98763c16260ae9ab5544e697f65008 Mon Sep 17 00:00:00 2001 From: Jonathon Hinchley Date: Mon, 2 Apr 2018 14:07:31 -0500 Subject: [PATCH 045/180] change confirm text color in takeoff page #163 --- src/common.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/common.css b/src/common.css index 7e1c70d..d1b8873 100644 --- a/src/common.css +++ b/src/common.css @@ -101,7 +101,7 @@ h1 { .alert-button-confirm { border-bottom-right-radius: 5px; - color: #2BCA81; + color: #FF6A46; } .big-button { From 73915486a272d905b782b173a0ca0bf58cc086ce Mon Sep 17 00:00:00 2001 From: christian Date: Mon, 2 Apr 2018 17:23:52 -0400 Subject: [PATCH 046/180] style/changed-check-icon --- src/images/check.svg | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/images/check.svg b/src/images/check.svg index 312a8da..38baa1d 100644 --- a/src/images/check.svg +++ b/src/images/check.svg @@ -1,12 +1,12 @@ - - chek + + check Created with Sketch. - - + + \ No newline at end of file From 607c1fe7359988e4a8fc39814c83852d4752edd1 Mon Sep 17 00:00:00 2001 From: bluetreebranch Date: Tue, 3 Apr 2018 06:51:46 -0500 Subject: [PATCH 047/180] Changed the button text in the Mission Summary page from Close to Confirm. --- src/components/MissionScreen.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/MissionScreen.jsx b/src/components/MissionScreen.jsx index 06d7242..152b94e 100644 --- a/src/components/MissionScreen.jsx +++ b/src/components/MissionScreen.jsx @@ -21,7 +21,7 @@ class MissionScreen extends Component {

Delivery completed successfully

Cost for delivery:

{(this.props.price/1000000000000000000).toFixed(2)} DAV

- Close + Confirm
); From ac14d0e1d2b49a68a7ac86ad0f02430e19ca5da2 Mon Sep 17 00:00:00 2001 From: Timi Ajiboye Date: Thu, 5 Apr 2018 02:54:34 +0100 Subject: [PATCH 048/180] feat: setup new drone_charging application and started mainscreen markup --- src/apps/delivery_drones/App.jsx | 2 +- src/apps/drone_charging/App.jsx | 25 +++++++ src/apps/drone_charging/Main.jsx | 16 +++++ src/components/MainScreen.css | 9 +++ src/components/Map.jsx | 3 +- src/components/drone_charging/MainScreen.jsx | 32 +++++++++ .../drone_charging/MainScreenContainer.jsx | 12 ++++ src/images/icon_location.png | Bin 0 -> 24793 bytes src/lib/map.js | 64 +++++++++++++----- webpack.common.js | 1 + webpack.dev.js | 6 ++ webpack.prod.js | 6 ++ webpack.stg.js | 6 ++ 13 files changed, 164 insertions(+), 18 deletions(-) create mode 100644 src/apps/drone_charging/App.jsx create mode 100644 src/apps/drone_charging/Main.jsx create mode 100644 src/components/drone_charging/MainScreen.jsx create mode 100644 src/containers/drone_charging/MainScreenContainer.jsx create mode 100644 src/images/icon_location.png diff --git a/src/apps/delivery_drones/App.jsx b/src/apps/delivery_drones/App.jsx index 979578d..cc6a3b5 100644 --- a/src/apps/delivery_drones/App.jsx +++ b/src/apps/delivery_drones/App.jsx @@ -20,7 +20,7 @@ class App extends Component { return (
- + diff --git a/src/apps/drone_charging/App.jsx b/src/apps/drone_charging/App.jsx new file mode 100644 index 0000000..de78a91 --- /dev/null +++ b/src/apps/drone_charging/App.jsx @@ -0,0 +1,25 @@ +import React, {Component} from 'react'; +import {BrowserRouter as Router, Route} from 'react-router-dom'; +import Map from '../../containers/MapContainer.jsx'; +import {initializeApp} from '../../lib/app'; +import MainScreenContainer from '../../containers/drone_charging/MainScreenContainer.jsx'; + +class App extends Component { + + componentDidMount() { + initializeApp(); + } + + render() { + return ( + +
+ + +
+
+ ); + } +} + +export default App; diff --git a/src/apps/drone_charging/Main.jsx b/src/apps/drone_charging/Main.jsx new file mode 100644 index 0000000..d95c751 --- /dev/null +++ b/src/apps/drone_charging/Main.jsx @@ -0,0 +1,16 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Provider } from 'react-redux'; +import store from '../../store'; +import App from './App.jsx'; +import '../../common.css'; +import { updateApp } from '../../actions'; + +store.dispatch(updateApp({ name: 'Drone Charging', path: '/drone_charging' })); + +ReactDOM.render( + + + , + document.getElementById('app') +); diff --git a/src/components/MainScreen.css b/src/components/MainScreen.css index 06285e5..8b55daf 100644 --- a/src/components/MainScreen.css +++ b/src/components/MainScreen.css @@ -11,15 +11,24 @@ div#user-controls, a.order-button { pointer-events: all; } +div#header { + margin: 15px auto 0; +} + div#logo { margin: 15px auto 0; width: 116px; } + div#logo img { width: 116px; height: 46px; } +span.logo-subtext { + text-align: center; +} + div#user-controls { width: 34px; height: 34px; diff --git a/src/components/Map.jsx b/src/components/Map.jsx index a4edc6e..c87cbd8 100644 --- a/src/components/Map.jsx +++ b/src/components/Map.jsx @@ -90,7 +90,8 @@ Map.propTypes = { missionStatus: PropTypes.string, pickup: PropTypes.object, dropoff: PropTypes.object, - appPath: PropTypes.string + appPath: PropTypes.string, + addControls: PropTypes.bool }; export default Map; diff --git a/src/components/drone_charging/MainScreen.jsx b/src/components/drone_charging/MainScreen.jsx new file mode 100644 index 0000000..2b86bd9 --- /dev/null +++ b/src/components/drone_charging/MainScreen.jsx @@ -0,0 +1,32 @@ +import React, { Component } from 'react'; +import PropTypes from 'prop-types'; +import Link from '../../containers/LinkContainer.jsx'; +import '../MainScreen.css'; +import logo from '../../images/logo_missions.svg'; + + +class MainScreen extends Component { + componentDidMount() { + this.props.onMount(); + } + render() { + return ( +
+ + Find Charging Stations +
+ ); + } +} + +MainScreen.propTypes = { + onMount: PropTypes.func.isRequired, +}; + + +export default MainScreen; diff --git a/src/containers/drone_charging/MainScreenContainer.jsx b/src/containers/drone_charging/MainScreenContainer.jsx new file mode 100644 index 0000000..5720589 --- /dev/null +++ b/src/containers/drone_charging/MainScreenContainer.jsx @@ -0,0 +1,12 @@ +import { connect } from 'react-redux'; +import MainScreen from '../../components/drone_charging/MainScreen.jsx'; +import { resetOrderDetails } from '../../actions'; + +const mapDispatchToProps = (dispatch) => ({ + onMount: () => dispatch(resetOrderDetails()), +}); + +export default connect( + () => ({}), + mapDispatchToProps +)(MainScreen); diff --git a/src/images/icon_location.png b/src/images/icon_location.png new file mode 100644 index 0000000000000000000000000000000000000000..77ea22e453616f3bd934fe03d1311e769188495b GIT binary patch literal 24793 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 Ef|#<+>;M1& literal 0 HcmV?d00001 diff --git a/src/lib/map.js b/src/lib/map.js index 52e5ef2..025caae 100644 --- a/src/lib/map.js +++ b/src/lib/map.js @@ -2,6 +2,7 @@ import mapboxgl from 'mapbox-gl'; import 'mapbox-gl/dist/mapbox-gl.css'; import { makeImage } from './utils'; import droneIcon from '../images/icon_drone.png'; +import locationIcon from '../images/icon_location.png'; import pickupIcon from '../images/pin-pickup.svg'; import dropoffIcon from '../images/pin-dropoff.svg'; import mapStyle from './map_style.json'; @@ -47,6 +48,7 @@ export const createMap = ({ coords, onVehicleClick, onMoveEnd, + addControls }) => { // Add support for right-to-left languages mapboxgl.setRTLTextPlugin( @@ -62,29 +64,34 @@ export const createMap = ({ attributionControl: false, }); - // Add controls to geolocate the user - map.addControl( - new mapboxgl.GeolocateControl({ - positionOptions: { - enableHighAccuracy: true, - }, - trackUserLocation: true, - }), - 'bottom-left', - ); - // Add minimal attribution controls - map.addControl( - new mapboxgl.AttributionControl({ - compact: true, - }), - ); + if (addControls){ + // Add controls to geolocate the user + map.addControl( + new mapboxgl.GeolocateControl({ + positionOptions: { + enableHighAccuracy: true, + }, + trackUserLocation: true, + }), + 'bottom-left', + ); + + // Add minimal attribution controls + map.addControl( + new mapboxgl.AttributionControl({ + compact: true, + }), + ); + } // add images, sources, and layers on load map.on('load', () => { + addUserLocationIcon(map, coords); makeImage(droneIcon).then(img => map.addImage('drone', img)); makeImage(pickupIcon).then(img => map.addImage('pickup', img)); makeImage(dropoffIcon).then(img => map.addImage('dropoff', img)); + makeImage(locationIcon).then(img => map.addImage('location', img)); map.addSource('vehicles', { type: 'geojson', data: { @@ -167,6 +174,31 @@ export const clearTerminals = map => { } }; +const addUserLocationIcon = (map, coords) => { + if (!map.getSource('location')){ + map.addSource('location', { + type: 'geojson', + data: { + type: 'FeatureCollection', + features: [], + } + }); + map.addLayer({ + id: 'location', + type: 'symbol', + source: 'location', + minzoom: 10, + layout: { + 'icon-image': 'location', + 'icon-allow-overlap': true, + 'icon-ignore-placement': true, + }, + }); + } + + map.getSource('location').setData(turf.point([coords.long, coords.lat])); +}; + export const addTerminals = map => { if (!map.getSource('pickup') && !map.getSource('dropoff')) { map.addSource('pickup', { diff --git a/webpack.common.js b/webpack.common.js index e7297c4..9605d4a 100644 --- a/webpack.common.js +++ b/webpack.common.js @@ -7,6 +7,7 @@ module.exports = (env = 'development') => { entry: { drone_simulation: './src/apps/drone_simulation/Main.jsx', delivery_drones: './src/apps/delivery_drones/Main.jsx', + drone_charging: './src/apps/drone_charging/Main.jsx', vendor: [ 'mapbox-gl', 'react', diff --git a/webpack.dev.js b/webpack.dev.js index 6876575..3fae614 100644 --- a/webpack.dev.js +++ b/webpack.dev.js @@ -27,6 +27,12 @@ module.exports = merge(getCommon(process.env.NODE_ENV), { template: path.resolve(__dirname, 'src/index.html'), favicon: path.resolve(__dirname, 'src/favicon.ico'), }), + new HtmlWebpackPlugin({ + filename: 'drone_charging/index.html', + chunks: ['vendor', 'drone_charging'], + template: path.resolve(__dirname, 'src/index.html'), + favicon: path.resolve(__dirname, 'src/favicon.ico'), + }), new webpack.DefinePlugin({ 'process.env': { NODE_ENV: JSON.stringify(process.env.NODE_ENV), diff --git a/webpack.prod.js b/webpack.prod.js index 103fddd..645e3e4 100644 --- a/webpack.prod.js +++ b/webpack.prod.js @@ -32,6 +32,12 @@ module.exports = merge(getCommon(process.env.NODE_ENV), { template: path.resolve(__dirname, 'src/index.html'), favicon: path.resolve(__dirname, 'src/favicon.ico'), }), + new HtmlWebpackPlugin({ + filename: 'drone_charging.html', + chunks: ['vendor', 'drone_charging'], + template: path.resolve(__dirname, 'src/index.html'), + favicon: path.resolve(__dirname, 'src/favicon.ico'), + }), new CopyWebpackPlugin([ { from: 'src/images', to: 'images' }, { from: 'src/browserconfig.xml' }, diff --git a/webpack.stg.js b/webpack.stg.js index 3bb449f..878c4d1 100644 --- a/webpack.stg.js +++ b/webpack.stg.js @@ -32,6 +32,12 @@ module.exports = merge(getCommon(process.env.NODE_ENV), { template: path.resolve(__dirname, 'src/index.html'), favicon: path.resolve(__dirname, 'src/favicon.ico'), }), + new HtmlWebpackPlugin({ + filename: 'drone_charging.html', + chunks: ['vendor', 'drone_charging'], + template: path.resolve(__dirname, 'src/index.html'), + favicon: path.resolve(__dirname, 'src/favicon.ico'), + }), new CopyWebpackPlugin([ { from: 'src/images', to: 'images' }, { from: 'src/browserconfig.xml' }, From 28264395a620d63892e13b872a9965d8cd15c3e6 Mon Sep 17 00:00:00 2001 From: Timi Ajiboye Date: Thu, 5 Apr 2018 16:50:43 +0100 Subject: [PATCH 049/180] fix: showing user location after it has been gotten --- src/lib/map.js | 51 ++++++++++++++++++++++++++------------------------ 1 file changed, 27 insertions(+), 24 deletions(-) diff --git a/src/lib/map.js b/src/lib/map.js index 025caae..3314f1d 100644 --- a/src/lib/map.js +++ b/src/lib/map.js @@ -1,6 +1,6 @@ import mapboxgl from 'mapbox-gl'; import 'mapbox-gl/dist/mapbox-gl.css'; -import { makeImage } from './utils'; +import {makeImage} from './utils'; import droneIcon from '../images/icon_drone.png'; import locationIcon from '../images/icon_location.png'; import pickupIcon from '../images/pin-pickup.svg'; @@ -39,7 +39,7 @@ const hasGeolocationPermission = () => new Promise((resolve, reject) => { if (!navigator.permissions) reject(); navigator.permissions - .query({ name: 'geolocation' }) + .query({name: 'geolocation'}) .then(result => (result.state === 'granted' ? resolve() : reject())); }); @@ -65,7 +65,7 @@ export const createMap = ({ }); - if (addControls){ + if (addControls) { // Add controls to geolocate the user map.addControl( new mapboxgl.GeolocateControl({ @@ -87,7 +87,6 @@ export const createMap = ({ // add images, sources, and layers on load map.on('load', () => { - addUserLocationIcon(map, coords); makeImage(droneIcon).then(img => map.addImage('drone', img)); makeImage(pickupIcon).then(img => map.addImage('pickup', img)); makeImage(dropoffIcon).then(img => map.addImage('dropoff', img)); @@ -117,20 +116,23 @@ export const createMap = ({ map.on('moveend', () => { const mapCenter = map.getCenter(); - onMoveEnd({ lat: mapCenter.lat, long: mapCenter.lng }); + onMoveEnd({lat: mapCenter.lat, long: mapCenter.lng}); }); // Check if user has already granted permission to access geolocation // If permission was granted, get user location and center map on them hasGeolocationPermission() .then(getUserLocation) - .then(({ coords }) => map.setCenter([coords.longitude, coords.latitude])) - .catch(() => {}); + .then(({coords}) => { + addUserLocationIcon(map, coords); + return map.setCenter([coords.longitude, coords.latitude]); + }) + .catch((err) => {console.log(err);}); return map; }; -export const updateMap = (map, vehicles = [], { pickup, dropoff } = {}) => { +export const updateMap = (map, vehicles = [], {pickup, dropoff} = {}) => { handleMapUpdate(map, () => { if (vehicles) map.getSource('vehicles').setData(createGeoJson(vehicles)); if (pickupAndDropoffPresent(map, pickup, dropoff)) { @@ -154,19 +156,19 @@ const pickupAndDropoffPresent = (map, pickup, dropoff) => { ); }; -export const initiateZoomTransition = (map, pickup, dropoff,options) => { +export const initiateZoomTransition = (map, pickup, dropoff, options) => { handleMapUpdate(map, () => { const collection = turf.featureCollection([ turf.point([pickup.long, pickup.lat]), turf.point([dropoff.long, dropoff.lat]), ]); let bbox = turf.bbox(collection); - map.fitBounds(bbox, {...options, padding: {top:100,bottom:300,left:50,right:50} }); + map.fitBounds(bbox, {...options, padding: {top: 100, bottom: 300, left: 50, right: 50}}); }); }; export const clearTerminals = map => { - if (map.getSource('pickup') && map.getSource('dropoff')){ + if (map.getSource('pickup') && map.getSource('dropoff')) { map.removeLayer('pickup'); map.removeLayer('dropoff'); map.removeSource('pickup'); @@ -175,7 +177,7 @@ export const clearTerminals = map => { }; const addUserLocationIcon = (map, coords) => { - if (!map.getSource('location')){ + if (!map.getSource('location')) { map.addSource('location', { type: 'geojson', data: { @@ -183,20 +185,21 @@ const addUserLocationIcon = (map, coords) => { features: [], } }); - map.addLayer({ - id: 'location', - type: 'symbol', - source: 'location', - minzoom: 10, - layout: { - 'icon-image': 'location', - 'icon-allow-overlap': true, - 'icon-ignore-placement': true, - }, - }); } - map.getSource('location').setData(turf.point([coords.long, coords.lat])); + map.addLayer({ + id: 'location', + type: 'symbol', + source: 'location', + minzoom: 10, + layout: { + 'icon-image': 'location', + 'icon-allow-overlap': true, + 'icon-ignore-placement': true, + }, + }); + + map.getSource('location').setData(turf.point([coords.longitude, coords.latitude])); }; export const addTerminals = map => { From 30614b5dfec647147c4832137f9cffa862d53f63 Mon Sep 17 00:00:00 2001 From: Timi Ajiboye Date: Thu, 5 Apr 2018 17:06:38 +0100 Subject: [PATCH 050/180] fix: show controls for delivery_drones app --- src/components/Map.jsx | 3 ++- src/images/icon_charging_station.png | Bin 0 -> 5086 bytes src/lib/map.js | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) create mode 100644 src/images/icon_charging_station.png diff --git a/src/components/Map.jsx b/src/components/Map.jsx index c87cbd8..2288124 100644 --- a/src/components/Map.jsx +++ b/src/components/Map.jsx @@ -58,7 +58,8 @@ class Map extends Component { 'containerId': 'map', 'coords': this.props.coords, 'onVehicleClick': this.onVehicleClick, - 'onMoveEnd': this.props.onMoveEnd + 'onMoveEnd': this.props.onMoveEnd, + 'addControls': this.props.addControls }); const terminals = { pickup: this.props.pickup, diff --git a/src/images/icon_charging_station.png b/src/images/icon_charging_station.png new file mode 100644 index 0000000000000000000000000000000000000000..0a346c696552daba22c2c7a41fde68404a892805 GIT binary patch literal 5086 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 {console.log(err);}); + .catch(() => {}); return map; }; From 3c72767c411eb33f552d285e95ebe8b8e6fb8a34 Mon Sep 17 00:00:00 2001 From: Timi Ajiboye Date: Thu, 5 Apr 2018 19:38:53 +0100 Subject: [PATCH 051/180] chore: added charging stations icon and temporary code to simulate them on map --- src/components/Map.jsx | 2 ++ src/lib/map.js | 69 ++++++++++++++++++++++++++++++++++++++---- 2 files changed, 65 insertions(+), 6 deletions(-) diff --git a/src/components/Map.jsx b/src/components/Map.jsx index 2288124..c505e3f 100644 --- a/src/components/Map.jsx +++ b/src/components/Map.jsx @@ -53,6 +53,8 @@ class Map extends Component { } } + + componentDidMount() { this.map = createMap({ 'containerId': 'map', diff --git a/src/lib/map.js b/src/lib/map.js index 9575bd4..fc39a4c 100644 --- a/src/lib/map.js +++ b/src/lib/map.js @@ -3,11 +3,14 @@ import 'mapbox-gl/dist/mapbox-gl.css'; import {makeImage} from './utils'; import droneIcon from '../images/icon_drone.png'; import locationIcon from '../images/icon_location.png'; +import chargingStationIcon from '../images/icon_charging_station.png'; import pickupIcon from '../images/pin-pickup.svg'; import dropoffIcon from '../images/pin-dropoff.svg'; import mapStyle from './map_style.json'; import turf from 'turf'; +const icons = {droneIcon, locationIcon, chargingStationIcon, pickupIcon, dropoffIcon}; + const createGeoJson = (features = []) => { return { type: 'FeatureCollection', @@ -87,10 +90,11 @@ export const createMap = ({ // add images, sources, and layers on load map.on('load', () => { - makeImage(droneIcon).then(img => map.addImage('drone', img)); - makeImage(pickupIcon).then(img => map.addImage('pickup', img)); - makeImage(dropoffIcon).then(img => map.addImage('dropoff', img)); - makeImage(locationIcon).then(img => map.addImage('location', img)); + Object.keys(icons).forEach((key) => { + const imgId = key.replace('Icon', ''); + makeImage(icons[key]).then(img => map.addImage(imgId, img)); + }); + map.addSource('vehicles', { type: 'geojson', data: { @@ -109,6 +113,27 @@ export const createMap = ({ 'icon-ignore-placement': true, }, }); + + map.addSource('chargingStations', { + type: 'geojson', + data: { + type: 'FeatureCollection', + features: [], + }, + }); + + map.addLayer({ + id: 'chargingStations', + type: 'symbol', + source: 'chargingStations', + minzoom: 10, + layout: { + 'icon-image': 'chargingStation', + 'icon-allow-overlap': true, + 'icon-ignore-placement': true, + }, + }); + map.on('click', 'vehicles', e => onVehicleClick(e.features[0].properties.id), ); @@ -125,23 +150,31 @@ export const createMap = ({ .then(getUserLocation) .then(({coords}) => { addUserLocationIcon(map, coords); + let chargingStations = addControls ? [] : generateRandomChargingStations(coords); + addChargingStations(map, chargingStations); return map.setCenter([coords.longitude, coords.latitude]); }) - .catch(() => {}); + .catch(() => { + }); return map; }; -export const updateMap = (map, vehicles = [], {pickup, dropoff} = {}) => { +export const updateMap = (map, vehicles = [], {pickup, dropoff} = {}, chargingStations = []) => { handleMapUpdate(map, () => { if (vehicles) map.getSource('vehicles').setData(createGeoJson(vehicles)); if (pickupAndDropoffPresent(map, pickup, dropoff)) { map.getSource('pickup').setData(turf.point([pickup.long, pickup.lat])); map.getSource('dropoff').setData(turf.point([dropoff.long, dropoff.lat])); } + addChargingStations(map, chargingStations); }); }; +const addChargingStations = (map, chargingStations) => { + if (chargingStations) map.getSource('chargingStations').setData(createGeoJson(chargingStations)); +}; + const handleMapUpdate = (map, update) => { if (!map.loaded()) { map.on('load', update); @@ -242,3 +275,27 @@ export const addTerminals = map => { }); } }; + + +// generate random charging stations just for viewing/testing purposes +const generateRandomChargingStations = (coords) => { + let chargingStations = []; + for (let i = 0; i < 4; i++) { + chargingStations.push({coords: randomCoords({coords, radius: 1000})}); + } + return chargingStations; +}; + +const randomCoords = ({ coords, radius }) => { + const angle = Math.random() * 2 * Math.PI; + const distance = Math.random() * radius; + const longDegreesPerMeter = 1 / 111321.377778; // longitude degrees per meter + const latDegreesPerMeter = 1 / 111134.86111; // latitude degrees per meter + const x = parseFloat( + (coords.latitude + latDegreesPerMeter * distance * Math.cos(angle)).toFixed(6), + ); + const y = parseFloat( + (coords.longitude + longDegreesPerMeter * distance * Math.sin(angle)).toFixed(6), + ); + return { lat: x, long: y }; +}; From 3d79ee44aa78befe93bf487f4e161fad034a5c8e Mon Sep 17 00:00:00 2001 From: pawan pandey Date: Fri, 6 Apr 2018 11:08:48 +0530 Subject: [PATCH 052/180] make shiftCoords function test meaningful --- test/specs/lib.utils.spec.js | 21 +++------------------ 1 file changed, 3 insertions(+), 18 deletions(-) diff --git a/test/specs/lib.utils.spec.js b/test/specs/lib.utils.spec.js index b3d2bc6..3b8fbc4 100644 --- a/test/specs/lib.utils.spec.js +++ b/test/specs/lib.utils.spec.js @@ -4,25 +4,10 @@ import * as utils from '../../src/lib/utils'; describe('shiftCoords function', () => { const coordinates = { lat: 19.14641, long: 73.1424 }; - let shiftCoordsSpy; - beforeAll(() => { - shiftCoordsSpy = jest.spyOn(utils, 'shiftCoords'); - }); - - afterAll(() => { - shiftCoordsSpy.mockClear(); - }); - - it('should receive one object', () => { - utils.shiftCoords(coordinates); - expect(shiftCoordsSpy.mock.calls[0].length).toBe(1); - expect(typeof shiftCoordsSpy.mock.calls[0][0]).toBe('object'); - }); - - it('input object should be a coordinate', () => { - utils.shiftCoords(coordinates); - expect(Object.keys(shiftCoordsSpy.mock.calls[0][0])).toEqual(expect.arrayContaining(['lat', 'long'])); + it('return undefined if input object is not a coordinate', () => { + const output = utils.shiftCoords({ other : 'than', a : 'coordinate' }); + expect(output).toEqual(undefined); }); it('should return one object', () => { From dc2fb6707ee3243ef68053b274d9fae1a19dac8c Mon Sep 17 00:00:00 2001 From: Timi Ajiboye Date: Sun, 8 Apr 2018 18:54:13 +0100 Subject: [PATCH 053/180] chore: added user profile icon and user location text labels --- src/components/MainScreen.css | 23 ++++++++++++++++++++ src/components/drone_charging/MainScreen.jsx | 9 ++++++++ src/images/icon_signed_out.svg | 15 +++++++++++++ 3 files changed, 47 insertions(+) create mode 100644 src/images/icon_signed_out.svg diff --git a/src/components/MainScreen.css b/src/components/MainScreen.css index 8b55daf..59deda3 100644 --- a/src/components/MainScreen.css +++ b/src/components/MainScreen.css @@ -13,6 +13,7 @@ div#user-controls, a.order-button { div#header { margin: 15px auto 0; + position: relative; } div#logo { @@ -40,3 +41,25 @@ div#user-controls { a.order-button { margin: 0 auto 10px; } + +/* */ + +.profile { + position: absolute; + top: 15px; + right: -10px; +} + +.user-location { + margin-top: auto; + padding: 30px; +} + +.user-location h3 { + font-size: 19px; + font-weight: 400; +} + +.user-location p { + color: #807B9C; +} diff --git a/src/components/drone_charging/MainScreen.jsx b/src/components/drone_charging/MainScreen.jsx index 2b86bd9..9e438cc 100644 --- a/src/components/drone_charging/MainScreen.jsx +++ b/src/components/drone_charging/MainScreen.jsx @@ -3,6 +3,7 @@ import PropTypes from 'prop-types'; import Link from '../../containers/LinkContainer.jsx'; import '../MainScreen.css'; import logo from '../../images/logo_missions.svg'; +import iconUser from '../../images/icon_signed_out.svg'; class MainScreen extends Component { @@ -17,6 +18,14 @@ class MainScreen extends Component { Missions powered by DAV
4 charging stations available in viewable area + + + +
+ +
+

Your Location

+

1556 Broadway, suite 416

Find Charging Stations
diff --git a/src/images/icon_signed_out.svg b/src/images/icon_signed_out.svg new file mode 100644 index 0000000..144c0ca --- /dev/null +++ b/src/images/icon_signed_out.svg @@ -0,0 +1,15 @@ + + + + user + Created with Sketch. + + + + + + + + + + \ No newline at end of file From 1fe5d6b9a20e932bfd6fc62f33721d5bad4f78cf Mon Sep 17 00:00:00 2001 From: Timi Ajiboye Date: Sun, 8 Apr 2018 20:52:30 +0100 Subject: [PATCH 054/180] feat: changed vehicle detail components & containers to mapItem detail components to accommodate charging stations and other item types --- src/apps/delivery_drones/App.jsx | 8 ++--- src/apps/drone_charging/App.jsx | 8 ++++- src/apps/drone_simulation/App.jsx | 8 ++--- src/components/Map.jsx | 31 +++++++++---------- .../{VehicleCard.jsx => MapItemCard.jsx} | 6 ++-- ...{VehicleDetails.css => MapItemDetails.css} | 0 src/components/MapItemDetails.jsx | 18 +++++++++++ ...ilsScreen.jsx => MapItemDetailsScreen.jsx} | 10 +++--- src/components/SearchingScreen.jsx | 4 +-- src/components/VehicleBid.jsx | 4 +-- src/components/VehicleBidPreview.jsx | 4 +-- src/components/VehicleDetails.jsx | 18 ----------- src/containers/MapItemDetailsContainer.jsx | 10 ++++++ ....jsx => MapItemDetailsScreenContainer.jsx} | 4 +-- src/containers/UserCardContainer.jsx | 4 +-- src/containers/VehicleDetailsContainer.jsx | 8 ----- src/lib/map.js | 14 +++++---- 17 files changed, 84 insertions(+), 75 deletions(-) rename src/components/{VehicleCard.jsx => MapItemCard.jsx} (86%) rename src/components/{VehicleDetails.css => MapItemDetails.css} (100%) create mode 100644 src/components/MapItemDetails.jsx rename src/components/{VehicleDetailsScreen.jsx => MapItemDetailsScreen.jsx} (69%) delete mode 100644 src/components/VehicleDetails.jsx create mode 100644 src/containers/MapItemDetailsContainer.jsx rename src/containers/{VehicleDetailsScreenContainer.jsx => MapItemDetailsScreenContainer.jsx} (57%) delete mode 100644 src/containers/VehicleDetailsContainer.jsx diff --git a/src/apps/delivery_drones/App.jsx b/src/apps/delivery_drones/App.jsx index cc6a3b5..0043676 100644 --- a/src/apps/delivery_drones/App.jsx +++ b/src/apps/delivery_drones/App.jsx @@ -3,7 +3,7 @@ import { BrowserRouter as Router, Route } from 'react-router-dom'; import { initializeApp } from '../../lib/app'; import Map from '../../containers/MapContainer.jsx'; import MainScreenContainer from '../../containers/MainScreenContainer.jsx'; -import VehicleDetailsScreenContainer from '../../containers/VehicleDetailsScreenContainer.jsx'; +import MapItemDetailsScreenContainer from '../../containers/MapItemDetailsScreenContainer.jsx'; import OrderScreenContainer from '../../containers/OrderScreenContainer.jsx'; import MissionContainer from '../../containers/MissionContainer.jsx'; import SearchingScreenContainer from '../../containers/SearchingScreenContainer.jsx'; @@ -26,15 +26,15 @@ class App extends Component { - - + + - + diff --git a/src/apps/drone_charging/App.jsx b/src/apps/drone_charging/App.jsx index de78a91..4d601b5 100644 --- a/src/apps/drone_charging/App.jsx +++ b/src/apps/drone_charging/App.jsx @@ -3,6 +3,7 @@ import {BrowserRouter as Router, Route} from 'react-router-dom'; import Map from '../../containers/MapContainer.jsx'; import {initializeApp} from '../../lib/app'; import MainScreenContainer from '../../containers/drone_charging/MainScreenContainer.jsx'; +import MapItemDetailsScreenContainer from '../../containers/MapItemDetailsScreenContainer.jsx'; class App extends Component { @@ -15,7 +16,12 @@ class App extends Component {
- + + + + + +
); diff --git a/src/apps/drone_simulation/App.jsx b/src/apps/drone_simulation/App.jsx index b7dd48c..ab7cc5d 100644 --- a/src/apps/drone_simulation/App.jsx +++ b/src/apps/drone_simulation/App.jsx @@ -3,7 +3,7 @@ import { BrowserRouter as Router, Route } from 'react-router-dom'; import { initializeApp } from '../../lib/app'; import Map from '../../containers/MapContainer.jsx'; import MainScreenContainer from '../../containers/MainScreenContainer.jsx'; -import VehicleDetailsScreenContainer from '../../containers/VehicleDetailsScreenContainer.jsx'; +import MapItemDetailsScreenContainer from '../../containers/MapItemDetailsScreenContainer.jsx'; import OrderScreenContainer from '../../containers/OrderScreenContainer.jsx'; import MissionContainer from '../../containers/MissionContainer.jsx'; import SearchingScreenContainer from '../../containers/SearchingScreenContainer.jsx'; @@ -26,15 +26,15 @@ class App extends Component { - - + + - + diff --git a/src/components/Map.jsx b/src/components/Map.jsx index c505e3f..7a8fddc 100644 --- a/src/components/Map.jsx +++ b/src/components/Map.jsx @@ -1,13 +1,13 @@ -import React, { Component } from 'react'; +import React, {Component} from 'react'; import PropTypes from 'prop-types'; -import { createMap, updateMap, initiateZoomTransition, clearTerminals, addTerminals} from '../lib/map'; +import {createMap, updateMap, initiateZoomTransition, clearTerminals, addTerminals} from '../lib/map'; import './Map.css'; class Map extends Component { constructor(props) { super(props); this.map = null; - this.onVehicleClick = this.onVehicleClick.bind(this); + this.onMapItemClick = this.onMapItemClick.bind(this); } shouldComponentUpdate(nextProps) { @@ -18,8 +18,8 @@ class Map extends Component { updateMap(this.map, nextProps.vehicles, terminals); - if(this.props.orderStage === 'draft' && nextProps.orderStage === 'searching') { - initiateZoomTransition(this.map, nextProps.pickup, nextProps.pickup,{maxZoom:14}); + if (this.props.orderStage === 'draft' && nextProps.orderStage === 'searching') { + initiateZoomTransition(this.map, nextProps.pickup, nextProps.pickup, {maxZoom: 14}); addTerminals(this.map); } @@ -27,7 +27,7 @@ class Map extends Component { clearTerminals(this.map); } - if(['searching', 'choosing', 'signing'].includes(this.props.orderStage) && nextProps.orderStage === 'draft') { + if (['searching', 'choosing', 'signing'].includes(this.props.orderStage) && nextProps.orderStage === 'draft') { clearTerminals(this.map); } else { addTerminals(this.map); @@ -36,30 +36,29 @@ class Map extends Component { if (nextProps.orderStage === 'in_mission') { initiateZoomTransition(this.map, nextProps.pickup, nextProps.dropoff); if (this.props.vehicles.length > 0 && nextProps.vehicles[0].status === 'waiting_pickup') { - this.props.history.push(this.props.appPath+'/confirm-takeoff'); + this.props.history.push(this.props.appPath + '/confirm-takeoff'); } else { - this.props.history.push(this.props.appPath+'/mission'); + this.props.history.push(this.props.appPath + '/mission'); } } return false; } - onVehicleClick(id) { - if (this.props.orderStage == 'in_mission'){ - this.props.history.push(this.props.appPath+'/mission/vehicle/'+id); + onMapItemClick({id, mapItemType}) { + if (this.props.orderStage == 'in_mission') { + this.props.history.push(this.props.appPath + `/mission/${mapItemType}/` + id); } else { - this.props.history.push(this.props.appPath+'/vehicle/'+id); + this.props.history.push(this.props.appPath + `/${mapItemType}/` + id); } } - componentDidMount() { this.map = createMap({ 'containerId': 'map', 'coords': this.props.coords, - 'onVehicleClick': this.onVehicleClick, + 'onMapItemClick': this.onMapItemClick, 'onMoveEnd': this.props.onMoveEnd, 'addControls': this.props.addControls }); @@ -73,8 +72,8 @@ class Map extends Component { render() { return (
-
-
+
+
); } diff --git a/src/components/VehicleCard.jsx b/src/components/MapItemCard.jsx similarity index 86% rename from src/components/VehicleCard.jsx rename to src/components/MapItemCard.jsx index 95c89b4..9e14cbc 100644 --- a/src/components/VehicleCard.jsx +++ b/src/components/MapItemCard.jsx @@ -1,7 +1,7 @@ import React from 'react'; import PropTypes from 'prop-types'; -const VehicleCard = ({ id, icon, model, buttonText, buttonOnClick, buttonClass }) => { +const MapItemCard = ({ id, icon, model, buttonText, buttonOnClick, buttonClass }) => { let buttonClasses = ['med-button']; if (buttonClass) buttonClasses.push(buttonClass); return ( @@ -18,7 +18,7 @@ const VehicleCard = ({ id, icon, model, buttonText, buttonOnClick, buttonClass } ); }; -VehicleCard.propTypes = { +MapItemCard.propTypes = { id: PropTypes.string, icon: PropTypes.string.isRequired, model: PropTypes.string.isRequired, @@ -27,4 +27,4 @@ VehicleCard.propTypes = { buttonClass: PropTypes.string, }; -export default VehicleCard; +export default MapItemCard; diff --git a/src/components/VehicleDetails.css b/src/components/MapItemDetails.css similarity index 100% rename from src/components/VehicleDetails.css rename to src/components/MapItemDetails.css diff --git a/src/components/MapItemDetails.jsx b/src/components/MapItemDetails.jsx new file mode 100644 index 0000000..f114852 --- /dev/null +++ b/src/components/MapItemDetails.jsx @@ -0,0 +1,18 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import MapItemCard from './MapItemCard.jsx'; +import './MapItemDetails.css'; + +const MapItemDetails = ({mapItem}) => ( +
+ +
{mapItem.missions_completed} missions completed successfully
+
{mapItem.missions_completed_7_days} missions completed successfully in last 7 days
+
+); + +MapItemDetails.propTypes = { + mapItem: PropTypes.object.isRequired, +}; + +export default MapItemDetails; diff --git a/src/components/VehicleDetailsScreen.jsx b/src/components/MapItemDetailsScreen.jsx similarity index 69% rename from src/components/VehicleDetailsScreen.jsx rename to src/components/MapItemDetailsScreen.jsx index b2999d1..ac2f590 100644 --- a/src/components/VehicleDetailsScreen.jsx +++ b/src/components/MapItemDetailsScreen.jsx @@ -1,8 +1,8 @@ import React, { Component } from 'react'; import PropTypes from 'prop-types'; -import VehicleDetailsContainer from '../containers/VehicleDetailsContainer.jsx'; +import MapItemDetailsContainer from '../containers/MapItemDetailsContainer.jsx'; -class VehicleDetailsScreen extends Component { +class MapItemDetailsScreen extends Component { constructor(props){ super(props); @@ -20,7 +20,7 @@ class VehicleDetailsScreen extends Component {
- +
@@ -28,9 +28,9 @@ class VehicleDetailsScreen extends Component { } } -VehicleDetailsScreen.propTypes = { +MapItemDetailsScreen.propTypes = { match: PropTypes.object.isRequired, history: PropTypes.object.isRequired }; -export default VehicleDetailsScreen; +export default MapItemDetailsScreen; diff --git a/src/components/SearchingScreen.jsx b/src/components/SearchingScreen.jsx index 223b9cb..1e445a5 100644 --- a/src/components/SearchingScreen.jsx +++ b/src/components/SearchingScreen.jsx @@ -3,7 +3,7 @@ import PropTypes from 'prop-types'; import Link from '../containers/LinkContainer.jsx'; import VehicleBid from './VehicleBid.jsx'; import VehicleBidPreview from './VehicleBidPreview.jsx'; -import VehicleCard from './VehicleCard.jsx'; +import MapItemCard from './MapItemCard.jsx'; import UserCardContainer from '../containers/UserCardContainer.jsx'; import BidSelectionHeader from '../components/BidSelectionHeader.jsx'; import './SearchingScreen.css'; @@ -165,7 +165,7 @@ class SearchingScreen extends Component {

Initiating DAV Transaction

Signing secure smart contract between:

- { @@ -15,7 +15,7 @@ const VehicleBid = ({bid, vehicle, shown, chooseBid}) => { } return (
- +
Estimated pickup time:
in {Math.ceil(bid.time_to_pickup/60000)} minutes
diff --git a/src/components/VehicleBidPreview.jsx b/src/components/VehicleBidPreview.jsx index 2c34054..16e59df 100644 --- a/src/components/VehicleBidPreview.jsx +++ b/src/components/VehicleBidPreview.jsx @@ -1,10 +1,10 @@ import React from 'react'; import PropTypes from 'prop-types'; -import VehicleCard from './VehicleCard.jsx'; +import MapItemCard from './MapItemCard.jsx'; const VehicleBidPreview = ({vehicle}) => (
- +
); diff --git a/src/components/VehicleDetails.jsx b/src/components/VehicleDetails.jsx deleted file mode 100644 index 7c3bdfa..0000000 --- a/src/components/VehicleDetails.jsx +++ /dev/null @@ -1,18 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import VehicleCard from './VehicleCard.jsx'; -import './VehicleDetails.css'; - -const VehicleDetails = ({vehicle}) => ( -
- -
{vehicle.missions_completed} missions completed successfully
-
{vehicle.missions_completed_7_days} missions completed successfully in last 7 days
-
-); - -VehicleDetails.propTypes = { - vehicle: PropTypes.object.isRequired, -}; - -export default VehicleDetails; diff --git a/src/containers/MapItemDetailsContainer.jsx b/src/containers/MapItemDetailsContainer.jsx new file mode 100644 index 0000000..4453569 --- /dev/null +++ b/src/containers/MapItemDetailsContainer.jsx @@ -0,0 +1,10 @@ +import { connect } from 'react-redux'; +import MapItemDetails from '../components/MapItemDetails.jsx'; + +export default connect( + (state, ownProps) => { + return { + mapItem: state[ownProps.mapItemType][ownProps.id] + }; + } +)(MapItemDetails); diff --git a/src/containers/VehicleDetailsScreenContainer.jsx b/src/containers/MapItemDetailsScreenContainer.jsx similarity index 57% rename from src/containers/VehicleDetailsScreenContainer.jsx rename to src/containers/MapItemDetailsScreenContainer.jsx index 85d8441..f12fd54 100644 --- a/src/containers/VehicleDetailsScreenContainer.jsx +++ b/src/containers/MapItemDetailsScreenContainer.jsx @@ -1,9 +1,9 @@ import { connect } from 'react-redux'; import { withRouter } from 'react-router-dom'; -import VehicleDetailsScreen from '../components/VehicleDetailsScreen.jsx'; +import MapItemDetailsScreen from '../components/MapItemDetailsScreen.jsx'; export default connect( () => ({}), -)(withRouter(VehicleDetailsScreen)); +)(withRouter(MapItemDetailsScreen)); diff --git a/src/containers/UserCardContainer.jsx b/src/containers/UserCardContainer.jsx index 2f2642c..c4f05ee 100644 --- a/src/containers/UserCardContainer.jsx +++ b/src/containers/UserCardContainer.jsx @@ -1,5 +1,5 @@ import { connect } from 'react-redux'; -import VehicleCard from '../components/VehicleCard.jsx'; +import MapItemCard from '../components/MapItemCard.jsx'; export default connect( (state) => ({ @@ -7,4 +7,4 @@ export default connect( icon: state.settings['user_icon'], model: 'You', }) -)(VehicleCard); +)(MapItemCard); diff --git a/src/containers/VehicleDetailsContainer.jsx b/src/containers/VehicleDetailsContainer.jsx deleted file mode 100644 index 386e2f7..0000000 --- a/src/containers/VehicleDetailsContainer.jsx +++ /dev/null @@ -1,8 +0,0 @@ -import { connect } from 'react-redux'; -import VehicleDetails from '../components/VehicleDetails.jsx'; - -export default connect( - (state, ownProps) => ({ - vehicle: state.vehicles[ownProps.vehicleUid] - }) -)(VehicleDetails); diff --git a/src/lib/map.js b/src/lib/map.js index fc39a4c..bdf5b77 100644 --- a/src/lib/map.js +++ b/src/lib/map.js @@ -49,7 +49,7 @@ const hasGeolocationPermission = () => export const createMap = ({ containerId, coords, - onVehicleClick, + onMapItemClick, onMoveEnd, addControls }) => { @@ -134,9 +134,11 @@ export const createMap = ({ }, }); - map.on('click', 'vehicles', e => - onVehicleClick(e.features[0].properties.id), - ); + ['vehicles', 'chargingStations'].forEach((mapItemType) => { + map.on('click', mapItemType, e => + onMapItemClick({id: e.features[0].properties.id, mapItemType: mapItemType}), + ); + }); }); map.on('moveend', () => { @@ -286,7 +288,7 @@ const generateRandomChargingStations = (coords) => { return chargingStations; }; -const randomCoords = ({ coords, radius }) => { +const randomCoords = ({coords, radius}) => { const angle = Math.random() * 2 * Math.PI; const distance = Math.random() * radius; const longDegreesPerMeter = 1 / 111321.377778; // longitude degrees per meter @@ -297,5 +299,5 @@ const randomCoords = ({ coords, radius }) => { const y = parseFloat( (coords.longitude + longDegreesPerMeter * distance * Math.sin(angle)).toFixed(6), ); - return { lat: x, long: y }; + return {lat: x, long: y}; }; From ee0fc709ba17eab8b8594b1d0203fd7549cf457f Mon Sep 17 00:00:00 2001 From: cg-cnu Date: Tue, 10 Apr 2018 12:24:37 +0530 Subject: [PATCH 055/180] fix: support 0 values in cords --- src/lib/utils.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/lib/utils.js b/src/lib/utils.js index 4e2ee42..b34f26e 100644 --- a/src/lib/utils.js +++ b/src/lib/utils.js @@ -28,7 +28,9 @@ export const getShortCoordsString = ( ) => { const { lat, long } = coords; return ( - lat && long && lat.toFixed(precision) + separator + long.toFixed(precision) + (lat || lat === 0) && + (long || long === 0) && + `${lat.toFixed(precision)}${separator}${long.toFixed(precision)}` ); }; From 6e2b93ec756dd3e9d7d595690e1afcf3d64797fc Mon Sep 17 00:00:00 2001 From: Timi Ajiboye Date: Wed, 11 Apr 2018 04:09:07 +0100 Subject: [PATCH 056/180] feat: started order screen UI (and some functionality) --- src/apps/delivery_drones/App.jsx | 6 +- src/apps/drone_charging/App.jsx | 10 +- src/apps/drone_simulation/App.jsx | 6 +- src/components/drone_charging/OrderScreen.jsx | 210 ++++++++++++++++++ src/containers/MainScreenContainer.jsx | 18 +- src/containers/OrderScreenContainer.jsx | 58 +++-- .../drone_charging/MainScreenContainer.jsx | 12 - src/lib/map.js | 6 +- 8 files changed, 273 insertions(+), 53 deletions(-) create mode 100644 src/components/drone_charging/OrderScreen.jsx delete mode 100644 src/containers/drone_charging/MainScreenContainer.jsx diff --git a/src/apps/delivery_drones/App.jsx b/src/apps/delivery_drones/App.jsx index 0043676..e1da104 100644 --- a/src/apps/delivery_drones/App.jsx +++ b/src/apps/delivery_drones/App.jsx @@ -22,14 +22,14 @@ class App extends Component {
- + - + - + diff --git a/src/apps/drone_charging/App.jsx b/src/apps/drone_charging/App.jsx index 4d601b5..b7465a9 100644 --- a/src/apps/drone_charging/App.jsx +++ b/src/apps/drone_charging/App.jsx @@ -2,7 +2,8 @@ import React, {Component} from 'react'; import {BrowserRouter as Router, Route} from 'react-router-dom'; import Map from '../../containers/MapContainer.jsx'; import {initializeApp} from '../../lib/app'; -import MainScreenContainer from '../../containers/drone_charging/MainScreenContainer.jsx'; +import MainScreenContainer from '../../containers/MainScreenContainer.jsx'; +import OrderScreenContainer from '../../containers/OrderScreenContainer.jsx'; import MapItemDetailsScreenContainer from '../../containers/MapItemDetailsScreenContainer.jsx'; class App extends Component { @@ -16,12 +17,11 @@ class App extends Component {
- + - + - - +
); diff --git a/src/apps/drone_simulation/App.jsx b/src/apps/drone_simulation/App.jsx index ab7cc5d..664d4e0 100644 --- a/src/apps/drone_simulation/App.jsx +++ b/src/apps/drone_simulation/App.jsx @@ -22,14 +22,14 @@ class App extends Component {
- + - + - + diff --git a/src/components/drone_charging/OrderScreen.jsx b/src/components/drone_charging/OrderScreen.jsx new file mode 100644 index 0000000..7cae6d6 --- /dev/null +++ b/src/components/drone_charging/OrderScreen.jsx @@ -0,0 +1,210 @@ +import React, { Component } from 'react'; +import PropTypes from 'prop-types'; +import Link from '../../containers/LinkContainer.jsx'; +import '../OrderScreen.css'; +import arrow from '../../images/arrow-left.svg'; +import Geosuggest from 'react-geosuggest'; +import x_button from '../../images/x_button.svg'; + +class OrderScreen extends Component { + constructor(props) { + super(props); + this.updateStoreFromForm = this.updateStoreFromForm.bind(this); + this.submitForm = this.submitForm.bind(this); + this.cancelForm = this.cancelForm.bind(this); + this.createOrderDetailsObject = this.createOrderDetailsObject.bind(this); + + this.state = {}; + } + + componentDidMount() { + this.props.onMount(); + } + + componentWillReceiveProps(nextProps) { + if(nextProps.registration_step === 'register_fulfilled') { + this.submitForm(); + } + } + + createOrderDetailsObject() { + const { droneLocation } = this.state; + return { + droneLocation: droneLocation ? + { address: droneLocation.description, lat: 47.397669, long: 8.5444809 } : undefined, + droneType: this.droneTypeNode.value || undefined, + currentCharge: this.currentChargeNode.value || undefined, + chargingVelocity: this.chargingVelocityNode.value || undefined, + searchRadius: this.searchRadiusNode.value || undefined + }; + } + + updateStoreFromForm(detailOverride = {}) { + const details = this.createOrderDetailsObject(); + this.props.updateOrderDetails({ ...details, ...detailOverride }); + } + + cancelForm() { + this.updateStoreFromForm({ stage: 'draft', droneLocation: null, currentCharge: null }); + } + + submitForm() { + this.updateStoreFromForm({ stage: 'searching', registration_step: 'registered' }); + let needDetails = this.createOrderDetailsObject(); + this.props.createNeed(needDetails); + this.props.history.push(this.props.appPath+'/searching'); + } + + dismissDialog() { + this.props.closeWalletDialog(); + } + + verifyIdentity() { + this.props.verifyIdentity(); + } + + registerIdentity() { + this.props.registerIdentity(); + } + + render() { + let showSignInToWalletDialog = this.props.registration_step === 'unlock_wallet'; + const signInToWalletDialog = ( +
+
+
+
+

Please Sign in To A Wallet

+

It seems that you are not signed in to
+ an existing wallet in your browser.
+ Please sign in, or create a new wallet.

+ +
+
+
); + + let showRegisterDavIdDialog = this.props.registration_step === 'register_id'; + const registerDavIdDialog = ( +
+
+
+
+
+ close button +
+

Missing DAV ID

+

This wallet is not connected to a DAV ID

+ + + Note: This is an Ethereum transaction that will
+ cost you some Gas +
+
+
+
); + + return ( +
+ + Back + +

Find Charging Station

+
+ + this.setState({ droneLocation: undefined }) + } + onSuggestSelect={ + geo => { + if (geo) { + this.setState({ droneLocation: geo }); + } + } + } + /> +
+ +
+ + { + this.searchRadiusNode = node; + }} + />km +
+ +
+ + +
+
+ + { + this.currentChargeNode = node; + }} + style={{maxWidth: '15%'}} + />% +
+
+ + +
+ + { showSignInToWalletDialog === false ? (
) : signInToWalletDialog } + { showRegisterDavIdDialog === false ? (
) : registerDavIdDialog} +
+ ); + } +} + +OrderScreen.propTypes = { + history: PropTypes.object.isRequired, + appPath: PropTypes.string, + registration_step: PropTypes.string.isRequired, + updateOrderDetails: PropTypes.func.isRequired, + createNeed: PropTypes.func.isRequired, + onMount: PropTypes.func.isRequired, + verifyIdentity: PropTypes.func.isRequired, + registerIdentity: PropTypes.func.isRequired, + closeWalletDialog: PropTypes.func.isRequired, +}; + +export default OrderScreen; diff --git a/src/containers/MainScreenContainer.jsx b/src/containers/MainScreenContainer.jsx index e86b749..bd360b4 100644 --- a/src/containers/MainScreenContainer.jsx +++ b/src/containers/MainScreenContainer.jsx @@ -1,12 +1,20 @@ import { connect } from 'react-redux'; -import MainScreen from '../components/MainScreen.jsx'; import { resetOrderDetails } from '../actions'; +let Components = {}; + +Components['ChargingMainScreen'] = require('../components/drone_charging/MainScreen.jsx').default; +Components['DeliveryMainScreen'] = require('../components/MainScreen.jsx').default; + + const mapDispatchToProps = (dispatch) => ({ onMount: () => dispatch(resetOrderDetails()), }); -export default connect( - () => ({}), - mapDispatchToProps -)(MainScreen); +const MainScreenContainer = (componentName) => { + const MainScreen = Components[componentName]; + return connect(() => ({}),mapDispatchToProps)(MainScreen); +}; + + +export default MainScreenContainer; diff --git a/src/containers/OrderScreenContainer.jsx b/src/containers/OrderScreenContainer.jsx index 1d9c17d..4397479 100644 --- a/src/containers/OrderScreenContainer.jsx +++ b/src/containers/OrderScreenContainer.jsx @@ -1,15 +1,21 @@ import { connect } from 'react-redux'; import { withRouter } from 'react-router-dom'; -import OrderScreen from '../components/OrderScreen.jsx'; import { shiftCoords } from '../lib/utils'; -import { - updateOrderDetails, - createNeed, +import { + updateOrderDetails, + createNeed, verifyDavId, registerDavId, closeWalletDialog } from '../actions'; + +let Components = {}; + +Components['ChargingOrderScreen'] = require('../components/drone_charging/OrderScreen.jsx').default; +Components['DeliveryOrderScreen'] = require('../components/OrderScreen.jsx').default; + + const mapDispatchToProps = (dispatch) => ({ updateOrderDetails: (details) => dispatch(updateOrderDetails(details)), createNeed: (need) => dispatch(createNeed(need)), @@ -19,21 +25,29 @@ const mapDispatchToProps = (dispatch) => ({ closeWalletDialog: () => dispatch(closeWalletDialog()) }); -export default connect( - (state) => { - const defaultDropoff = shiftCoords(state.map.coords); - return { - defaultDropoff, - userCoords: state.map.coords, - pickup: state.order.pickup, - dropoff: state.order.dropoff, - pickup_at: state.order.pickup_at, - size: state.order.size, - weight: state.order.weight, - registration_step: state.order.registration_step, - fetching: state.order.fetching, - appPath: state.app.path - }; - }, - mapDispatchToProps -)(withRouter(OrderScreen)); +const OrderScreenContainer = (componentName) => { + const OrderScreen = Components[componentName]; + return connect( + (state) => { + const defaultDropoff = shiftCoords(state.map.coords); + let props = { + registration_step: state.order.registration_step, + fetching: state.order.fetching, + appPath: state.app.path + }; + if (componentName === 'DeliveryOrderScreen') { + props = {...props, ...{defaultDropoff, + userCoords: state.map.coords, + pickup: state.order.pickup, + dropoff: state.order.dropoff, + pickup_at: state.order.pickup_at, + size: state.order.size, + weight: state.order.weight,}}; + } + return props; + }, + mapDispatchToProps + )(withRouter(OrderScreen)); +}; + +export default OrderScreenContainer; diff --git a/src/containers/drone_charging/MainScreenContainer.jsx b/src/containers/drone_charging/MainScreenContainer.jsx deleted file mode 100644 index 5720589..0000000 --- a/src/containers/drone_charging/MainScreenContainer.jsx +++ /dev/null @@ -1,12 +0,0 @@ -import { connect } from 'react-redux'; -import MainScreen from '../../components/drone_charging/MainScreen.jsx'; -import { resetOrderDetails } from '../../actions'; - -const mapDispatchToProps = (dispatch) => ({ - onMount: () => dispatch(resetOrderDetails()), -}); - -export default connect( - () => ({}), - mapDispatchToProps -)(MainScreen); diff --git a/src/lib/map.js b/src/lib/map.js index bdf5b77..b15b363 100644 --- a/src/lib/map.js +++ b/src/lib/map.js @@ -162,14 +162,14 @@ export const createMap = ({ return map; }; -export const updateMap = (map, vehicles = [], {pickup, dropoff} = {}, chargingStations = []) => { +export const updateMap = (map, vehicles = [], {pickup, dropoff} = {}) => { handleMapUpdate(map, () => { if (vehicles) map.getSource('vehicles').setData(createGeoJson(vehicles)); if (pickupAndDropoffPresent(map, pickup, dropoff)) { map.getSource('pickup').setData(turf.point([pickup.long, pickup.lat])); map.getSource('dropoff').setData(turf.point([dropoff.long, dropoff.lat])); } - addChargingStations(map, chargingStations); + // addChargingStations(map, chargingStations); }); }; @@ -283,7 +283,7 @@ export const addTerminals = map => { const generateRandomChargingStations = (coords) => { let chargingStations = []; for (let i = 0; i < 4; i++) { - chargingStations.push({coords: randomCoords({coords, radius: 1000})}); + chargingStations.push({id: i, coords: randomCoords({coords, radius: 1000})}); } return chargingStations; }; From 4346956cb807efd69acfedb5932880a4cb63772e Mon Sep 17 00:00:00 2001 From: srfrnk Date: Wed, 11 Apr 2018 17:40:58 +0300 Subject: [PATCH 057/180] fix: new contract interface --- src/lib/dav.js | 50 +++++++++++++++++++++++++------------------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/src/lib/dav.js b/src/lib/dav.js index da53c81..6379cb6 100644 --- a/src/lib/dav.js +++ b/src/lib/dav.js @@ -1,8 +1,8 @@ import store from '../store'; import timeout from 'callback-timeout'; -import { +import { chooseBid, - updateDavId, + updateDavId, updateContractMissionIdMissionId, unlockWallet, unregisteredDavId, @@ -19,7 +19,7 @@ let web3Provider = null; // Use injected web3 instance if (typeof window !== 'undefined' && typeof window.web3 !== 'undefined') { web3Provider = window.web3.currentProvider; -} else if(BLOCKCHAIN_TYPE === 'ETH_LOCAL_TESTNET') { +} else if (BLOCKCHAIN_TYPE === 'ETH_LOCAL_TESTNET') { // If no injected web3 instance is detected, fall back to Ganache web3Provider = new Web3 .providers @@ -29,7 +29,7 @@ if (typeof window !== 'undefined' && typeof window.web3 !== 'undefined') { let web3 = new Web3(web3Provider); let davSDK; -const DavContracts = function() { +const DavContracts = function () { let contracts = { identity: { artifact: TruffleContract(require('../build/contracts/Identity.json')), @@ -45,9 +45,9 @@ const DavContracts = function() { } }; - this.getInstance = function(contract) { - return new Promise (function (resolve, reject) { - if(contracts[contract].instance) { + this.getInstance = function (contract) { + return new Promise(function (resolve, reject) { + if (contracts[contract].instance) { resolve(contracts[contract].instance); } else { contracts[contract].artifact.setProvider(web3.currentProvider); @@ -55,7 +55,7 @@ const DavContracts = function() { .then(function (instance) { contracts[contract].instance = instance; resolve(contracts[contract].instance); - }).catch(function(err) { + }).catch(function (err) { reject(err); }); } @@ -63,7 +63,7 @@ const DavContracts = function() { }; }; -let davJS = function(davId, wallet) { +let davJS = function (davId, wallet) { this.davId = davId; this.wallet = wallet; this.davContracts = new DavContracts(); @@ -81,7 +81,7 @@ let davJS = function(davId, wallet) { if (process.env.NODE_ENV === 'development' && BLOCKCHAIN_TYPE === 'NONE') { return Promise.resolve({}); } - + return new Promise(function (resolve, reject) { return dav.davContracts.getInstance('identity') .then(function (identityContractInstance) { @@ -94,19 +94,19 @@ let davJS = function(davId, wallet) { .catch(function (err) { reject(err); }); - + }).catch(function (err) { reject(err); }); }); }; - this.createMissionTransaction = function (vehicleId, missionCost) { + this.createMissionTransaction = function (bidId, vehicleId, missionCost) { let dav = this; if (process.env.NODE_ENV === 'development' && BLOCKCHAIN_TYPE === 'NONE') { return Promise.resolve(true); } - + var tokenContractInstance; var missionContractInstance; return dav.davContracts.getInstance('token') @@ -118,7 +118,7 @@ let davJS = function(davId, wallet) { return tokenContractInstance.approve(missionContractInstance.address, missionCost, { from: dav.wallet }); }) .then(() => { - return missionContractInstance.create(vehicleId, dav.davId, missionCost, { from: dav.wallet }); + return missionContractInstance.create(bidId, vehicleId, dav.davId, missionCost, { from: dav.wallet }); }); }); }; @@ -128,7 +128,7 @@ let davJS = function(davId, wallet) { if (process.env.NODE_ENV === 'development' && BLOCKCHAIN_TYPE === 'NONE') { return Promise.resolve(true); } - + return dav.davContracts.getInstance('mission') .then((instance) => { return instance.fulfilled(missionId, dav.davId, { from: dav.wallet }); @@ -137,17 +137,17 @@ let davJS = function(davId, wallet) { }; export const initWeb3 = () => { - if(process.env.BLOCKCHAIN_TYPE === 'NONE') { + if (process.env.BLOCKCHAIN_TYPE === 'NONE') { store.dispatch(registerDavIdFulfilled()); return Promise.resolve('Blockchain is disabled'); } - return new Promise (function (resolve, reject) { + return new Promise(function (resolve, reject) { web3.eth.getAccounts(timeout((error, accounts) => { - if(error) { + if (error) { console.log(error); store.dispatch(unlockWallet()); resolve(error); - } else if(accounts.length > 0) { + } else if (accounts.length > 0) { let davId = accounts[0]; store.dispatch(updateDavId({ davId })); return isRegistered(davId); @@ -165,7 +165,7 @@ export const initWeb3 = () => { export const isRegistered = (davId) => { davSDK = new davJS(davId, davId); davSDK.isRegistered().then((isRegistered) => { - if(isRegistered) { + if (isRegistered) { store.dispatch(registerDavIdFulfilled()); } else { store.dispatch(unregisteredDavId()); @@ -177,7 +177,7 @@ export const isRegistered = (davId) => { export const registerDavId = () => { davSDK.registerSimple().then((isRegistered) => { - if(isRegistered === true) { + if (isRegistered === true) { store.dispatch(registerDavIdFulfilled()); } }).catch(err => { @@ -186,12 +186,12 @@ export const registerDavId = () => { }; export const createMissionTransaction = (bidId, vehicle_id, price) => { - if(process.env.BLOCKCHAIN_TYPE === 'NONE') { + if (process.env.BLOCKCHAIN_TYPE === 'NONE') { store.dispatch(createMissionTransactionFulfilled()); return Promise.resolve('Blockchain is disabled'); } - davSDK.createMissionTransaction(vehicle_id, price).then((response) => { - if(response.logs.length > 0) { + davSDK.createMissionTransaction(bidId, vehicle_id, price).then((response) => { + if (response.logs.length > 0) { let contractMissionId = response.logs[0].args.id; console.log(contractMissionId); store.dispatch(updateContractMissionIdMissionId({ contractMissionId })); @@ -206,7 +206,7 @@ export const createMissionTransaction = (bidId, vehicle_id, price) => { export const approveCompletedMission = () => { let contractMissionId = store.getState().mission.contractMissionId; - + davSDK.approveCompletedMission(contractMissionId).then((response) => { console.log(response.logs[0]); }).catch(err => { From 905148590487024bbd43e9d0fecdb8c00de9c882 Mon Sep 17 00:00:00 2001 From: codemode9 Date: Wed, 11 Apr 2018 21:44:45 -0400 Subject: [PATCH 058/180] changed mission c close button color from #807B9C to #FF6A46 --- src/components/MissionScreen.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/MissionScreen.css b/src/components/MissionScreen.css index 1950022..af38a3c 100644 --- a/src/components/MissionScreen.css +++ b/src/components/MissionScreen.css @@ -69,5 +69,5 @@ .mission-info-summary .close { padding: 15px 45px; display: inline-block; - background-color: #807B9C; + background-color: #FF6A46; } From eb2e8463486aaa40616780a2b426854ee30e857c Mon Sep 17 00:00:00 2001 From: Anatoly T Date: Thu, 12 Apr 2018 17:59:43 +0300 Subject: [PATCH 059/180] separation of captain logic from missioncontrol [ WIP 2 ] --- src/components/OrderScreen.jsx | 3 +- src/components/SearchingScreen.jsx | 34 ++++++++++----------- src/containers/SearchingScreenContainer.jsx | 4 +-- src/lib/api.js | 11 +++++-- src/lib/dav.js | 10 +++--- 5 files changed, 33 insertions(+), 29 deletions(-) diff --git a/src/components/OrderScreen.jsx b/src/components/OrderScreen.jsx index fa01f3f..87b2e7d 100644 --- a/src/components/OrderScreen.jsx +++ b/src/components/OrderScreen.jsx @@ -49,7 +49,8 @@ class OrderScreen extends Component { { lat: 47.3982004, long: 8.5448531 } : undefined, size: packageSize || undefined, weight: this.weightNode.value || undefined, - pickup_at: this.pickupTimeNode.value || undefined + pickup_at: this.pickupTimeNode.value || undefined, + need_type: 'drone_delivery' }; } diff --git a/src/components/SearchingScreen.jsx b/src/components/SearchingScreen.jsx index 223b9cb..ef9901b 100644 --- a/src/components/SearchingScreen.jsx +++ b/src/components/SearchingScreen.jsx @@ -160,26 +160,26 @@ class SearchingScreen extends Component {
{stage === 'signing' && - vehicleOnMission && ( -
-
-

Initiating DAV Transaction

-

Signing secure smart contract between:

- -
- Signing smart contract +
+

Initiating DAV Transaction

+

Signing secure smart contract between:

+ +
+ Signing smart contract +
+
-
-
- )} + )}
); diff --git a/src/containers/SearchingScreenContainer.jsx b/src/containers/SearchingScreenContainer.jsx index f8f7d42..ae4dbd5 100644 --- a/src/containers/SearchingScreenContainer.jsx +++ b/src/containers/SearchingScreenContainer.jsx @@ -2,12 +2,12 @@ import { connect } from 'react-redux'; import { getBidArray } from '../reducers/bids'; import { getVehicleOnMission } from '../reducers/vehicles'; import SearchingScreen from '../components/SearchingScreen.jsx'; -import { resetOrderDetails, createMissionTransaction } from '../actions'; +import { resetOrderDetails, chooseBid } from '../actions'; import { cancelNeed } from '../lib/api'; const mapDispatchToProps = (dispatch) => ({ cancelSearch: () => cancelNeed().then(dispatch(resetOrderDetails())), - chooseBid: (bidId, vehicle_id, price) => dispatch(createMissionTransaction(bidId, vehicle_id, price)), + chooseBid: (bidId, vehicle_id, price) => dispatch(chooseBid(bidId, vehicle_id, price)), }); export default connect( diff --git a/src/lib/api.js b/src/lib/api.js index d0f2e6e..a46f105 100644 --- a/src/lib/api.js +++ b/src/lib/api.js @@ -1,5 +1,6 @@ import store from '../store'; import { packageSizeOptions } from '../lib/utils'; +import { createMissionTransaction } from '../actions'; import moment from 'moment'; const apiRoot = process.env.MISSION_CONTROL_URL; @@ -20,7 +21,7 @@ export const fetchBids = ({needId}) => { return fetchWithUserId(url); }; -export const createNeed = ({ pickup, dropoff, pickup_at, size, weight }) => { +export const createNeed = ({ pickup, dropoff, pickup_at, size, weight, need_type }) => { pickup_at = moment(pickup_at, 'HH:mm').format('x'); let url = new URL(`/needs`, apiRoot); const sizeOption = packageSizeOptions.find( @@ -35,13 +36,17 @@ export const createNeed = ({ pickup, dropoff, pickup_at, size, weight }) => { dropoff_longitude: dropoff.long, cargo_type: sizeOption.cargoType, weight: parseFloat(weight), + need_type: need_type }; return fetchWithUserId(url, 'POST', body); }; -export const chooseBid = (bidId) => { +export const chooseBid = (bidId, vehicle_id, price) => { let url = new URL(`/bids/${bidId}/choose`, apiRoot); - return fetchWithUserId(url, 'PUT'); + return fetchWithUserId(url, 'PUT').then(response => { + store.dispatch(createMissionTransaction(bidId, vehicle_id, price)); + return response; + }); }; export const cancelNeed = () => { diff --git a/src/lib/dav.js b/src/lib/dav.js index da53c81..828b076 100644 --- a/src/lib/dav.js +++ b/src/lib/dav.js @@ -1,7 +1,6 @@ import store from '../store'; import timeout from 'callback-timeout'; -import { - chooseBid, +import { updateDavId, updateContractMissionIdMissionId, unlockWallet, @@ -101,7 +100,7 @@ let davJS = function(davId, wallet) { }); }; - this.createMissionTransaction = function (vehicleId, missionCost) { + this.createMissionTransaction = function (bidId, vehicleId, missionCost) { let dav = this; if (process.env.NODE_ENV === 'development' && BLOCKCHAIN_TYPE === 'NONE') { return Promise.resolve(true); @@ -118,7 +117,7 @@ let davJS = function(davId, wallet) { return tokenContractInstance.approve(missionContractInstance.address, missionCost, { from: dav.wallet }); }) .then(() => { - return missionContractInstance.create(vehicleId, dav.davId, missionCost, { from: dav.wallet }); + return missionContractInstance.create(bidId, vehicleId, dav.davId, missionCost, { from: dav.wallet }); }); }); }; @@ -190,14 +189,13 @@ export const createMissionTransaction = (bidId, vehicle_id, price) => { store.dispatch(createMissionTransactionFulfilled()); return Promise.resolve('Blockchain is disabled'); } - davSDK.createMissionTransaction(vehicle_id, price).then((response) => { + davSDK.createMissionTransaction(bidId, vehicle_id, price).then((response) => { if(response.logs.length > 0) { let contractMissionId = response.logs[0].args.id; console.log(contractMissionId); store.dispatch(updateContractMissionIdMissionId({ contractMissionId })); } store.dispatch(createMissionTransactionFulfilled(response)); - store.dispatch(chooseBid(bidId)); }).catch(err => { console.log(err); store.dispatch(createMissionTransactionFailed(err)); From 00a30429c0a974855993a9389464104a6386b49d Mon Sep 17 00:00:00 2001 From: Timi Ajiboye Date: Fri, 13 Apr 2018 08:40:27 +0100 Subject: [PATCH 060/180] feat: transition to searching screen works. --- src/apps/drone_charging/App.jsx | 3 ++ src/components/Map.jsx | 15 +++--- src/components/SearchingScreen.jsx | 6 ++- src/components/drone_charging/OrderScreen.jsx | 2 +- src/containers/MapContainer.jsx | 3 +- src/containers/OrderScreenContainer.jsx | 47 +++++++++++-------- src/containers/SearchingScreenContainer.jsx | 1 + src/lib/api.js | 17 ++++++- src/lib/map.js | 27 +++++++---- 9 files changed, 81 insertions(+), 40 deletions(-) diff --git a/src/apps/drone_charging/App.jsx b/src/apps/drone_charging/App.jsx index b7465a9..926fcc7 100644 --- a/src/apps/drone_charging/App.jsx +++ b/src/apps/drone_charging/App.jsx @@ -5,6 +5,7 @@ import {initializeApp} from '../../lib/app'; import MainScreenContainer from '../../containers/MainScreenContainer.jsx'; import OrderScreenContainer from '../../containers/OrderScreenContainer.jsx'; import MapItemDetailsScreenContainer from '../../containers/MapItemDetailsScreenContainer.jsx'; +import SearchingScreenContainer from '../../containers/SearchingScreenContainer.jsx'; class App extends Component { @@ -22,6 +23,8 @@ class App extends Component { + +
); diff --git a/src/components/Map.jsx b/src/components/Map.jsx index 7a8fddc..2d81f25 100644 --- a/src/components/Map.jsx +++ b/src/components/Map.jsx @@ -11,15 +11,16 @@ class Map extends Component { } shouldComponentUpdate(nextProps) { - const terminals = { - pickup: nextProps.pickup, - dropoff: nextProps.dropoff - }; + const terminals = {}; + + if (nextProps.pickup) terminals.pickup = nextProps.pickup; + if (nextProps.dropoff) terminals.dropoff = nextProps.dropoff; + if (nextProps.droneLocation) terminals.droneLocation = nextProps.droneLocation; updateMap(this.map, nextProps.vehicles, terminals); if (this.props.orderStage === 'draft' && nextProps.orderStage === 'searching') { - initiateZoomTransition(this.map, nextProps.pickup, nextProps.pickup, {maxZoom: 14}); + initiateZoomTransition(this.map, terminals, {maxZoom: 14}); addTerminals(this.map); } @@ -60,7 +61,8 @@ class Map extends Component { 'coords': this.props.coords, 'onMapItemClick': this.onMapItemClick, 'onMoveEnd': this.props.onMoveEnd, - 'addControls': this.props.addControls + 'addControls': this.props.addControls, + 'appPath': this.props.appPath }); const terminals = { pickup: this.props.pickup, @@ -92,6 +94,7 @@ Map.propTypes = { missionStatus: PropTypes.string, pickup: PropTypes.object, dropoff: PropTypes.object, + droneLocation: PropTypes.object, appPath: PropTypes.string, addControls: PropTypes.bool }; diff --git a/src/components/SearchingScreen.jsx b/src/components/SearchingScreen.jsx index 1e445a5..86824ca 100644 --- a/src/components/SearchingScreen.jsx +++ b/src/components/SearchingScreen.jsx @@ -97,7 +97,8 @@ class SearchingScreen extends Component { cancelSearch, chooseBid, vehicleOnMission, - missionId + missionId, + appPath } = this.props; let screenClassNames = ['screen']; @@ -114,7 +115,7 @@ class SearchingScreen extends Component { > {stage === 'searching' && (
-

Matching you with autonomous vehicles

+

Matching you with {appPath === '/drone_charging' ? 'charging stations' : 'autonomous vehicles'}

{ this.currentChargeNode = node; }} - style={{maxWidth: '15%'}} + style={{maxWidth: '15%', display: 'inline-block', marginRight: '10px'}} />%
diff --git a/src/containers/MapContainer.jsx b/src/containers/MapContainer.jsx index 630787a..c3645ef 100644 --- a/src/containers/MapContainer.jsx +++ b/src/containers/MapContainer.jsx @@ -19,7 +19,8 @@ const matchStateToProps = (state) => { vehicles, orderStage: state.order.stage, pickup: state.order.pickup, - dropoff: state.order.dropoff + dropoff: state.order.dropoff, + droneLocation: state.order.droneLocation }; if (state.mission) { props.missionStatus = state.mission.status; diff --git a/src/containers/OrderScreenContainer.jsx b/src/containers/OrderScreenContainer.jsx index 4397479..8f470a1 100644 --- a/src/containers/OrderScreenContainer.jsx +++ b/src/containers/OrderScreenContainer.jsx @@ -1,6 +1,6 @@ -import { connect } from 'react-redux'; -import { withRouter } from 'react-router-dom'; -import { shiftCoords } from '../lib/utils'; +import {connect} from 'react-redux'; +import {withRouter} from 'react-router-dom'; +import {shiftCoords} from '../lib/utils'; import { updateOrderDetails, createNeed, @@ -16,16 +16,21 @@ Components['ChargingOrderScreen'] = require('../components/drone_charging/OrderS Components['DeliveryOrderScreen'] = require('../components/OrderScreen.jsx').default; -const mapDispatchToProps = (dispatch) => ({ - updateOrderDetails: (details) => dispatch(updateOrderDetails(details)), - createNeed: (need) => dispatch(createNeed(need)), - onMount: () => dispatch(updateOrderDetails({ stage: 'draft' })), - verifyIdentity: () => dispatch(verifyDavId()), - registerIdentity: () => dispatch(registerDavId()), - closeWalletDialog: () => dispatch(closeWalletDialog()) -}); - const OrderScreenContainer = (componentName) => { + + const mapDispatchToProps = (dispatch) => ({ + updateOrderDetails: (details) => dispatch(updateOrderDetails(details)), + createNeed: (need) => { + const needType = componentName === 'ChargingOrderScreen' ? 'drone_charging' : 'delivery_drones'; + dispatch(createNeed(need, needType)); + }, + onMount: () => dispatch(updateOrderDetails({stage: 'draft'})), + verifyIdentity: () => dispatch(verifyDavId()), + registerIdentity: () => dispatch(registerDavId()), + closeWalletDialog: () => dispatch(closeWalletDialog()) + }); + + const OrderScreen = Components[componentName]; return connect( (state) => { @@ -36,13 +41,17 @@ const OrderScreenContainer = (componentName) => { appPath: state.app.path }; if (componentName === 'DeliveryOrderScreen') { - props = {...props, ...{defaultDropoff, - userCoords: state.map.coords, - pickup: state.order.pickup, - dropoff: state.order.dropoff, - pickup_at: state.order.pickup_at, - size: state.order.size, - weight: state.order.weight,}}; + props = { + ...props, ...{ + defaultDropoff, + userCoords: state.map.coords, + pickup: state.order.pickup, + dropoff: state.order.dropoff, + pickup_at: state.order.pickup_at, + size: state.order.size, + weight: state.order.weight, + } + }; } return props; }, diff --git a/src/containers/SearchingScreenContainer.jsx b/src/containers/SearchingScreenContainer.jsx index f8f7d42..c65481f 100644 --- a/src/containers/SearchingScreenContainer.jsx +++ b/src/containers/SearchingScreenContainer.jsx @@ -17,6 +17,7 @@ export default connect( stage: state.order.stage, vehicleOnMission: getVehicleOnMission(state), missionId: state.mission.id, + appPath: state.app.path }), mapDispatchToProps )(SearchingScreen); diff --git a/src/lib/api.js b/src/lib/api.js index d0f2e6e..63ddca6 100644 --- a/src/lib/api.js +++ b/src/lib/api.js @@ -20,7 +20,15 @@ export const fetchBids = ({needId}) => { return fetchWithUserId(url); }; -export const createNeed = ({ pickup, dropoff, pickup_at, size, weight }) => { +export const createNeed = (needDetails, needType = 'delivery_drones') => { + if (needType === 'delivery_drones'){ + createDeliveryNeed(needDetails); + } else { + createChargingNeed(needDetails); + } +}; + +const createDeliveryNeed = ({ pickup, dropoff, pickup_at, size, weight}) => { pickup_at = moment(pickup_at, 'HH:mm').format('x'); let url = new URL(`/needs`, apiRoot); const sizeOption = packageSizeOptions.find( @@ -39,6 +47,13 @@ export const createNeed = ({ pickup, dropoff, pickup_at, size, weight }) => { return fetchWithUserId(url, 'POST', body); }; +const createChargingNeed = (needDetails) => { // eslint-disable-line no-unused-vars + // TODO: implement actual API call + return new Promise((resolve, reject) => { // eslint-disable-line no-unused-vars + resolve({needId: '5673920'}); + }); +}; + export const chooseBid = (bidId) => { let url = new URL(`/bids/${bidId}/choose`, apiRoot); return fetchWithUserId(url, 'PUT'); diff --git a/src/lib/map.js b/src/lib/map.js index b15b363..1562e68 100644 --- a/src/lib/map.js +++ b/src/lib/map.js @@ -18,7 +18,7 @@ const createGeoJson = (features = []) => { type: 'Feature', geometry: { type: 'Point', - coordinates: [feature.coords.long, feature.coords.lat], + coordinates: [feature.long || feature.coords.long, feature.lat || feature.coords.lat], }, properties: { id: feature.id, @@ -51,7 +51,8 @@ export const createMap = ({ coords, onMapItemClick, onMoveEnd, - addControls + addControls, + appPath }) => { // Add support for right-to-left languages mapboxgl.setRTLTextPlugin( @@ -152,8 +153,11 @@ export const createMap = ({ .then(getUserLocation) .then(({coords}) => { addUserLocationIcon(map, coords); - let chargingStations = addControls ? [] : generateRandomChargingStations(coords); - addChargingStations(map, chargingStations); + if (appPath === '/drone_charging') { + // TODO: remove this/get actual charging stations + let chargingStations = addControls ? [] : generateRandomChargingStations(coords); + addChargingStations(map, chargingStations); + } return map.setCenter([coords.longitude, coords.latitude]); }) .catch(() => { @@ -162,9 +166,10 @@ export const createMap = ({ return map; }; -export const updateMap = (map, vehicles = [], {pickup, dropoff} = {}) => { +export const updateMap = (map, vehicles = [], {pickup, dropoff, droneLocation}) => { handleMapUpdate(map, () => { if (vehicles) map.getSource('vehicles').setData(createGeoJson(vehicles)); + if (droneLocation) map.getSource('vehicles').setData(createGeoJson([droneLocation])); if (pickupAndDropoffPresent(map, pickup, dropoff)) { map.getSource('pickup').setData(turf.point([pickup.long, pickup.lat])); map.getSource('dropoff').setData(turf.point([dropoff.long, dropoff.lat])); @@ -191,12 +196,14 @@ const pickupAndDropoffPresent = (map, pickup, dropoff) => { ); }; -export const initiateZoomTransition = (map, pickup, dropoff, options) => { +export const initiateZoomTransition = (map, terminals, options) => { + let collection; + let features = Object.keys(terminals).map((key) => { + const terminal = terminals[key]; + return turf.point([terminal.long, terminal.lat]); + }); handleMapUpdate(map, () => { - const collection = turf.featureCollection([ - turf.point([pickup.long, pickup.lat]), - turf.point([dropoff.long, dropoff.lat]), - ]); + collection = turf.featureCollection(features); let bbox = turf.bbox(collection); map.fitBounds(bbox, {...options, padding: {top: 100, bottom: 300, left: 50, right: 50}}); }); From 5474893acb1391b4724d54afb0cd564080f2409d Mon Sep 17 00:00:00 2001 From: Timi Ajiboye Date: Fri, 13 Apr 2018 14:08:07 +0100 Subject: [PATCH 061/180] chore: started charging station bid --- .../drone_charging/ChargingStationBid.jsx | 38 +++++++++++++++++++ src/lib/api.js | 33 +++++++++++----- src/reducers/order.js | 1 + 3 files changed, 63 insertions(+), 9 deletions(-) create mode 100644 src/components/drone_charging/ChargingStationBid.jsx diff --git a/src/components/drone_charging/ChargingStationBid.jsx b/src/components/drone_charging/ChargingStationBid.jsx new file mode 100644 index 0000000..ff010b7 --- /dev/null +++ b/src/components/drone_charging/ChargingStationBid.jsx @@ -0,0 +1,38 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import MapItemCard from './MapItemCard.jsx'; +import currencyImage from '../images/dav.svg'; + +const ChargingStationBid = ({bid, vehicle, shown, chooseBid}) => { + const clickChooseBid = (e) => { + e.preventDefault(); + chooseBid(bid.id, bid.vehicle_id, bid.price); + }; + + let classNames = ['vehicle-bid-card']; + if (!shown) { + classNames.push('vehicle-bid-card--hidden'); + } + return ( +
+ +
+
Estimated pickup time:
+
in {Math.ceil(bid.time_to_pickup/60000)} minutes
+
Estimated delivery time:
+
{Math.ceil(bid.time_to_dropoff/60000)} minutes
+
Cost for delivery:
+
{parseFloat(bid.price/1000000000000000000).toFixed(2)}DAV
+
+
+ ); +}; + +ChargingStationBid.propTypes = { + bid: PropTypes.object.isRequired, + vehicle: PropTypes.object.isRequired, + shown: PropTypes.bool.isRequired, + chooseBid: PropTypes.func.isRequired, +}; + +export default ChargingStationBid; diff --git a/src/lib/api.js b/src/lib/api.js index 63ddca6..71bf8c2 100644 --- a/src/lib/api.js +++ b/src/lib/api.js @@ -1,10 +1,10 @@ import store from '../store'; -import { packageSizeOptions } from '../lib/utils'; +import {packageSizeOptions} from '../lib/utils'; import moment from 'moment'; const apiRoot = process.env.MISSION_CONTROL_URL; -export const fetchStatus = ({ id, lat, long, needId }) => { +export const fetchStatus = ({id, lat, long, needId}) => { const missionId = store.getState().mission.id; let url = new URL(`/status`, apiRoot); id && url.searchParams.set('id', id); @@ -16,19 +16,34 @@ export const fetchStatus = ({ id, lat, long, needId }) => { }; export const fetchBids = ({needId}) => { - let url = new URL(`/bids/${needId}`, apiRoot); - return fetchWithUserId(url); + // TODO: implement actual bid fetching + if (needId === '5673920') { + const droneLocation = store.getState().order.droneLocation; + return new Promise((resolve, reject) => { // eslint-disable-line no-unused-vars + resolve([{ + need_id: '5673920', + manufacturer: 'GeoCharge', + model: 'gc2910', + id: '0x', + latitude: parseFloat(droneLocation.lat) + 0.018, + longitude: parseFloat(droneLocation.long) + 0.018 + }]); + }); + } else { + let url = new URL(`/bids/${needId}`, apiRoot); + return fetchWithUserId(url); + } }; export const createNeed = (needDetails, needType = 'delivery_drones') => { - if (needType === 'delivery_drones'){ - createDeliveryNeed(needDetails); + if (needType === 'delivery_drones') { + return createDeliveryNeed(needDetails); } else { - createChargingNeed(needDetails); + return createChargingNeed(needDetails); } }; -const createDeliveryNeed = ({ pickup, dropoff, pickup_at, size, weight}) => { +const createDeliveryNeed = ({pickup, dropoff, pickup_at, size, weight}) => { pickup_at = moment(pickup_at, 'HH:mm').format('x'); let url = new URL(`/needs`, apiRoot); const sizeOption = packageSizeOptions.find( @@ -82,7 +97,7 @@ const fetchWithUserId = (url, method = 'GET', body) => { headers.append('Accept', 'application/json'); headers.append('Content-Type', 'application/json'); - const options = { method, headers }; + const options = {method, headers}; if (body) options.body = JSON.stringify(body); return fetch(url, options).then(response => response.json()); }; diff --git a/src/reducers/order.js b/src/reducers/order.js index 08ee898..817dce1 100644 --- a/src/reducers/order.js +++ b/src/reducers/order.js @@ -40,6 +40,7 @@ export default handleActions({ }, [updateBidsFulfilled]: (state, {payload}) => { + console.log(payload); // If searching, and at least 10 bids received OR searched for over 10 seconds change state if (state.stage === 'searching') { const time = Date.now(); From 91d6f510a38c1d4aea38b0b0cb4593840b2602d8 Mon Sep 17 00:00:00 2001 From: rishu2482 Date: Sat, 14 Apr 2018 14:10:51 +0530 Subject: [PATCH 062/180] #164 | change close button in the bid filter options in drone searching page (first-timers-only) --- src/images/x-button.svg | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/images/x-button.svg b/src/images/x-button.svg index 4ab522e..fcfd852 100644 --- a/src/images/x-button.svg +++ b/src/images/x-button.svg @@ -1,12 +1,12 @@ - - Page 1 + + x_button Created with Sketch. - - + + \ No newline at end of file From 3f1679c37608c1e202b3c744140af0c87de5b823 Mon Sep 17 00:00:00 2001 From: Timi Ajiboye Date: Sun, 15 Apr 2018 01:41:57 +0100 Subject: [PATCH 063/180] feat: charging bid now displays on search screen --- src/apps/delivery_drones/App.jsx | 2 +- src/apps/drone_charging/App.jsx | 2 +- src/apps/drone_simulation/App.jsx | 2 +- src/components/MapItemBidPreview.jsx | 15 ++ src/components/SearchingScreen.jsx | 14 +- src/components/VehicleBidPreview.jsx | 15 -- .../drone_charging/ChargingStationBid.jsx | 22 +- .../drone_charging/SearchingScreen.jsx | 199 ++++++++++++++++++ src/containers/SearchingScreenContainer.jsx | 57 +++-- src/lib/api.js | 35 ++- src/reducers/chargers.js | 24 +++ src/reducers/index.js | 2 + src/reducers/order.js | 1 - src/reducers/vehicles.js | 2 +- 14 files changed, 327 insertions(+), 65 deletions(-) create mode 100644 src/components/MapItemBidPreview.jsx delete mode 100644 src/components/VehicleBidPreview.jsx create mode 100644 src/components/drone_charging/SearchingScreen.jsx create mode 100644 src/reducers/chargers.js diff --git a/src/apps/delivery_drones/App.jsx b/src/apps/delivery_drones/App.jsx index e1da104..9f1b47d 100644 --- a/src/apps/delivery_drones/App.jsx +++ b/src/apps/delivery_drones/App.jsx @@ -31,7 +31,7 @@ class App extends Component { - + diff --git a/src/apps/drone_charging/App.jsx b/src/apps/drone_charging/App.jsx index 926fcc7..6fb5ab4 100644 --- a/src/apps/drone_charging/App.jsx +++ b/src/apps/drone_charging/App.jsx @@ -24,7 +24,7 @@ class App extends Component { - +
); diff --git a/src/apps/drone_simulation/App.jsx b/src/apps/drone_simulation/App.jsx index 664d4e0..3b75297 100644 --- a/src/apps/drone_simulation/App.jsx +++ b/src/apps/drone_simulation/App.jsx @@ -31,7 +31,7 @@ class App extends Component { - + diff --git a/src/components/MapItemBidPreview.jsx b/src/components/MapItemBidPreview.jsx new file mode 100644 index 0000000..5c2ae00 --- /dev/null +++ b/src/components/MapItemBidPreview.jsx @@ -0,0 +1,15 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import MapItemCard from './MapItemCard.jsx'; + +const MapItemBidPreview = ({mapItem}) => ( +
+ +
+); + +MapItemBidPreview.propTypes = { + mapItem: PropTypes.object.isRequired, +}; + +export default MapItemBidPreview; diff --git a/src/components/SearchingScreen.jsx b/src/components/SearchingScreen.jsx index 86824ca..8da5557 100644 --- a/src/components/SearchingScreen.jsx +++ b/src/components/SearchingScreen.jsx @@ -2,7 +2,7 @@ import React, { Component } from 'react'; import PropTypes from 'prop-types'; import Link from '../containers/LinkContainer.jsx'; import VehicleBid from './VehicleBid.jsx'; -import VehicleBidPreview from './VehicleBidPreview.jsx'; +import MapItemBidPreview from './MapItemBidPreview.jsx'; import MapItemCard from './MapItemCard.jsx'; import UserCardContainer from '../containers/UserCardContainer.jsx'; import BidSelectionHeader from '../components/BidSelectionHeader.jsx'; @@ -97,8 +97,7 @@ class SearchingScreen extends Component { cancelSearch, chooseBid, vehicleOnMission, - missionId, - appPath + missionId } = this.props; let screenClassNames = ['screen']; @@ -115,7 +114,7 @@ class SearchingScreen extends Component { > {stage === 'searching' && (
-

Matching you with {appPath === '/drone_charging' ? 'charging stations' : 'autonomous vehicles'}

+

Matching you with autonomous vehicles

vehicles[bid.vehicle_id] && ( - ) )} @@ -161,7 +160,7 @@ class SearchingScreen extends Component {
{stage === 'signing' && - vehicleOnMission && ( + vehicleOnMission && (

Initiating DAV Transaction

@@ -193,7 +192,6 @@ SearchingScreen.propTypes = { missionId: PropTypes.number, bids: PropTypes.array.isRequired, stage: PropTypes.string.isRequired, - appPath: PropTypes.string.isRequired, cancelSearch: PropTypes.func.isRequired, chooseBid: PropTypes.func.isRequired }; diff --git a/src/components/VehicleBidPreview.jsx b/src/components/VehicleBidPreview.jsx deleted file mode 100644 index 16e59df..0000000 --- a/src/components/VehicleBidPreview.jsx +++ /dev/null @@ -1,15 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import MapItemCard from './MapItemCard.jsx'; - -const VehicleBidPreview = ({vehicle}) => ( -
- -
-); - -VehicleBidPreview.propTypes = { - vehicle: PropTypes.object.isRequired, -}; - -export default VehicleBidPreview; diff --git a/src/components/drone_charging/ChargingStationBid.jsx b/src/components/drone_charging/ChargingStationBid.jsx index ff010b7..74dd86f 100644 --- a/src/components/drone_charging/ChargingStationBid.jsx +++ b/src/components/drone_charging/ChargingStationBid.jsx @@ -1,12 +1,12 @@ import React from 'react'; import PropTypes from 'prop-types'; -import MapItemCard from './MapItemCard.jsx'; -import currencyImage from '../images/dav.svg'; +import MapItemCard from '../MapItemCard.jsx'; +import currencyImage from '../../images/dav.svg'; -const ChargingStationBid = ({bid, vehicle, shown, chooseBid}) => { +const ChargingStationBid = ({bid, charger, shown, chooseBid}) => { const clickChooseBid = (e) => { e.preventDefault(); - chooseBid(bid.id, bid.vehicle_id, bid.price); + chooseBid(bid.id, bid.charger_id, bid.price); }; let classNames = ['vehicle-bid-card']; @@ -15,13 +15,13 @@ const ChargingStationBid = ({bid, vehicle, shown, chooseBid}) => { } return (
- +
-
Estimated pickup time:
-
in {Math.ceil(bid.time_to_pickup/60000)} minutes
-
Estimated delivery time:
-
{Math.ceil(bid.time_to_dropoff/60000)} minutes
-
Cost for delivery:
+
Distance from station:
+
{bid.distance} km
+
Max charging velocity
+
{charger.max_charging_velocity}
+
Cost for charging:
{parseFloat(bid.price/1000000000000000000).toFixed(2)}DAV
@@ -30,7 +30,7 @@ const ChargingStationBid = ({bid, vehicle, shown, chooseBid}) => { ChargingStationBid.propTypes = { bid: PropTypes.object.isRequired, - vehicle: PropTypes.object.isRequired, + charger: PropTypes.object.isRequired, shown: PropTypes.bool.isRequired, chooseBid: PropTypes.func.isRequired, }; diff --git a/src/components/drone_charging/SearchingScreen.jsx b/src/components/drone_charging/SearchingScreen.jsx new file mode 100644 index 0000000..33cb3a1 --- /dev/null +++ b/src/components/drone_charging/SearchingScreen.jsx @@ -0,0 +1,199 @@ +import React, { Component } from 'react'; +import PropTypes from 'prop-types'; +import Link from '../../containers/LinkContainer.jsx'; +import MapItemBidPreview from '../MapItemBidPreview.jsx'; +import MapItemCard from '../MapItemCard.jsx'; +import UserCardContainer from '../../containers/UserCardContainer.jsx'; +import BidSelectionHeader from '../../components/BidSelectionHeader.jsx'; +import '../SearchingScreen.css'; +import radar from '../../images/radar.png'; +import ChargingStationBid from './ChargingStationBid.jsx'; + +class SearchingScreen extends Component { + constructor(props) { + super(props); + + this.state = { + selectedSortingOption: 'Best match', + sortedBids: [] + }; + + this.handleSortingOptionChange = this.handleSortingOptionChange.bind(this); + this.returnSortedBids = this.returnSortedBids.bind(this); + } + + componentDidUpdate(prevProps) { + if (this.props.stage === 'signing' && prevProps.stage !== 'signing') { + this.screenNode.scrollTop = 0; + } + + if (this.props.stage === 'choosing' && prevProps.stage !== 'choosing') { + //run initial bid sort when bids have been received + this.handleSortingOptionChange(this.state.selectedSortingOption); + } + } + + // This function is called from BidSelectionHeader when a + // sorting option is chosen. + handleSortingOptionChange(option) { + this.setState({ + selectedSortingOption: option, + sortedBids: this.returnSortedBids(option) + }); + } + + returnSortedBids(option) { + /* eslint-disable indent */ + + switch (option) { + case 'Best match': { + // sort on 'time_to_pickup', if bids have similar pickup time, show + // the lowest price first + return this.props.bids.sort((a, b) => { + //convert 'time_to_pickup' to minutes + let timeToPickupMinutes_A = Math.ceil(a.time_to_pickup / 60000); + let timeToPickupMinutes_B = Math.ceil(b.time_to_pickup / 60000); + + if (timeToPickupMinutes_A < timeToPickupMinutes_B) { + return -1; + } else if (timeToPickupMinutes_A > timeToPickupMinutes_B) { + return 1; + } else { + //time to pickup in minutes is equal - compare by price + return parseFloat(a.price) - parseFloat(b.price); + } + }); + } + case 'Fastest pickup': { + //sort on 'time_to_pickup' + return this.props.bids.sort( + (a, b) => parseFloat(a.time_to_pickup) - parseFloat(b.time_to_pickup) + ); + } + case 'Fastest delivery': { + //sort on 'time_to_dropoff' + return this.props.bids.sort( + (a, b) => + parseFloat(a.time_to_dropoff) - parseFloat(b.time_to_dropoff) + ); + } + case 'Lowest cost': { + //sort on 'price' + return this.props.bids.sort( + (a, b) => parseFloat(a.price) - parseFloat(b.price) + ); + } + default: + return this.props.bids; + } + /* eslint-enable indent */ + } + + render() { + const { + bids, + chargers, + chargerOnMission, + stage, + cancelSearch, + chooseBid, + missionId + } = this.props; + + let screenClassNames = ['screen']; + if (stage === 'choosing') screenClassNames.push('screen--stage-choosing'); + if (stage === 'signing') screenClassNames.push('screen--stage-signing'); + + return ( +
{ + this.screenNode = node; + }} + > + {stage === 'searching' && ( +
+

Matching you with charging sations

+ + cancel + + +
+ {bids.map( + bid => + chargers[bid.charger_id] && ( + + ) + )} +
+
+ )} + +
+ {stage === 'choosing' && ( + + )} + {this.state.sortedBids.map( + bid => + chargers[bid.charger_id] && ( + + ) + )} +
+ +
+ {stage === 'signing' && + chargerOnMission && ( +
+
+

Initiating DAV Transaction

+

Signing secure smart contract between:

+ +
+ Signing smart contract +
+ +
+
+ )} +
+
+ ); + } +} + +SearchingScreen.propTypes = { + chargers: PropTypes.object.isRequired, + chargerOnMission: PropTypes.object, + missionId: PropTypes.number, + bids: PropTypes.array.isRequired, + stage: PropTypes.string.isRequired, + cancelSearch: PropTypes.func.isRequired, + chooseBid: PropTypes.func.isRequired +}; + +export default SearchingScreen; diff --git a/src/containers/SearchingScreenContainer.jsx b/src/containers/SearchingScreenContainer.jsx index c65481f..ed08fb5 100644 --- a/src/containers/SearchingScreenContainer.jsx +++ b/src/containers/SearchingScreenContainer.jsx @@ -1,23 +1,46 @@ -import { connect } from 'react-redux'; -import { getBidArray } from '../reducers/bids'; -import { getVehicleOnMission } from '../reducers/vehicles'; -import SearchingScreen from '../components/SearchingScreen.jsx'; -import { resetOrderDetails, createMissionTransaction } from '../actions'; -import { cancelNeed } from '../lib/api'; +import {connect} from 'react-redux'; +import {getBidArray} from '../reducers/bids'; +import {getVehicleOnMission} from '../reducers/vehicles'; +import {getChargerOnMission} from '../reducers/chargers'; +import {resetOrderDetails, createMissionTransaction} from '../actions'; +import {cancelNeed} from '../lib/api'; + +let Components = {}; + +Components['ChargingSearchingScreen'] = require('../components/drone_charging/SearchingScreen.jsx').default; +Components['DeliverySearchingScreen'] = require('../components/SearchingScreen.jsx').default; const mapDispatchToProps = (dispatch) => ({ cancelSearch: () => cancelNeed().then(dispatch(resetOrderDetails())), chooseBid: (bidId, vehicle_id, price) => dispatch(createMissionTransaction(bidId, vehicle_id, price)), }); -export default connect( - (state) => ({ - vehicles: state.vehicles, - bids: getBidArray(state.bids), - stage: state.order.stage, - vehicleOnMission: getVehicleOnMission(state), - missionId: state.mission.id, - appPath: state.app.path - }), - mapDispatchToProps -)(SearchingScreen); +const SearchingScreenContainer = (componentName) => { + const SearchingScreen = Components[componentName]; + const mapStateToProps = (state) => { + const props = { + bids: getBidArray(state.bids), + stage: state.order.stage, + missionId: state.mission.id, + appPath: state.app.path + }; + + if (componentName === 'ChargingSearchingScreen') { + props.chargers = state.chargers; + props.chargerOnMission = getChargerOnMission(state); + + } else if (componentName === 'DeliverySearchingScreen') { + props.vehicles = state.vehicles; + props.vehicleOnMission = getVehicleOnMission(state); + } + return props; + }; + + return connect( + mapStateToProps, + mapDispatchToProps + )(SearchingScreen); +}; + +export default SearchingScreenContainer; +''; diff --git a/src/lib/api.js b/src/lib/api.js index 71bf8c2..0fef926 100644 --- a/src/lib/api.js +++ b/src/lib/api.js @@ -3,16 +3,29 @@ import {packageSizeOptions} from '../lib/utils'; import moment from 'moment'; const apiRoot = process.env.MISSION_CONTROL_URL; +const testCharger = { // TODO: Remove this + id: 1, + icon: `https://lorempixel.com/100/100/abstract/?5673920`, + manufacturer: 'GeoCharge', + model: 'gc2910', + max_charging_velocity: '30Ah' +}; export const fetchStatus = ({id, lat, long, needId}) => { - const missionId = store.getState().mission.id; - let url = new URL(`/status`, apiRoot); - id && url.searchParams.set('id', id); - lat && url.searchParams.set('lat', lat); // Don't stand on the equator or you'll break this - long && url.searchParams.set('long', long); - needId && url.searchParams.set('needId', needId); - missionId && url.searchParams.set('missionId', missionId); - return fetchWithUserId(url); + if (needId === '5673920') { + console.log('hahah'); + const chargers = [testCharger]; + return new Promise(resolve => resolve({status: 'idle', chargers})); + } else { + const missionId = store.getState().mission.id; + let url = new URL(`/status`, apiRoot); + id && url.searchParams.set('id', id); + lat && url.searchParams.set('lat', lat); // Don't stand on the equator or you'll break this + long && url.searchParams.set('long', long); + needId && url.searchParams.set('needId', needId); + missionId && url.searchParams.set('missionId', missionId); + return fetchWithUserId(url); + } }; export const fetchBids = ({needId}) => { @@ -25,8 +38,12 @@ export const fetchBids = ({needId}) => { manufacturer: 'GeoCharge', model: 'gc2910', id: '0x', + distance: '10km', latitude: parseFloat(droneLocation.lat) + 0.018, - longitude: parseFloat(droneLocation.long) + 0.018 + longitude: parseFloat(droneLocation.long) + 0.018, + price: 20000000000000000000, + charger_id: testCharger.id, + charger: testCharger }]); }); } else { diff --git a/src/reducers/chargers.js b/src/reducers/chargers.js new file mode 100644 index 0000000..a2dc2c6 --- /dev/null +++ b/src/reducers/chargers.js @@ -0,0 +1,24 @@ +import { handleActions } from 'redux-actions'; +import { updateStatusFulfilled } from '../actions'; + +const defaultState = {}; + +export default handleActions( + { + [updateStatusFulfilled]: (state, { payload: { chargers = []} }) => { + let nextState = {}; + chargers.forEach(charger => { + console.log(charger); + nextState[charger.id] = charger; + }); + return nextState; + } + }, + defaultState, +); + +export const getChargerArray = state => + Object.entries(state).map(([, vehicle]) => vehicle); + +export const getChargerOnMission = state => + state.mission.vehicleId ? state.vehicles[state.mission.vehicleId] : undefined; diff --git a/src/reducers/index.js b/src/reducers/index.js index a19acb1..9dba83e 100644 --- a/src/reducers/index.js +++ b/src/reducers/index.js @@ -1,6 +1,7 @@ import { combineReducers } from 'redux'; import settings from './settings'; import vehicles from './vehicles'; +import chargers from './chargers'; import map from './map'; import order from './order'; import bids from './bids'; @@ -10,6 +11,7 @@ import app from './app'; export default combineReducers({ settings, vehicles, + chargers, map, order, bids, diff --git a/src/reducers/order.js b/src/reducers/order.js index 817dce1..08ee898 100644 --- a/src/reducers/order.js +++ b/src/reducers/order.js @@ -40,7 +40,6 @@ export default handleActions({ }, [updateBidsFulfilled]: (state, {payload}) => { - console.log(payload); // If searching, and at least 10 bids received OR searched for over 10 seconds change state if (state.stage === 'searching') { const time = Date.now(); diff --git a/src/reducers/vehicles.js b/src/reducers/vehicles.js index 53cf235..99ad475 100644 --- a/src/reducers/vehicles.js +++ b/src/reducers/vehicles.js @@ -5,7 +5,7 @@ const defaultState = {}; export default handleActions( { - [updateStatusFulfilled]: (state, { payload: { vehicles } }) => { + [updateStatusFulfilled]: (state, { payload: { vehicles = [] } }) => { let nextState = {}; vehicles.forEach(vehicle => { nextState[vehicle.id] = vehicle; From 4f78af0b44605bcfecc8f82191963f360958eca2 Mon Sep 17 00:00:00 2001 From: Timi Ajiboye Date: Sun, 15 Apr 2018 01:57:15 +0100 Subject: [PATCH 064/180] feat: added the charging bid selection header --- .../ChargingBidSelectionHeader.jsx | 183 ++++++++++++++++++ .../drone_charging/ChargingStationBid.jsx | 2 +- .../drone_charging/SearchingScreen.jsx | 31 ++- src/lib/api.js | 6 +- 4 files changed, 202 insertions(+), 20 deletions(-) create mode 100644 src/components/drone_charging/ChargingBidSelectionHeader.jsx diff --git a/src/components/drone_charging/ChargingBidSelectionHeader.jsx b/src/components/drone_charging/ChargingBidSelectionHeader.jsx new file mode 100644 index 0000000..ba77bb4 --- /dev/null +++ b/src/components/drone_charging/ChargingBidSelectionHeader.jsx @@ -0,0 +1,183 @@ +import React, { Component } from 'react'; +import PropTypes from 'prop-types'; +import Link from '../../containers/LinkContainer.jsx'; +import '../BidSelectionHeader.css'; +import sort_button from '../../images/sort_button.svg'; +import arrow from '../../images/arrow-left.svg'; +import x_button from '../../images/x_button.svg'; +import check from '../../images/check.svg'; + +const CheckMark = props => ( + checkmark +); + +CheckMark.propTypes = { + hide: PropTypes.bool +}; + +class ChargingBidSelectionHeader extends Component { + constructor(props) { + super(props); + + this.sortOptions = { + bestMatch: 'Best match', + shortestDistance: 'Shortest distance', + highestChargingVelocity: 'Highest charging velocity', + lowestCost: 'Lowest cost' + }; + + this.state = { + sortOptionsOpen: false, + sortOptionSelected: this.sortOptions.bestMatch + }; + + this.handleSortButtonClick = this.handleSortButtonClick.bind(this); + this.handleCloseButtonClick = this.handleCloseButtonClick.bind(this); + this.handleSortOptionClick = this.handleSortOptionClick.bind(this); + } + + handleSortButtonClick() { + this.setState({ sortOptionsOpen: !this.state.sortOptionsOpen }); + } + + handleCloseButtonClick() { + this.setState({ sortOptionsOpen: !this.state.sortOptionsOpen }); + } + + handleSortOptionClick(e) { + //call function in SearchingScreen, passing in + //selected sort option + this.props.handleSortingOptionChange(e.target.title); + + this.setState({ + sortOptionSelected: e.target.title, + sortOptionsOpen: !this.state.sortOptionsOpen + }); + } + + render() { + let { sortOptionsOpen, sortOptionSelected } = this.state; + return ( +
+
+
+ close button +
+
Sort by:
+
    +
  • + Best match + +
  • +
  • + Fastest pickup + +
  • +
  • + Fastest delivery + +
  • +
  • + Lowest cost + +
  • +
+
+
+ + Back + + + {/*
Bid Selection
*/} +
Bid Selection
+
+ sort button +
+
+
+ ); + } +} + +ChargingBidSelectionHeader.propTypes = { + vehicles: PropTypes.object.isRequired, + vehicleOnMission: PropTypes.object, + missionId: PropTypes.number, + bids: PropTypes.array.isRequired, + stage: PropTypes.string.isRequired, + cancelSearch: PropTypes.func.isRequired, + chooseBid: PropTypes.func.isRequired, + handleSortingOptionChange: PropTypes.func.isRequired +}; + +export default ChargingBidSelectionHeader; diff --git a/src/components/drone_charging/ChargingStationBid.jsx b/src/components/drone_charging/ChargingStationBid.jsx index 74dd86f..988dbf1 100644 --- a/src/components/drone_charging/ChargingStationBid.jsx +++ b/src/components/drone_charging/ChargingStationBid.jsx @@ -20,7 +20,7 @@ const ChargingStationBid = ({bid, charger, shown, chooseBid}) => {
Distance from station:
{bid.distance} km
Max charging velocity
-
{charger.max_charging_velocity}
+
{charger.max_charging_velocity} Ah
Cost for charging:
{parseFloat(bid.price/1000000000000000000).toFixed(2)}DAV
diff --git a/src/components/drone_charging/SearchingScreen.jsx b/src/components/drone_charging/SearchingScreen.jsx index 33cb3a1..b56ec32 100644 --- a/src/components/drone_charging/SearchingScreen.jsx +++ b/src/components/drone_charging/SearchingScreen.jsx @@ -4,10 +4,10 @@ import Link from '../../containers/LinkContainer.jsx'; import MapItemBidPreview from '../MapItemBidPreview.jsx'; import MapItemCard from '../MapItemCard.jsx'; import UserCardContainer from '../../containers/UserCardContainer.jsx'; -import BidSelectionHeader from '../../components/BidSelectionHeader.jsx'; import '../SearchingScreen.css'; import radar from '../../images/radar.png'; import ChargingStationBid from './ChargingStationBid.jsx'; +import ChargingBidSelectionHeader from './ChargingBidSelectionHeader.jsx'; class SearchingScreen extends Component { constructor(props) { @@ -33,7 +33,7 @@ class SearchingScreen extends Component { } } - // This function is called from BidSelectionHeader when a + // This function is called from ChargingBidSelectionHeader when a // sorting option is chosen. handleSortingOptionChange(option) { this.setState({ @@ -47,34 +47,33 @@ class SearchingScreen extends Component { switch (option) { case 'Best match': { - // sort on 'time_to_pickup', if bids have similar pickup time, show + // sort on distance, if bids have similar distance show // the lowest price first return this.props.bids.sort((a, b) => { - //convert 'time_to_pickup' to minutes - let timeToPickupMinutes_A = Math.ceil(a.time_to_pickup / 60000); - let timeToPickupMinutes_B = Math.ceil(b.time_to_pickup / 60000); + let distanceA = a.distance; + let distanceB = b.distance; - if (timeToPickupMinutes_A < timeToPickupMinutes_B) { + if (distanceA < distanceB) { return -1; - } else if (timeToPickupMinutes_A > timeToPickupMinutes_B) { + } else if (distanceA > distanceB) { return 1; } else { - //time to pickup in minutes is equal - compare by price + //distance is equal - compare by price return parseFloat(a.price) - parseFloat(b.price); } }); } - case 'Fastest pickup': { - //sort on 'time_to_pickup' + case 'Shortest Distance': { + //sort on 'distance' return this.props.bids.sort( - (a, b) => parseFloat(a.time_to_pickup) - parseFloat(b.time_to_pickup) + (a, b) => parseFloat(a.distance) - parseFloat(b.distance) ); } - case 'Fastest delivery': { - //sort on 'time_to_dropoff' + case 'Highest charging velocity': { + //sort on 'max_charging_velocity' return this.props.bids.sort( (a, b) => - parseFloat(a.time_to_dropoff) - parseFloat(b.time_to_dropoff) + parseFloat(b.charger.max_charging_velocity) - parseFloat(a.charger.max_charging_velocity) ); } case 'Lowest cost': { @@ -139,7 +138,7 @@ class SearchingScreen extends Component {
{stage === 'choosing' && ( - diff --git a/src/lib/api.js b/src/lib/api.js index 0fef926..514d969 100644 --- a/src/lib/api.js +++ b/src/lib/api.js @@ -4,11 +4,11 @@ import moment from 'moment'; const apiRoot = process.env.MISSION_CONTROL_URL; const testCharger = { // TODO: Remove this - id: 1, + id: '1', icon: `https://lorempixel.com/100/100/abstract/?5673920`, manufacturer: 'GeoCharge', model: 'gc2910', - max_charging_velocity: '30Ah' + max_charging_velocity: 30 }; export const fetchStatus = ({id, lat, long, needId}) => { @@ -38,7 +38,7 @@ export const fetchBids = ({needId}) => { manufacturer: 'GeoCharge', model: 'gc2910', id: '0x', - distance: '10km', + distance: 10, latitude: parseFloat(droneLocation.lat) + 0.018, longitude: parseFloat(droneLocation.long) + 0.018, price: 20000000000000000000, From 6d3c0958039499a0a1c0f36746d72c702ae4c1a5 Mon Sep 17 00:00:00 2001 From: Timi Ajiboye Date: Sun, 15 Apr 2018 02:00:32 +0100 Subject: [PATCH 065/180] fix: error with charging bid selection header props --- src/components/drone_charging/ChargingBidSelectionHeader.jsx | 4 ++-- src/lib/api.js | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/components/drone_charging/ChargingBidSelectionHeader.jsx b/src/components/drone_charging/ChargingBidSelectionHeader.jsx index ba77bb4..91e128e 100644 --- a/src/components/drone_charging/ChargingBidSelectionHeader.jsx +++ b/src/components/drone_charging/ChargingBidSelectionHeader.jsx @@ -170,8 +170,8 @@ class ChargingBidSelectionHeader extends Component { } ChargingBidSelectionHeader.propTypes = { - vehicles: PropTypes.object.isRequired, - vehicleOnMission: PropTypes.object, + chargers: PropTypes.object.isRequired, + chargerOnMission: PropTypes.object, missionId: PropTypes.number, bids: PropTypes.array.isRequired, stage: PropTypes.string.isRequired, diff --git a/src/lib/api.js b/src/lib/api.js index 514d969..9748795 100644 --- a/src/lib/api.js +++ b/src/lib/api.js @@ -13,7 +13,6 @@ const testCharger = { // TODO: Remove this export const fetchStatus = ({id, lat, long, needId}) => { if (needId === '5673920') { - console.log('hahah'); const chargers = [testCharger]; return new Promise(resolve => resolve({status: 'idle', chargers})); } else { From 8f49b29d56ab10101794a0f5b3abbdcf9bbeb95c Mon Sep 17 00:00:00 2001 From: Timi Ajiboye Date: Mon, 16 Apr 2018 00:18:16 +0100 Subject: [PATCH 066/180] chore: changed how vehicles and chargers are shown on map --- src/components/Map.jsx | 12 +++---- src/containers/MapContainer.jsx | 58 ++++++++++++++++++++++----------- src/lib/api.js | 45 ++++++++++++++++++++++--- src/lib/map.js | 52 ++++++----------------------- src/reducers/chargers.js | 1 - 5 files changed, 95 insertions(+), 73 deletions(-) diff --git a/src/components/Map.jsx b/src/components/Map.jsx index 2d81f25..1ded415 100644 --- a/src/components/Map.jsx +++ b/src/components/Map.jsx @@ -17,7 +17,7 @@ class Map extends Component { if (nextProps.dropoff) terminals.dropoff = nextProps.dropoff; if (nextProps.droneLocation) terminals.droneLocation = nextProps.droneLocation; - updateMap(this.map, nextProps.vehicles, terminals); + updateMap(this.map, nextProps.mapItems, nextProps.mapItemType, terminals); if (this.props.orderStage === 'draft' && nextProps.orderStage === 'searching') { initiateZoomTransition(this.map, terminals, {maxZoom: 14}); @@ -36,7 +36,7 @@ class Map extends Component { if (nextProps.orderStage === 'in_mission') { initiateZoomTransition(this.map, nextProps.pickup, nextProps.dropoff); - if (this.props.vehicles.length > 0 && nextProps.vehicles[0].status === 'waiting_pickup') { + if (this.props.mapItems.length > 0 && nextProps.mapItems[0].status === 'waiting_pickup') { this.props.history.push(this.props.appPath + '/confirm-takeoff'); } else { this.props.history.push(this.props.appPath + '/mission'); @@ -61,14 +61,13 @@ class Map extends Component { 'coords': this.props.coords, 'onMapItemClick': this.onMapItemClick, 'onMoveEnd': this.props.onMoveEnd, - 'addControls': this.props.addControls, - 'appPath': this.props.appPath + 'addControls': this.props.addControls }); const terminals = { pickup: this.props.pickup, dropoff: this.props.dropoff }; - updateMap(this.map, this.props.vehicles, terminals); + updateMap(this.map, this.props.mapItems, this.props.mapItemType, terminals); } render() { @@ -86,7 +85,8 @@ Map.defaultProps = { }; Map.propTypes = { - vehicles: PropTypes.array.isRequired, + mapItems: PropTypes.array.isRequired, + mapItemType: PropTypes.string.isRequired, coords: PropTypes.object.isRequired, history: PropTypes.object.isRequired, onMoveEnd: PropTypes.func.isRequired, diff --git a/src/containers/MapContainer.jsx b/src/containers/MapContainer.jsx index c3645ef..4bbce99 100644 --- a/src/containers/MapContainer.jsx +++ b/src/containers/MapContainer.jsx @@ -1,35 +1,38 @@ -import { connect } from 'react-redux'; -import { withRouter } from 'react-router-dom'; -import { getVehicleArray } from '../reducers/vehicles'; -import { getBidArray } from '../reducers/bids'; -import { updateMapCoords } from '../actions'; +import {connect} from 'react-redux'; +import {withRouter} from 'react-router-dom'; +import {getVehicleArray} from '../reducers/vehicles'; +import {getBidArray} from '../reducers/bids'; +import {updateMapCoords} from '../actions'; import Map from '../components/Map.jsx'; +import {getChargerArray} from '../reducers/chargers'; const matchStateToProps = (state) => { - let vehicles = []; - // if we are looking at bids, only show vehicles with bids - if (['searching', 'choosing'].includes(state.order.stage)) { - getBidArray(state.bids).forEach( - bid => state.vehicles[bid.vehicle_id] && vehicles.push(state.vehicles[bid.vehicle_id]) - ); - } else { - vehicles = getVehicleArray(state.vehicles); - } + const appPath = state.app.path; + let props = { - vehicles, orderStage: state.order.stage, pickup: state.order.pickup, dropoff: state.order.dropoff, - droneLocation: state.order.droneLocation + droneLocation: state.order.droneLocation, + appPath }; + + if (appPath === '/drone_charging') { + props.mapItems = getRelevantMapItems('charger', state); + props.mapItemType = 'charger'; + } else { + props.mapItems = getRelevantMapItems('vehicle', state); + props.mapItemType = 'vehicle'; + } + if (state.mission) { props.missionStatus = state.mission.status; - if (props.missionStatus === 'in_progress'){ - props.dropoff = {long: state.mission.dropoff_longitude, lat:state.mission.dropoff_latitude}; + if (props.missionStatus === 'in_progress') { + props.dropoff = {long: state.mission.dropoff_longitude, lat: state.mission.dropoff_latitude}; props.pickup = {long: state.mission.pickup_longitude, lat: state.mission.pickup_latitude}; } } - props.appPath = state.app.path; + return props; }; @@ -37,7 +40,24 @@ const mapDispatchToProps = (dispatch) => ({ onMoveEnd: (coords) => dispatch(updateMapCoords({coords: coords})) }); + +const getRelevantMapItems = (mapItemType, state) => { + const mapItemTypePlural = `${mapItemType}s`; + const mapItemIdKey = `${mapItemType}_id`; + let mapItems = []; + // if we are looking at bids, only show vehicles with bids + if (['searching', 'choosing'].includes(state.order.stage)) { + getBidArray(state.bids).forEach( + bid => state[mapItemTypePlural][bid[mapItemIdKey]] && mapItems.push(state[mapItemTypePlural][bid[mapItemIdKey]]) + ); + } else { + mapItems = mapItemType === 'vehicle' ? getVehicleArray(state[mapItemTypePlural]) : getChargerArray(state[mapItemTypePlural]); + } + return mapItems; +}; + export default connect( matchStateToProps, mapDispatchToProps )(withRouter(Map)); + diff --git a/src/lib/api.js b/src/lib/api.js index 9748795..a47b351 100644 --- a/src/lib/api.js +++ b/src/lib/api.js @@ -3,16 +3,24 @@ import {packageSizeOptions} from '../lib/utils'; import moment from 'moment'; const apiRoot = process.env.MISSION_CONTROL_URL; -const testCharger = { // TODO: Remove this +const testCharger = { id: '1', icon: `https://lorempixel.com/100/100/abstract/?5673920`, manufacturer: 'GeoCharge', model: 'gc2910', - max_charging_velocity: 30 + max_charging_velocity: 30, }; export const fetchStatus = ({id, lat, long, needId}) => { - if (needId === '5673920') { + // TODO: implement actual status fetching for chargers + + if ((store.getState().order.stage === 'draft') && (store.getState().app.path === '/drone_charging')) { + const chargers = generateRandomChargers({lat, long}); + return new Promise(resolve => resolve({status: 'idle', chargers})); + } else if (needId === '5673920') { + testCharger.coords = {}; + testCharger.coords.lat = parseFloat(lat) + 0.018; + testCharger.coords.long = parseFloat(long) + 0.018; const chargers = [testCharger]; return new Promise(resolve => resolve({status: 'idle', chargers})); } else { @@ -32,14 +40,18 @@ export const fetchBids = ({needId}) => { if (needId === '5673920') { const droneLocation = store.getState().order.droneLocation; return new Promise((resolve, reject) => { // eslint-disable-line no-unused-vars + testCharger.coords = {}; + testCharger.coords.lat = parseFloat(droneLocation.lat) + 0.018; + testCharger.coords.long = parseFloat(droneLocation.long) + 0.018; + resolve([{ need_id: '5673920', manufacturer: 'GeoCharge', model: 'gc2910', id: '0x', distance: 10, - latitude: parseFloat(droneLocation.lat) + 0.018, - longitude: parseFloat(droneLocation.long) + 0.018, + lat: parseFloat(droneLocation.lat) + 0.018, + long: parseFloat(droneLocation.long) + 0.018, price: 20000000000000000000, charger_id: testCharger.id, charger: testCharger @@ -117,3 +129,26 @@ const fetchWithUserId = (url, method = 'GET', body) => { if (body) options.body = JSON.stringify(body); return fetch(url, options).then(response => response.json()); }; + + +const generateRandomChargers = (coords) => { + let chargers = []; + for (let i = 1; i < 5; i++) { + chargers.push({id: i, coords: randomCoords({id: i, coords, radius: 1000})}); + } + return chargers; +}; + +const randomCoords = ({id, coords, radius}) => { + const angle = id/10 * 2 * Math.PI; + const distance = ((id+1)/10) * radius; + const longDegreesPerMeter = 1 / 111321.377778; // longitude degrees per meter + const latDegreesPerMeter = 1 / 111134.86111; // latitude degrees per meter + const x = parseFloat( + (coords.lat+ latDegreesPerMeter * distance * Math.cos(angle)).toFixed(6), + ); + const y = parseFloat( + (coords.long+ longDegreesPerMeter * distance * Math.sin(angle)).toFixed(6), + ); + return {lat: x, long: y}; +}; diff --git a/src/lib/map.js b/src/lib/map.js index 1562e68..929ab59 100644 --- a/src/lib/map.js +++ b/src/lib/map.js @@ -3,13 +3,13 @@ import 'mapbox-gl/dist/mapbox-gl.css'; import {makeImage} from './utils'; import droneIcon from '../images/icon_drone.png'; import locationIcon from '../images/icon_location.png'; -import chargingStationIcon from '../images/icon_charging_station.png'; +import chargerIcon from '../images/icon_charging_station.png'; import pickupIcon from '../images/pin-pickup.svg'; import dropoffIcon from '../images/pin-dropoff.svg'; import mapStyle from './map_style.json'; import turf from 'turf'; -const icons = {droneIcon, locationIcon, chargingStationIcon, pickupIcon, dropoffIcon}; +const icons = {droneIcon, locationIcon, chargerIcon, pickupIcon, dropoffIcon}; const createGeoJson = (features = []) => { return { @@ -52,7 +52,6 @@ export const createMap = ({ onMapItemClick, onMoveEnd, addControls, - appPath }) => { // Add support for right-to-left languages mapboxgl.setRTLTextPlugin( @@ -115,7 +114,7 @@ export const createMap = ({ }, }); - map.addSource('chargingStations', { + map.addSource('chargers', { type: 'geojson', data: { type: 'FeatureCollection', @@ -124,18 +123,18 @@ export const createMap = ({ }); map.addLayer({ - id: 'chargingStations', + id: 'chargers', type: 'symbol', - source: 'chargingStations', + source: 'chargers', minzoom: 10, layout: { - 'icon-image': 'chargingStation', + 'icon-image': 'charger', 'icon-allow-overlap': true, 'icon-ignore-placement': true, }, }); - ['vehicles', 'chargingStations'].forEach((mapItemType) => { + ['vehicles', 'chargers'].forEach((mapItemType) => { map.on('click', mapItemType, e => onMapItemClick({id: e.features[0].properties.id, mapItemType: mapItemType}), ); @@ -153,11 +152,6 @@ export const createMap = ({ .then(getUserLocation) .then(({coords}) => { addUserLocationIcon(map, coords); - if (appPath === '/drone_charging') { - // TODO: remove this/get actual charging stations - let chargingStations = addControls ? [] : generateRandomChargingStations(coords); - addChargingStations(map, chargingStations); - } return map.setCenter([coords.longitude, coords.latitude]); }) .catch(() => { @@ -166,21 +160,18 @@ export const createMap = ({ return map; }; -export const updateMap = (map, vehicles = [], {pickup, dropoff, droneLocation}) => { +export const updateMap = (map, mapItems = [], mapItemType, {pickup, dropoff, droneLocation}) => { handleMapUpdate(map, () => { - if (vehicles) map.getSource('vehicles').setData(createGeoJson(vehicles)); + const mapItemTypePlural = `${mapItemType}s`; + if (mapItems) map.getSource(mapItemTypePlural).setData(createGeoJson(mapItems)); if (droneLocation) map.getSource('vehicles').setData(createGeoJson([droneLocation])); if (pickupAndDropoffPresent(map, pickup, dropoff)) { map.getSource('pickup').setData(turf.point([pickup.long, pickup.lat])); map.getSource('dropoff').setData(turf.point([dropoff.long, dropoff.lat])); } - // addChargingStations(map, chargingStations); }); }; -const addChargingStations = (map, chargingStations) => { - if (chargingStations) map.getSource('chargingStations').setData(createGeoJson(chargingStations)); -}; const handleMapUpdate = (map, update) => { if (!map.loaded()) { @@ -285,26 +276,3 @@ export const addTerminals = map => { } }; - -// generate random charging stations just for viewing/testing purposes -const generateRandomChargingStations = (coords) => { - let chargingStations = []; - for (let i = 0; i < 4; i++) { - chargingStations.push({id: i, coords: randomCoords({coords, radius: 1000})}); - } - return chargingStations; -}; - -const randomCoords = ({coords, radius}) => { - const angle = Math.random() * 2 * Math.PI; - const distance = Math.random() * radius; - const longDegreesPerMeter = 1 / 111321.377778; // longitude degrees per meter - const latDegreesPerMeter = 1 / 111134.86111; // latitude degrees per meter - const x = parseFloat( - (coords.latitude + latDegreesPerMeter * distance * Math.cos(angle)).toFixed(6), - ); - const y = parseFloat( - (coords.longitude + longDegreesPerMeter * distance * Math.sin(angle)).toFixed(6), - ); - return {lat: x, long: y}; -}; diff --git a/src/reducers/chargers.js b/src/reducers/chargers.js index a2dc2c6..553be5d 100644 --- a/src/reducers/chargers.js +++ b/src/reducers/chargers.js @@ -8,7 +8,6 @@ export default handleActions( [updateStatusFulfilled]: (state, { payload: { chargers = []} }) => { let nextState = {}; chargers.forEach(charger => { - console.log(charger); nextState[charger.id] = charger; }); return nextState; From d16ba2076a6da504117511920f6a95b277646430 Mon Sep 17 00:00:00 2001 From: Timi Ajiboye Date: Mon, 16 Apr 2018 01:51:20 +0100 Subject: [PATCH 067/180] chore: made test charger bid show up close to drone location, fix: zoom transition --- src/components/drone_charging/OrderScreen.jsx | 7 +++++-- src/lib/api.js | 15 ++++++++------- src/lib/app.js | 5 +++-- src/lib/map.js | 5 ++++- 4 files changed, 20 insertions(+), 12 deletions(-) diff --git a/src/components/drone_charging/OrderScreen.jsx b/src/components/drone_charging/OrderScreen.jsx index 8d31292..2a403d3 100644 --- a/src/components/drone_charging/OrderScreen.jsx +++ b/src/components/drone_charging/OrderScreen.jsx @@ -30,8 +30,11 @@ class OrderScreen extends Component { createOrderDetailsObject() { const { droneLocation } = this.state; return { - droneLocation: droneLocation ? - { address: droneLocation.description, lat: 47.397669, long: 8.5444809 } : undefined, + droneLocation: { + address: droneLocation.description, + lat: droneLocation.location.lat, + long: droneLocation.location.lng + }, droneType: this.droneTypeNode.value || undefined, currentCharge: this.currentChargeNode.value || undefined, chargingVelocity: this.chargingVelocityNode.value || undefined, diff --git a/src/lib/api.js b/src/lib/api.js index a47b351..8ac27a9 100644 --- a/src/lib/api.js +++ b/src/lib/api.js @@ -10,6 +10,7 @@ const testCharger = { model: 'gc2910', max_charging_velocity: 30, }; +const testChargerCoordsOffset = 0.005; export const fetchStatus = ({id, lat, long, needId}) => { // TODO: implement actual status fetching for chargers @@ -19,8 +20,8 @@ export const fetchStatus = ({id, lat, long, needId}) => { return new Promise(resolve => resolve({status: 'idle', chargers})); } else if (needId === '5673920') { testCharger.coords = {}; - testCharger.coords.lat = parseFloat(lat) + 0.018; - testCharger.coords.long = parseFloat(long) + 0.018; + testCharger.coords.lat = parseFloat(lat) + testChargerCoordsOffset; + testCharger.coords.long = parseFloat(long) + testChargerCoordsOffset; const chargers = [testCharger]; return new Promise(resolve => resolve({status: 'idle', chargers})); } else { @@ -41,8 +42,8 @@ export const fetchBids = ({needId}) => { const droneLocation = store.getState().order.droneLocation; return new Promise((resolve, reject) => { // eslint-disable-line no-unused-vars testCharger.coords = {}; - testCharger.coords.lat = parseFloat(droneLocation.lat) + 0.018; - testCharger.coords.long = parseFloat(droneLocation.long) + 0.018; + testCharger.coords.lat = parseFloat(droneLocation.lat) + testChargerCoordsOffset; + testCharger.coords.long = parseFloat(droneLocation.long) + testChargerCoordsOffset; resolve([{ need_id: '5673920', @@ -50,8 +51,8 @@ export const fetchBids = ({needId}) => { model: 'gc2910', id: '0x', distance: 10, - lat: parseFloat(droneLocation.lat) + 0.018, - long: parseFloat(droneLocation.long) + 0.018, + lat: parseFloat(droneLocation.lat) + testChargerCoordsOffset, + long: parseFloat(droneLocation.long) + testChargerCoordsOffset, price: 20000000000000000000, charger_id: testCharger.id, charger: testCharger @@ -134,7 +135,7 @@ const fetchWithUserId = (url, method = 'GET', body) => { const generateRandomChargers = (coords) => { let chargers = []; for (let i = 1; i < 5; i++) { - chargers.push({id: i, coords: randomCoords({id: i, coords, radius: 1000})}); + chargers.push({id: i.toString(), coords: randomCoords({id: i, coords, radius: 1000})}); } return chargers; }; diff --git a/src/lib/app.js b/src/lib/app.js index 4ad1f93..8480a61 100644 --- a/src/lib/app.js +++ b/src/lib/app.js @@ -4,8 +4,9 @@ import { updateBids, updateStatus } from '../actions'; const _updateStatusAndDispatch = () => { const coords = store.getState().map.coords; if (!coords.lat || !coords.long) return; - const { lat, long } = coords; - const needId = store.getState().order.needId; + const order = store.getState().order; + const { lat, long } = order.droneLocation ? order.droneLocation : coords; + const needId = order.needId; store.dispatch(updateStatus({ lat, long, needId })); }; diff --git a/src/lib/map.js b/src/lib/map.js index 929ab59..261c534 100644 --- a/src/lib/map.js +++ b/src/lib/map.js @@ -1,4 +1,5 @@ import mapboxgl from 'mapbox-gl'; +import store from '../store'; import 'mapbox-gl/dist/mapbox-gl.css'; import {makeImage} from './utils'; import droneIcon from '../images/icon_drone.png'; @@ -152,7 +153,9 @@ export const createMap = ({ .then(getUserLocation) .then(({coords}) => { addUserLocationIcon(map, coords); - return map.setCenter([coords.longitude, coords.latitude]); + if (store.getState().order.stage === 'draft') { + return map.setCenter([coords.longitude, coords.latitude]); + } }) .catch(() => { }); From 8e0a07648a618ab163c923d680bb2a44277c6e83 Mon Sep 17 00:00:00 2001 From: Timi Ajiboye Date: Mon, 16 Apr 2018 03:45:25 +0100 Subject: [PATCH 068/180] chore: started using actual data as props in Charging Main Screen --- src/components/drone_charging/MainScreen.jsx | 10 +++++++--- src/containers/MainScreenContainer.jsx | 16 +++++++++++++--- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/src/components/drone_charging/MainScreen.jsx b/src/components/drone_charging/MainScreen.jsx index 9e438cc..671ec8d 100644 --- a/src/components/drone_charging/MainScreen.jsx +++ b/src/components/drone_charging/MainScreen.jsx @@ -1,4 +1,4 @@ -import React, { Component } from 'react'; +import React, {Component} from 'react'; import PropTypes from 'prop-types'; import Link from '../../containers/LinkContainer.jsx'; import '../MainScreen.css'; @@ -10,14 +10,16 @@ class MainScreen extends Component { componentDidMount() { this.props.onMount(); } + render() { return (