├── .editorconfig ├── .gitignore ├── LICENSE ├── README.md ├── frontend ├── .eslintignore ├── .meteor │ ├── .finished-upgraders │ ├── .gitignore │ ├── .id │ ├── packages │ ├── platforms │ ├── release │ └── versions ├── client │ ├── main.js │ ├── style │ │ ├── index.css │ │ └── style.scss │ └── templates │ │ └── head.html ├── imports │ ├── api │ │ ├── limits.js │ │ ├── offers.js │ │ ├── tokenEvents.js │ │ ├── tokens.js │ │ ├── transactions.js │ │ ├── weth.js │ │ └── wgnt.js │ ├── startup │ │ └── client │ │ │ ├── index.js │ │ │ └── network.js │ ├── test │ │ └── dapple-token-spy.js │ ├── ui │ │ └── client │ │ │ ├── footer.html │ │ │ ├── headers │ │ │ ├── accountselector.html │ │ │ ├── accountselector.js │ │ │ ├── balance.html │ │ │ ├── balance.js │ │ │ ├── currencyselector.html │ │ │ ├── currencyselector.js │ │ │ ├── marketdetails.html │ │ │ ├── messages.html │ │ │ ├── messages.js │ │ │ ├── networkstatus.html │ │ │ ├── tabs.html │ │ │ ├── tabs.js │ │ │ └── volumes.html │ │ │ ├── helpers.js │ │ │ ├── index.html │ │ │ ├── noaccount.html │ │ │ ├── noaccount.js │ │ │ ├── noethereum.html │ │ │ ├── shared.js │ │ │ ├── whatisthis.html │ │ │ └── widgets │ │ │ ├── cancelmodal.html │ │ │ ├── cancelmodal.js │ │ │ ├── chart.html │ │ │ ├── chart.js │ │ │ ├── depositbalance.html │ │ │ ├── depositbalance.js │ │ │ ├── ethtokens.html │ │ │ ├── ethtokens.js │ │ │ ├── ethtokens.test.js │ │ │ ├── gnttokens.html │ │ │ ├── gnttokens.js │ │ │ ├── history.html │ │ │ ├── history.js │ │ │ ├── lasttrades.html │ │ │ ├── lasttrades.js │ │ │ ├── maindeposit.html │ │ │ ├── maindeposit.js │ │ │ ├── maintrades.html │ │ │ ├── maintransfer.html │ │ │ ├── maintransfer.js │ │ │ ├── markets.html │ │ │ ├── markets.js │ │ │ ├── myorders.html │ │ │ ├── myorders.js │ │ │ ├── newallowance.html │ │ │ ├── newallowance.js │ │ │ ├── neworder.html │ │ │ ├── neworder.js │ │ │ ├── offermodal.html │ │ │ ├── offermodal.js │ │ │ ├── orderbook.html │ │ │ ├── orderrow.html │ │ │ ├── orderrow.js │ │ │ ├── orders.html │ │ │ ├── orders.js │ │ │ ├── progress-bar.html │ │ │ ├── progress-bar.js │ │ │ ├── progressblock.html │ │ │ ├── progressblock.js │ │ │ ├── redeemer-modal.html │ │ │ ├── redeemer-modal.js │ │ │ ├── sendtokens.html │ │ │ ├── sendtokens.js │ │ │ ├── transferconfirmation.html │ │ │ ├── transferconfirmation.js │ │ │ ├── wrapper-update.html │ │ │ └── wrapper-update.js │ └── utils │ │ ├── Chart.min.js │ │ ├── conversion.js │ │ ├── functions.js │ │ └── redeemer.js ├── package.json ├── packages │ └── dapple │ │ ├── config.json │ │ ├── contracts-abi │ │ ├── ds-eth-token.js │ │ ├── expiring-market.js │ │ ├── maker-otc.js │ │ ├── matching-market.js │ │ ├── simple-market.js │ │ └── token-wrapper.js │ │ ├── package-post-init.js │ │ ├── package-pre-init.js │ │ └── package.js └── public │ ├── apple-touch-icon-114x114.png │ ├── apple-touch-icon-120x120.png │ ├── apple-touch-icon-144x144.png │ ├── apple-touch-icon-152x152.png │ ├── apple-touch-icon-57x57.png │ ├── apple-touch-icon-60x60.png │ ├── apple-touch-icon-72x72.png │ ├── apple-touch-icon-76x76.png │ ├── clock.svg │ ├── close_x.svg │ ├── counter_1.svg │ ├── counter_2.svg │ ├── counter_3.svg │ ├── cross_normal.svg │ ├── cross_pressed.svg │ ├── dapphub_icn_metamask.svg │ ├── dot_red.svg │ ├── eth_circle_icon.svg │ ├── eth_circle_icon_full.svg │ ├── ethereum-logo.svg │ ├── favicon-128.png │ ├── favicon-16x16.png │ ├── favicon-196x196.png │ ├── favicon-32x32.png │ ├── favicon-96x96.png │ ├── favicon.ico │ ├── fonts │ ├── Montserrat-Medium.woff │ ├── Montserrat-Medium.woff2 │ ├── Montserrat-SemiBold.woff │ └── Montserrat-SemiBold.woff2 │ ├── ic_add_circle_24px.svg │ ├── ic_compare_arrows_black_24px.svg │ ├── ic_remove_24px.svg │ ├── loading.svg │ ├── loadingLarge.svg │ ├── logo-oasis-hover.png │ ├── logo-oasis.png │ ├── logo.svg │ ├── maker_circle_icon.svg │ ├── maker_circle_icon_full.svg │ ├── metamask-logo.svg │ ├── mist-logo.svg │ ├── mstile-144x144.png │ ├── mstile-150x150.png │ ├── mstile-310x150.png │ ├── mstile-310x310.png │ ├── mstile-70x70.png │ ├── myallowance-maximum.svg │ ├── myallowance-personal.svg │ ├── order-warning-red.svg │ ├── order-warning.svg │ └── remove_button.svg ├── gulpfile.js └── package.json /.editorconfig: -------------------------------------------------------------------------------- 1 | # http://editorconfig.org 2 | 3 | root = true 4 | 5 | [*] 6 | charset = utf-8 7 | indent_style = space 8 | indent_size = 2 9 | end_of_line = lf 10 | insert_final_newline = true 11 | trim_trailing_whitespace = true 12 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.sw* 2 | .DS_Store 3 | .publish/ 4 | .vscode/ 5 | .idea 6 | *.iml 7 | scripts/blockchain/tmp 8 | dist/ 9 | node_modules/ 10 | npm-debug.log 11 | nohup.out 12 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | []() 2 | --- 3 | [](https://waffle.io/MakerDAO/maker-market) 4 | [](https://travis-ci.org/makerdao/maker-market) 5 | 6 | 7 | This is a simple on-chain OTC market for ERC20 Standard Tokens on the Ethereum Blockchain. You can either pick an order from the order book (in which case delivery will happen instantly), or submit a new order yourself. 8 | 9 | **Oasis is undergoing alpha testing: Proceed at your own risk, and use only small amounts of ETH and MKR.** 10 | 11 | ## Overview 12 | 13 | This dapp uses Meteor as frontend; the contract side can be tested and deployed using dapple. 14 | 15 | ## Usage (for Users) 16 | 17 | Ensure you have a locally running ethereum node. 18 | 19 | ## Installation (for Developers) 20 | 21 | Requirements: 22 | 23 | * geth `brew install ethereum` (or [`apt-get` for ubuntu](https://github.com/ethereum/go-ethereum/wiki/Installation-Instructions-for-Ubuntu)) 24 | * solidity https://solidity.readthedocs.org/en/latest/installing-solidity.html 25 | * meteor `curl https://install.meteor.com/ | sh` 26 | * meteor-build-client, `npm install -g meteor-build-client` 27 | 28 | Clone and install: 29 | 30 | ```bash 31 | git clone https://github.com/OasisDEX/oasis.git 32 | cd oasis 33 | npm install 34 | ``` 35 | 36 | ## Usage (for Developers) 37 | 38 | To run the frontend, start meteor: 39 | 40 | ```bash 41 | cd frontend 42 | npm install 43 | meteor 44 | ``` 45 | 46 | You can access the user interface on [http://localhost:3000/](http://localhost:3000/) 47 | 48 | To deploy the frontend to Github Pages: 49 | 50 | ```bash 51 | gulp deploy 52 | ``` 53 | 54 | ## Development 55 | 56 | This project uses the [AirBnB style guide](https://github.com/airbnb/javascript) for coding standard guidelines. 57 | We use [ESLint](http://eslint.org/docs/user-guide/getting-started) to automatically check for common code problems or style errors. 58 | There's an eslintConfig section in frontend/package.json for the configuration of ESLint. 59 | You can run the linter with: 60 | 61 | ```bash 62 | cd frontend 63 | meteor npm run lint 64 | ``` 65 | 66 | ## License 67 | This project is licensed under the terms of the Apache License 2.0. 68 | 69 | ## TODOs 70 | See https://waffle.io/MakerDAO/maker-market 71 | 72 | ## Acknowledgements 73 | * Simple Market contract by [Nikolai Mushegian](https://github.com/nmushegian) 74 | * User interface design by [Daniel Brockman](https://github.com/dbrock) 75 | * Blockchain Script by [Chris Hitchcott](https://github.com/hitchcott) 76 | -------------------------------------------------------------------------------- /frontend/.eslintignore: -------------------------------------------------------------------------------- 1 | packages/dapple/package.js 2 | packages/dapple/package-pre-init.js 3 | packages/dapple/package-post-init.js 4 | packages/dapple/maker.js 5 | packages/dapple/contracts-abi/maker-otc.js 6 | packages/dapple/contracts-abi/token-wrapper.js 7 | packages/dapple/contracts-abi/ds-eth-token.js 8 | imports/utils/Chart.min.js 9 | -------------------------------------------------------------------------------- /frontend/.meteor/.finished-upgraders: -------------------------------------------------------------------------------- 1 | # This file contains information which helps Meteor properly upgrade your 2 | # app when you run 'meteor update'. You should check it into version control 3 | # with your project. 4 | 5 | notices-for-0.9.0 6 | notices-for-0.9.1 7 | 0.9.4-platform-file 8 | notices-for-facebook-graph-api-2 9 | 1.2.0-standard-minifiers-package 10 | 1.2.0-meteor-platform-split 11 | 1.2.0-cordova-changes 12 | 1.2.0-breaking-changes 13 | 1.3.0-split-minifiers-package 14 | 1.4.0-remove-old-dev-bundle-link 15 | 1.4.1-add-shell-server-package 16 | -------------------------------------------------------------------------------- /frontend/.meteor/.gitignore: -------------------------------------------------------------------------------- 1 | dev_bundle 2 | local 3 | -------------------------------------------------------------------------------- /frontend/.meteor/.id: -------------------------------------------------------------------------------- 1 | # This file contains a token that is unique to your project. 2 | # Check it into your repository along with the rest of this directory. 3 | # It can be used for purposes such as: 4 | # - ensuring you don't accidentally deploy one app on top of another 5 | # - providing package authors with aggregated statistics 6 | 7 | 133f4p51avjp8h1qfjf57 8 | -------------------------------------------------------------------------------- /frontend/.meteor/packages: -------------------------------------------------------------------------------- 1 | # Meteor packages used by this project, one per line. 2 | # Check this file (and the other files in this directory) into your repository. 3 | # 4 | # 'meteor add' and 'meteor remove' will edit this file for you, 5 | # but you can also edit it by hand. 6 | 7 | meteor-base@1.0.4 # Packages every Meteor app needs to have 8 | mobile-experience@1.0.4 # Packages for a great mobile UX 9 | mongo@1.1.14 # The database Meteor supports right now 10 | blaze-html-templates@1.0.4 # Compile .html files into Meteor Blaze views 11 | session@1.1.7 # Client-side reactive dictionary for your app 12 | jquery@1.11.10 # Helpful client-side library 13 | tracker@1.1.1 # Meteor's client-side reactive programming library 14 | 15 | es5-shim@4.6.15 # ECMAScript 5 compatibility for older browsers. 16 | ecmascript@0.6.1 # Enable ECMAScript2015+ syntax in app code 17 | 18 | ethereum:web3 19 | makerotc:dapple 20 | numeral:numeral 21 | dburles:collection-helpers 22 | ethereum:tools 23 | manuel:viewmodel 24 | twbs:bootstrap 25 | practicalmeteor:mocha 26 | velocity:meteor-stubs 27 | hwillson:stub-collections 28 | dispatch:mocha-phantomjs 29 | standard-minifier-css@1.3.2 30 | standard-minifier-js@1.2.1 31 | shell-server@0.2.1 32 | fourseven:scss 33 | momentjs:moment 34 | mikowals:batch-insert 35 | -------------------------------------------------------------------------------- /frontend/.meteor/platforms: -------------------------------------------------------------------------------- 1 | server 2 | browser 3 | -------------------------------------------------------------------------------- /frontend/.meteor/release: -------------------------------------------------------------------------------- 1 | METEOR@1.4.2.3 2 | -------------------------------------------------------------------------------- /frontend/.meteor/versions: -------------------------------------------------------------------------------- 1 | 3stack:bignumber@2.0.7 2 | allow-deny@1.0.5 3 | amplify@1.0.0 4 | autoupdate@1.3.12 5 | babel-compiler@6.13.0 6 | babel-runtime@1.0.1 7 | base64@1.0.10 8 | binary-heap@1.0.10 9 | blaze@2.1.9 10 | blaze-html-templates@1.0.5 11 | blaze-tools@1.0.10 12 | boilerplate-generator@1.0.11 13 | caching-compiler@1.1.9 14 | caching-html-compiler@1.0.7 15 | callback-hook@1.0.10 16 | check@1.2.4 17 | coffeescript@1.11.1_4 18 | cosmos:browserify@0.10.0 19 | dburles:collection-helpers@1.1.0 20 | ddp@1.2.5 21 | ddp-client@1.3.2 22 | ddp-common@1.2.8 23 | ddp-server@1.3.12 24 | deps@1.0.12 25 | diff-sequence@1.0.7 26 | dispatch:mocha-phantomjs@0.1.7 27 | dispatch:phantomjs-tests@0.0.5 28 | ecmascript@0.6.1 29 | ecmascript-runtime@0.3.15 30 | ejson@1.0.13 31 | es5-shim@4.6.15 32 | ethereum:tools@0.6.0 33 | ethereum:web3@0.15.3 34 | fastclick@1.0.13 35 | fourseven:scss@3.13.0 36 | frozeman:persistent-minimongo@0.1.8 37 | frozeman:storage@0.1.9 38 | geojson-utils@1.0.10 39 | hot-code-push@1.0.4 40 | html-tools@1.0.11 41 | htmljs@1.0.11 42 | http@1.2.10 43 | hwillson:stub-collections@1.0.3 44 | id-map@1.0.9 45 | jquery@1.11.10 46 | launch-screen@1.0.12 47 | livedata@1.0.18 48 | localstorage@1.0.12 49 | logging@1.1.16 50 | makerotc:dapple@0.0.1 51 | manuel:isdev@1.0.0 52 | manuel:reactivearray@1.0.5 53 | manuel:viewmodel@4.1.9 54 | manuel:viewmodel-debug@2.7.1 55 | meteor@1.6.0 56 | meteor-base@1.0.4 57 | mikowals:batch-insert@1.1.14 58 | minifier-css@1.2.15 59 | minifier-js@1.2.15 60 | minimongo@1.0.19 61 | mobile-experience@1.0.4 62 | mobile-status-bar@1.0.13 63 | modules@0.7.7 64 | modules-runtime@0.7.7 65 | momentjs:moment@2.17.1 66 | mongo@1.1.14 67 | mongo-id@1.0.6 68 | npm-mongo@2.2.11_2 69 | numeral:numeral@1.5.3_1 70 | observe-sequence@1.0.14 71 | ordered-dict@1.0.9 72 | practicalmeteor:chai@2.1.0_1 73 | practicalmeteor:loglevel@1.2.0_2 74 | practicalmeteor:mocha@2.4.5_6 75 | practicalmeteor:mocha-core@1.0.1 76 | practicalmeteor:sinon@1.14.1_2 77 | promise@0.8.8 78 | random@1.0.10 79 | reactive-dict@1.1.8 80 | reactive-var@1.0.11 81 | reload@1.1.11 82 | retry@1.0.9 83 | routepolicy@1.0.12 84 | session@1.1.7 85 | sha@1.0.9 86 | shell-server@0.2.1 87 | spacebars@1.0.13 88 | spacebars-compiler@1.0.13 89 | standard-minifier-css@1.3.2 90 | standard-minifier-js@1.2.1 91 | templating@1.2.15 92 | templating-compiler@1.2.15 93 | templating-runtime@1.2.15 94 | templating-tools@1.0.5 95 | tmeasday:test-reporter-helpers@0.2.1 96 | tracker@1.1.1 97 | twbs:bootstrap@3.3.6 98 | ui@1.0.12 99 | underscore@1.0.10 100 | url@1.0.11 101 | velocity:meteor-stubs@1.1.1 102 | webapp@1.3.12 103 | webapp-hashing@1.0.9 104 | -------------------------------------------------------------------------------- /frontend/client/main.js: -------------------------------------------------------------------------------- 1 | import '/imports/startup/client'; 2 | -------------------------------------------------------------------------------- /frontend/client/style/index.css: -------------------------------------------------------------------------------- 1 | /** { font: inherit; margin: 0; padding: 0 } 2 | * { outline: none } 3 | * { box-sizing: border-box } 4 | 5 | body { font-family: sans-serif } 6 | body { line-height: 1rem } 7 | body { font-size: .8rem } 8 | body > div.container { padding: 1rem } 9 | body > div.container { padding-bottom: 3rem } 10 | body > div.container { max-width: 20rem } 11 | body > div.container { margin: auto } 12 | 13 | h1, h2, h3 { color: #546979 } 14 | h1, h2, h3 { line-height: 2rem } 15 | h1, h2, h3 { margin-top: 1rem } 16 | 17 | h1 { text-align: center } 18 | h1 { font-size: 1.5rem } 19 | h1 img { width: 8rem } 20 | h1 img { margin-left: 1rem } 21 | h1 span { position: relative } 22 | h1 span { top: 2.2rem } 23 | h1 span { left: -1.25rem } 24 | 25 | h2 { border-top: .1rem solid currentcolor } 26 | h2, h3 { font-weight: bold } 27 | h2 span { font-size: .6rem } 28 | h2 span { font-weight: normal } 29 | h2 span { margin-left: .5rem } 30 | h2 span { color: gray } 31 | h2 .nav-tabs a:focus { outline: none } 32 | 33 | p { max-width: 30rem } 34 | p { margin: 0 0 10px } 35 | 36 | table { border-collapse: collapse } 37 | table { width: 100% } 38 | th { text-transform: uppercase } 39 | th { font-size: .6rem } 40 | td, th { padding: .2rem } 41 | 42 | small { color: lightgray } 43 | .o td { text-align: right } 44 | .o th { text-align: right } 45 | .o th { color: gray } 46 | .o tbody tr.confirmed td.buy { cursor: pointer } 47 | .o tbody tr.confirmed td.cant-buy { cursor: not-allowed } 48 | .o tbody tr:hover { background: #eee } 49 | .o tbody tr:hover+tr.helper-row { background: #eee } 50 | .o tbody tr.cancelled { color: grey } 51 | .o tbody tr.cancelled td { position: relative } 52 | .o tbody tr.cancelled td:before { content: " " } 53 | .o tbody tr.cancelled td:before { position: absolute } 54 | .o tbody tr.cancelled td:before { bottom: 50% } 55 | .o tbody tr.cancelled td:before { left: 0 } 56 | .o tbody tr.cancelled td:before { border-bottom: 1px solid #333 } 57 | .o tbody tr.cancelled td:before { width: 100% } 58 | .o tbody tr.pending { color: grey } 59 | .o tbody tr.bought { font-weight: 600 } 60 | .o tbody tr.helper-row { color: grey } 61 | .o tbody tr.helper-row { font-size: smaller } 62 | 63 | .nostretch { width: 1% } 64 | .nostretch { white-space: nowrap } 65 | 66 | td.bid, th.bid { color: darkgreen } 67 | td.ask, th.ask { color: darkred } 68 | 69 | form th { text-align: right } 70 | form th { padding: .2rem 1rem } 71 | form th { color: gray } 72 | form th { width: 50% } 73 | form tfoot td { text-align: right } 74 | form tfoot td { padding-top: 1rem } 75 | 76 | .radio label { width: 8rem } 77 | .radio input[type=radio] { margin-top: 5px } 78 | [type=number] { width: 8rem } 79 | 80 | button { border: .075rem solid currentcolor } 81 | button { padding: .1rem .8rem } 82 | button { text-transform: uppercase } 83 | button { font-size: .6rem } 84 | button { border-radius: .2rem } 85 | button { cursor: pointer } 86 | button.btn-default:disabled { color: #eee } 87 | 88 | .input { border: none } 89 | .input { border-bottom: .075rem solid #546979 } 90 | .input { background: none } 91 | .input { padding: .1rem 0rem } 92 | .input { text-transform: uppercase } 93 | .input[disabled] { cursor: not-allowed } 94 | 95 | @media (min-width: 640px) 96 | { :root { font-size: 20pt } } 97 | 98 | @media (min-width: 1280px) { 99 | body > div.container { max-width: 40rem } 100 | h1 { text-align: left } 101 | h1 img { margin-left: -1.2rem } 102 | .o { overflow: hidden } 103 | .row { overflow: hidden } 104 | section { float: right; width: 48% } 105 | section:first-of-type { float: left } 106 | } 107 | 108 | #spnSwitchCurrencies { 109 | margin: 0px 10px; 110 | vertical-align: middle; 111 | cursor: pointer; 112 | } 113 | */ 114 | -------------------------------------------------------------------------------- /frontend/client/templates/head.html: -------------------------------------------------------------------------------- 1 |
2 |4 | Account: 5 | 6 | 11 | 12 | 13 |
14 | {{#if ready}} 15 |16 | Market: 17 | 18 | {{contractAddress}} 19 | {{> whatisthis section="contract"}} 20 | 21 |
22 | {{/if}} 23 |4 | 5 | {{#if showDropdownQuoteCurrencies}} 6 | 7 | {{/if}} 8 | 9 | 10 | 11 | {{#if showDropdownBaseCurrencies}} 12 | 13 | {{/if}} 14 | 15 | 16 | TOKEN PAIR 17 | 18 | 19 |
20 |5 | Market open until {{timestampToString marketCloseTime true true}} 6 | {{> whatisthis section="expiring-market"}} 7 |
8 | {{else}} 9 |
10 | Market closed on {{timestampToString marketCloseTime true true}}.
11 | {{> whatisthis section="expiring-market"}}
12 | Please cancel your orders.
13 |
17 | Could not find the contract on your current blockchain environment. 18 |
19 | {{/if}} 20 | -------------------------------------------------------------------------------- /frontend/imports/ui/client/headers/messages.html: -------------------------------------------------------------------------------- 1 | 2 | 35 | 36 | -------------------------------------------------------------------------------- /frontend/imports/ui/client/headers/messages.js: -------------------------------------------------------------------------------- 1 | import { Template } from 'meteor/templating'; 2 | // import { Session } from 'meteor/session'; 3 | 4 | import './messages.html'; 5 | 6 | Template.messages.viewmodel({ 7 | warningOpen: true, 8 | updateOpen: true, 9 | closeMessage(type) { 10 | if (type === 'update') { 11 | this.updateOpen(false); 12 | } else if (type === 'warning') { 13 | this.warningOpen(false); 14 | } 15 | }, 16 | }); 17 | -------------------------------------------------------------------------------- /frontend/imports/ui/client/headers/networkstatus.html: -------------------------------------------------------------------------------- 1 | 2 |9 | {{network}} 10 | {{> whatisthis section="network"}} 11 |
12 |13 | {{#unless isConnected}} 14 | (not connected) 15 | {{else}} 16 | {{#if syncing}} 17 | 18 | (syncing {{syncingPercentage}}%) 19 | {{else}} 20 | {{#if outOfSync}} 21 | (out of sync, waiting for synchronization) 22 | {{else}} 23 | {{#if loading}} 24 | (loading offers {{loadingProgress}}%) 25 | {{else}} 26 | {{#if ready}} 27 | 28 | CONNECTED 29 | {{/if}} 30 | {{/if}} 31 | {{/if}} 32 | {{/if}} 33 | {{/unless}} 34 |
35 |39 | CLOSING TIME 40 | {{> whatisthis section="network"}} 41 |
42 |
43 |
44 | {{formatDateMarketClose marketCloseTime true}}
45 |
48 | MARKET STATUS 49 | {{> whatisthis section="network"}} 50 |
51 |52 | 53 | CLOSED 54 |
55 | {{/if}} 56 |
8 | You are trying to access OasisDEX without an unlocked account.
9 | Unlock your account on the Metamask Extension.
10 |
You are trying to access OasisDEX without an Ethereum account loaded. 16 | Select an account to use in your Ethereum browser.
17 |If you are using Mist, please click the CONNECT button in the top right corner and authorize an account.
18 | {{/if}} 19 |OasisDEX requires an Ethereum client to be running and current. OasisDEX could not detect a client running which probably means it's not installed, 8 | running or is misconfigured.
9 |Please use one of the following clients to connect to Ethereum:
10 |While you can also connect with geth or parity, a more advanced configuration is needed. See the 25 | OasisDEX documentation for instructions. 26 |
27 |15 | | COIN | 16 |WALLET | 17 |WRAPPED | 18 |19 | |
---|---|---|---|---|
24 | | ETH | 25 |{{{formatBalance ETHBalance '' '' true}}} ETH | 26 |{{{formatBalance wethBalance '' '' true}}} W-ETH | 27 |28 | |
31 | | GNT | 32 |{{{formatBalance GNTBalance '' 'GNT' true}}} GNT | 33 |{{{formatBalance wgntBalance '' 'W-GNT' true}}} W-GNT | 34 |35 | |
9 | | DATE | 10 | {{#if equals historyType 'transferHistory'}} 11 |ACTION | 12 | {{/if}} 13 | {{#if equals historyType 'depositHistory'}} 14 |ACTION | 15 |COIN | 16 | {{else}} 17 |RECIPIENT | 18 |COIN | 19 | {{/if}} 20 |AMOUNT | 21 |22 | |
---|---|---|---|---|---|---|---|---|
32 | | 33 | {{#if loadingTokenEvents this.transactionHash}} 34 | | 41 | 37 | {{else}} 38 | {{timestampToString this.timestamp true true}} 39 | {{/if}} 40 |42 | {{#if equals this.type 'deposit'}} 43 | WRAP 44 | {{else}} 45 | UNWRAP 46 | {{/if}} 47 | | 48 |{{this.token}} | 49 |{{{formatBalance this.amount '' this.token true}}} | 50 |51 | | |||
63 | | 64 | {{#if loadingTokenEvents this.transactionHash}} 65 | | 72 | {{#if equals historyType 'transferHistory'}} 73 | 68 | {{else}} 69 | {{timestampToString this.timestamp true true}} 70 | {{/if}} 71 |74 | {{#if (isMyAddress this.to)}} 75 | IN 76 | {{else}} 77 | OUT 78 | {{/if}} 79 | | 80 | {{/if}} 81 | {{#if equals historyType 'depositHistory'}} 82 |{{ friendlyAddress(this.to) }} | 83 | {{else}} 84 |{{ friendlyAddress(this.to) }} | 85 | {{/if}} 86 |{{this.token}} | 87 |{{{formatBalance this.amount '' this.token 88 | true}}} | 89 |90 | |
20 | | PAIR | 21 |PRICE | 22 |WEEKLY VOLUME | 23 |24 | |
---|---|---|---|---|
31 | | 32 | {{this.base}} / {{this.quote}} 33 | | 34 |35 | {{#if loadingTradeHistory}} 36 | | 47 | 39 | {{else}} 40 | {{#if equals this.price 'N/A'}} 41 | N/A 42 | {{else}} 43 | {{{formatNumber this.price '' true}}} 44 | {{/if}} 45 | {{/if}} 46 |48 | {{#if loadingTradeHistory}} 49 | | 56 | 52 | {{else}} 53 | {{{formatBalance this.volume 2 '' true}}} 54 | {{/if}} 55 |57 | |
63 | SHOW MORE 64 | | 65 |||||
69 | SHOW LESS 70 | | 71 |
6 | {{#if showDate}} | DATE | {{/if}} 7 | {{#if showType}} 8 |9 | ACTION 10 | | 11 | {{/if}} 12 | {{#unless equals priceClass 'ask'}} 13 | {{#unless equals priceClass 'bid'}} 14 |PRICE | 15 | {{/unless}} 16 | {{/unless}} 17 | {{#if or (equals priceClass 'ask') (equals priceClass 'bid')}} 18 |PRICE | 19 | {{/if}} 20 | 21 |{{quoteCurrency}} | 22 |{{baseCurrency}} | 23 | 24 |25 | |
---|