From 749787381c3fdcfb45852b2234b8099483ff0cf5 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Thu, 6 Dec 2012 20:23:34 -0800 Subject: Code re-org --- app.coffee | 191 +++++++----------------------------------- passport.coffee | 30 +++++++ public/css/index.less | 2 +- public/js/calculator.coffee | 8 +- public/js/index.coffee | 2 +- public/js/report.coffee | 2 +- public/js/setup.coffee | 15 ++-- routes/calculator.coffee | 30 +++++++ routes/sessions.coffee | 19 +++++ routes/transactions.coffee | 39 +++++++++ routes/users.coffee | 45 ++++++++++ views/about.html | 142 ------------------------------- views/calculator.html | 42 ---------- views/calculator/setup.html | 39 +++++++++ views/calculator/show.html | 42 ++++++++++ views/contact.html | 16 ---- views/error.html | 1 - views/exchangers.html | 65 -------------- views/index.html | 31 ------- views/join.html | 11 --- views/layout.html | 3 +- views/login.html | 26 ------ views/main/about.html | 142 +++++++++++++++++++++++++++++++ views/main/contact.html | 16 ++++ views/main/exchangers.html | 65 ++++++++++++++ views/main/index.html | 31 +++++++ views/main/join.html | 11 +++ views/main/merchants.html | 35 ++++++++ views/main/signup.html | 24 ++++++ views/merchants.html | 35 -------- views/report.html | 40 --------- views/sessions/new.html | 26 ++++++ views/setup.html | 43 ---------- views/signup.html | 24 ------ views/transactions/index.html | 40 +++++++++ views/user.html | 43 ---------- views/users/new.html | 27 ++++++ 37 files changed, 707 insertions(+), 696 deletions(-) create mode 100644 passport.coffee create mode 100644 routes/calculator.coffee create mode 100644 routes/sessions.coffee create mode 100644 routes/transactions.coffee create mode 100644 routes/users.coffee delete mode 100644 views/about.html delete mode 100644 views/calculator.html create mode 100644 views/calculator/setup.html create mode 100644 views/calculator/show.html delete mode 100644 views/contact.html delete mode 100644 views/error.html delete mode 100644 views/exchangers.html delete mode 100644 views/index.html delete mode 100644 views/join.html delete mode 100644 views/login.html create mode 100644 views/main/about.html create mode 100644 views/main/contact.html create mode 100644 views/main/exchangers.html create mode 100644 views/main/index.html create mode 100644 views/main/join.html create mode 100644 views/main/merchants.html create mode 100644 views/main/signup.html delete mode 100644 views/merchants.html delete mode 100644 views/report.html create mode 100644 views/sessions/new.html delete mode 100644 views/setup.html delete mode 100644 views/signup.html create mode 100644 views/transactions/index.html delete mode 100644 views/user.html create mode 100644 views/users/new.html diff --git a/app.coffee b/app.coffee index b83f649d..a5c1ecdf 100644 --- a/app.coffee +++ b/app.coffee @@ -1,43 +1,15 @@ express = require('express') -http = require('http') path = require('path') engines = require('consolidate') -passport = require('passport') -bcrypt = require('bcrypt') -db = require("redis").createClient() -ask = bid = 0 +passport = require('./passport').passport -LocalStrategy = require('passport-local').Strategy +calculator = require("./routes/calculator") +sessions = require("./routes/sessions")(passport) +transactions = require("./routes/transactions") +users = require("./routes/users") -passport.serializeUser((user, done) -> - done(null, user.username) -) - -passport.deserializeUser((id, done) -> - user = username: 'soltysa', password: 'adam' - done(null, user) -) - -passport.use(new LocalStrategy( - (username, password, done) -> - bcrypt.hash(password, 12, (err, hash) -> - db.hget(username, 'password', (err, result) -> - console.log(result) - if result - bcrypt.compare(password, result, (err, match) -> - console.log(match) - if match - db.hgetall(username, (err, user) -> - return done(null, user) - ) - ) - ) - ) - return done(null, false) -)) - -ensureAuthenticated = (req, res, next) -> - return next() if req.isAuthenticated() +authorize = (req, res, next) -> + return next() if req.isAuthenticated() res.redirect('/login') app = express() @@ -55,13 +27,13 @@ app.use(passport.session()) app.use(app.router) routes = - "/": 'index' - "/about": 'about' - "/exchangers": 'exchangers' - "/exchangers/join": 'join' - "/merchants": 'merchants' - "/merchants/signup": 'signup' - "/contact": 'contact' + "/": 'main/index' + "/about": 'main/about' + "/exchangers": 'main/exchangers' + "/exchangers/join": 'main/join' + "/merchants": 'main/merchants' + "/merchants/signup": 'main/signup' + "/contact": 'main/contact' for route, view of routes ((route, view) -> @@ -74,132 +46,25 @@ for route, view of routes ) )(route, view) -app.get('/setup', (req, res) -> - res.render('setup', js: (-> global.js), css: (-> global.css)) -) +app.get('/setup', calculator.new) +app.get('/calculator', calculator.show) +app.get('/ticker', calculator.ticker) -app.get('/:user/report', (req, res) -> - res.render('report', - user: req.params.user, - js: (-> global.js), - css: (-> global.css) - ) -) +app.get('/login', sessions.new) +app.post('/login', sessions.create) -app.get('/:user.json', (req, res) -> - db.hgetall(req.params.user, (err, obj) -> - res.write(JSON.stringify(obj)) - res.end() - ) -) - -app.get('/:user/transactions', (req, res) -> - user = req.params.user - r = 'transactions': [] - - db.lrange("#{user}:transactions", 0, -1, (err, transactions) -> - process = (err, t) -> - r.transactions.push t - - if i >= transactions.length - res.write(JSON.stringify(r)) - res.end() - else - db.hgetall("#{user}:transactions:#{transactions[i++]}", process) - - i = 0 - db.hgetall("#{user}:transactions:#{transactions[i++]}", process) - ) -) - -app.get('/ticker', (req, res) -> - options = - host: 'bitcoincharts.com', - path: "/t/depthcalc.json?symbol=#{req.query.symbol}&type=#{req.query.type}&amount=#{req.query.amount}¤cy=true" +app.get('/:user.json', authorize, users.json) +app.get('/:user', authorize, users.show) - http.get(options, (r) -> - r.setEncoding('utf-8') - r.on('data', (chunk) -> - try - exchange = 1000 / JSON.parse(chunk).out - exchange = (Math.ceil(exchange * 100) / 100).toString() - catch e - exchange = "" +app.get('/users/new', authorize, users.new) +app.post('/users', authorize, users.create) - res.writeHead(200, - 'Content-Length': exchange.length, - 'Content-Type': 'text/plain') - res.write(exchange) - res.end() - ) - ) -) +app.get('/:user/edit', authorize, users.edit) +app.post('/:user/update', authorize, users.update) -app.get('/login', (req, res) -> - res.render('login', - js: (-> global.js), - css: (-> global.css) - ) -) - -app.post('/login', (req, res, next) -> - passport.authenticate('local', (err, user, info) -> - if (err) - return next(err) - if (!user) - return res.redirect('/login') - req.logIn(user, (err) -> - if (err) - return next(err) - return res.redirect('/' + user.username) - ) - )(req, res, next) -) - -app.post('/users', (req, res) -> - params = [] - for k,v of req.body - params.push(encodeURIComponent(k), '=', encodeURIComponent(v), '&') - params.pop() if (params.length) - res.redirect('calculator?' + params.join('')) -) - -app.post('/:user/transactions', (req, res) -> - user = req.params.user - db.incr('transactions', (err, id) -> - db.hmset("#{user}:transactions:#{id}", req.body, -> - db.rpush("#{user}:transactions", id, -> - res.write(JSON.stringify(req.body)) - res.end() - ) - ) - ) -) - -app.get('/calculator', (req, res) -> - console.log(req.user) - res.render('calculator', - js: (-> global.js), - css: (-> global.css), - ) -) - -app.get('/:user/edit', ensureAuthenticated, (req, res) -> - res.render('user', - user: req.params.user, - js: (-> global.js), - css: (-> global.css) - ) -) - -app.get('/:user', (req, res) -> - console.log(req.user) - res.render('calculator', - user: req.params.user, - js: (-> global.js), - css: (-> global.css) - ) -) +app.get('/:user/transactions.json', authorize, transactions.json) +app.post('/:user/transactions', authorize, transactions.create) +app.get('/:user/report', authorize, transactions.index) app.use((err, req, res, next) -> res.status(500) diff --git a/passport.coffee b/passport.coffee new file mode 100644 index 00000000..280117d1 --- /dev/null +++ b/passport.coffee @@ -0,0 +1,30 @@ +db = require("redis").createClient() +bcrypt = require('bcrypt') + +passport = require('passport') +LocalStrategy = require('passport-local').Strategy + +passport.serializeUser((user, done) -> + done(null, user.username) +) + +passport.deserializeUser((username, done) -> + db.hgetall(username, (err, user) -> + return done(null, user) + ) +) + +passport.use(new LocalStrategy( + (username, password, done) -> + db.hget(username, 'password', (err, hash) -> + if hash + bcrypt.compare(password, hash, (err, match) -> + if match + db.hgetall(username, (err, user) -> + return done(null, user) + ) + ) + ) +)) + +exports.passport = passport diff --git a/public/css/index.less b/public/css/index.less index cc31fc1b..6cd236ca 100644 --- a/public/css/index.less +++ b/public/css/index.less @@ -10,5 +10,5 @@ footer { } #ask, #bid { color: white; } -div.directory img { width: 150px; height: 150px; float: left; padding-right: 20px; } +div.directory img { width: 150px; height: 150px; float: left; padding-right: 5px; } div.row-fluid td.first { text-align: right; } diff --git a/public/js/calculator.coffee b/public/js/calculator.coffee index ef26fd63..505a1a09 100644 --- a/public/js/calculator.coffee +++ b/public/js/calculator.coffee @@ -15,7 +15,7 @@ g = exports ? this $(-> g.user = $('#user').val() - g.name = get('name') + g.title = get('title') g.address = get('address') g.symbol = get('symbol') g.commission = parseFloat(get('commission')) @@ -28,7 +28,7 @@ $(-> dataType: 'json', success: (data) -> if data? - g.name = data.name + g.title = data.title g.address = data.address g.symbol = data.symbol g.commission = data.commission @@ -54,10 +54,10 @@ setup = -> if g.logo $('#logo').attr('src', g.logo).show() - else if not g.name + else if not g.title $('#logo').attr('src', 'img/bitcoin.png').show() else - $('#name').html(g.name).show() + $('#title').html(g.title).show() address = g.address if g.user? and g.user diff --git a/public/js/index.coffee b/public/js/index.coffee index 2a8a6b5a..b180ee2d 100644 --- a/public/js/index.coffee +++ b/public/js/index.coffee @@ -3,6 +3,7 @@ $(-> fetchExchangeRate('ask') fetchExchangeRate('bid') + setTimeout(fetchExchangeRate, 900000) ) fetchExchangeRate = (type) -> @@ -20,4 +21,3 @@ fetchExchangeRate = (type) -> error: -> $("##{type}").html('??') ) - setTimeout(fetchExchangeRate, 900000) diff --git a/public/js/report.coffee b/public/js/report.coffee index 06c99050..28ec988b 100644 --- a/public/js/report.coffee +++ b/public/js/report.coffee @@ -8,7 +8,7 @@ $(-> $('#from').val(moment().subtract('days', 7).format("MM/DD/YYYY")) $('#to').val(moment().format("MM/DD/YYYY")) $('.date').datepicker(onClose: filterDates) - $.getJSON('transactions', (data) -> + $.getJSON('transactions.json', (data) -> g.transactions = data.transactions display(g.transactions) filterDates() diff --git a/public/js/setup.coffee b/public/js/setup.coffee index d53a4e48..6c38d4b5 100644 --- a/public/js/setup.coffee +++ b/public/js/setup.coffee @@ -6,10 +6,14 @@ $(-> symbols = ['mtgoxUSD', 'btceUSD', 'bitstampUSD', 'virwoxSLL', 'btcdeEUR', 'mtgoxEUR', 'btc24EUR', 'mtgoxAUD', 'cryptoxAUD', 'mtgoxGBP', 'btcnCNY', 'intrsngEUR', 'virtexCAD', 'mtgoxPLN', 'cbxUSD', 'bitcurexPLN', 'bitmarketEUR', 'bitfloorUSD', 'mrcdBRL', 'bcEUR'] + symbols = symbols.sort() + + user = $('#username').val() $.each(symbols, (i, v) -> $('#symbol').append("") ) + $("#symbol option[value='mtgoxUSD']").attr('selected', 'selected') $('#address').change(-> if check_address($(this).val()) @@ -18,12 +22,13 @@ $(-> $(this).css('color', 'red') ) - if $('#login').val() != "" - $.getJSON('/' + $('#login').val() + '.json', (data) -> - $('#name').val(data.name) - $('#image').val(data.image) + if user + $('#setup').attr('action', "/#{user}/update").attr('method', 'post') + $.getJSON("/#{user}.json", (data) -> + $('#title').val(data.title) + $('#logo').val(data.logo) $('#address').val(data.address) - $('#symbol option[value=' + data.symbol + ']').attr('selected', 'selected') + $("#symbol option[value='#{data.symbol}']").attr('selected', 'selected') $('#commission').val(data.commission) ) ) diff --git a/routes/calculator.coffee b/routes/calculator.coffee new file mode 100644 index 00000000..0fe11a28 --- /dev/null +++ b/routes/calculator.coffee @@ -0,0 +1,30 @@ +exports.new = (req, res) -> + res.render('calculator/setup', js: (-> global.js), css: (-> global.css)) + +exports.show = (req, res) -> + res.render('calculator/show', + js: (-> global.js), + css: (-> global.css), + ) + +exports.ticker = (req, res) -> + options = + host: 'bitcoincharts.com', + path: "/t/depthcalc.json?symbol=#{req.query.symbol}&type=#{req.query.type}&amount=#{req.query.amount}¤cy=true" + + require('http').get(options, (r) -> + r.setEncoding('utf-8') + r.on('data', (chunk) -> + try + exchange = 1000 / JSON.parse(chunk).out + exchange = (Math.ceil(exchange * 100) / 100).toString() + catch e + exchange = "" + + res.writeHead(200, + 'Content-Length': exchange.length, + 'Content-Type': 'text/plain') + res.write(exchange) + res.end() + ) + ) diff --git a/routes/sessions.coffee b/routes/sessions.coffee new file mode 100644 index 00000000..631004ca --- /dev/null +++ b/routes/sessions.coffee @@ -0,0 +1,19 @@ +module.exports = (passport) -> + new: (req, res) -> + res.render('sessions/new', + js: (-> global.js), + css: (-> global.css) + ) + + create: (req, res, next) -> + passport.authenticate('local', (err, user, info) -> + if (err) + return next(err) + if (!user) + return res.redirect('/login') + req.login(user, (err) -> + if (err) + return next(err) + return res.redirect('/' + user.username) + ) + )(req, res, next) diff --git a/routes/transactions.coffee b/routes/transactions.coffee new file mode 100644 index 00000000..92e566fa --- /dev/null +++ b/routes/transactions.coffee @@ -0,0 +1,39 @@ +db = require("redis").createClient() + +module.exports = + json: (req, res) -> + user = req.params.user + r = 'transactions': [] + + db.lrange("#{user}:transactions", 0, -1, (err, transactions) -> + process = (err, t) -> + r.transactions.push t + + if i >= transactions.length + res.write(JSON.stringify(r)) + res.end() + else + db.hgetall("#{user}:transactions:#{transactions[i++]}", process) + + i = 0 + db.hgetall("#{user}:transactions:#{transactions[i++]}", process) + ) + + create: (req, res) -> + user = req.params.user + db.incr('transactions', (err, id) -> + db.hmset("#{user}:transactions:#{id}", req.body, -> + db.rpush("#{user}:transactions", id, -> + res.write(JSON.stringify(req.body)) + res.end() + ) + ) + ) + + index: (req, res) -> + res.render('transactions/index', + user: req.params.user, + js: (-> global.js), + css: (-> global.css) + ) + diff --git a/routes/users.coffee b/routes/users.coffee new file mode 100644 index 00000000..ea927583 --- /dev/null +++ b/routes/users.coffee @@ -0,0 +1,45 @@ +db = require("redis").createClient() +bcrypt = require('bcrypt') + +module.exports = + json: (req, res) -> + db.hgetall(req.params.user, (err, obj) -> + delete obj['password'] + res.write(JSON.stringify(obj)) + res.end() + ) + + show: (req, res) -> + res.render('calculator/show', + user: req.params.user, + js: (-> global.js), + css: (-> global.css) + ) + + new: (req, res) -> + res.render('users/new', + js: (-> global.js), + css: (-> global.css), + ) + + create: (req, res) -> + bcrypt.hash(req.body.password, 12, (err, hash) -> + req.body.password = hash + db.hmset(req.body.username, req.body, -> + res.redirect(req.body.username) + ) + ) + + edit: (req, res) -> + res.render('calculator/setup', + user: req.params.user, + js: (-> global.js), + css: (-> global.css) + ) + + update: (req, res) -> + return unless req.params.user is req.user.username or + req.user.username is 'admin' + db.hmset(req.params.user, req.body, -> + res.redirect("/#{req.params.user}") + ) diff --git a/views/about.html b/views/about.html deleted file mode 100644 index 6711c039..00000000 --- a/views/about.html +++ /dev/null @@ -1,142 +0,0 @@ -
-
-

What are bitcoins?

-

- Bitcoins are units of digital currency that can be - transferred over the Internet. - They get sent to a bitcoin address and stored in a digital wallet - that you can access with a - password. Creating and using a new wallet and address is free and as - easy as email. Try it here. -

- -

- Transactions between bitcoin addresses are - recorded in a public file and published on - the Internet. This file is called the block chain and it keeps track of what amounts are - stored at what addresses. -

- - About every 10 minutes, 50 new bitcoins are - generated and distributed proportionally to people that - contribute computing power to the network. The - software to participate is free and open source so anyone can run it on their computer. -

- -

- Over time, fewer and fewer - bitcoins will be created until there are a total of - 21 million of them in circulation by the year 2040. Each bitcoin - is divisible up to 8 decimal places, making - it possible to transact very small portions of them. -

-
-
-

Why use them?

-

- They're free, fast, secure, and global. Merchants - don't get charged for accepting them and you don't - get charged for transferring them, even - internationally. There are no fees, prerequisites, or - limits. You can register addresses anonymously and - create as many accounts as you like. They can - never be frozen because no central authority - controls them. Whether you're sending a fraction of - a cent or a million dollars, the network doesn't - discriminate. -

- -

- You can use bitcoins to securely store - and backup your savings and gain access to them - from anywhere that has Internet access. They tend to - appreciate in value over time because of their - limited supply so they make a good investment. - Unlike dollars and other national currencies, no - government or issuing authority can print more of - them. -

- -

- Bitcoins enable you to send free, - immediate payments to your friends and family - from your phone or laptop so you can pay a co-worker - back for coffee, transfer wages to family overseas, - or donate to organizations like WikiLeaks who have - been cut off by the major payment companies. -

-
-
- - -
-
-

Where can I get some?

-

- Contact one of our trusted exchangers. -

- -

- There are also several bitcoin markets operating online. The largest one in Canada - is cavirtex.com and is run out of Calgary. They link up buyers and sellers and facilitate trades by - allowing you to deposit and withdraw Canadian dollars directly from your bank account. A list of other - online exchanges and their rates can be found at bitcoincharts.com. -

- -

- You can also use sites like Local Bitcoins, Bitcoinary, and Bitcoin OTC to find people to trade with over the Internet if you want to take your chances with strangers. -

-
- -
-

How is their price set?

-

- Most merchants accepting bitcoin will use an - exchange rate from one of the online markets - to determine their equivalent - dollar value. The exchange rate is simply the last - price that some seller was able to charge some - buyer for bitcoins in the free market and is - governed by supply and demand. -

- -

- Bitcoins aren't backed by any underlying - commodity or insured by any authority. They - have value as a form of currency due to their mathematically - guaranteed scarcity, security, ease of use, - distributed nature, lack of fees, divisibility, and - global recognition. -

- -

- We peg our rates - to cavirtex.com. -

-
-
- -
-
-

What can I buy with them?

-

- You can spend them locally at one of our participating merchants or check out - this article for some other good suggestions. - The number of companies accepting bitcoins - is growing quickly and we're working to get more stores accepting them in - Vancouver. We believe it'll be in - their best interest to avoid the transaction fees - charged by the credit card companies. Transaction - fees end up getting built into the prices we pay for - goods and services across the board so we're all - paying for them indirectly. -

- -
-
-

Where can I learn more?

-

- Come to our monthly meetup group or contact one of us. -

-
-
diff --git a/views/calculator.html b/views/calculator.html deleted file mode 100644 index aa882ee4..00000000 --- a/views/calculator.html +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - Bitcoin Payment Calculator - - {{#css}}calculator{{/css}} - {{#js}}calculator{{/js}} - - -
- - - -
- - diff --git a/views/calculator/setup.html b/views/calculator/setup.html new file mode 100644 index 00000000..8722a68a --- /dev/null +++ b/views/calculator/setup.html @@ -0,0 +1,39 @@ + + + + + + Bitcoin Payment Calculator + + {{#css}}calculator{{/css}} + {{#js}}setup{{/js}} + + +
+
+

Calculator Setup

+ + + + + + + + + + + + + + + + + + +
+ +
+
+ + diff --git a/views/calculator/show.html b/views/calculator/show.html new file mode 100644 index 00000000..a3b632f2 --- /dev/null +++ b/views/calculator/show.html @@ -0,0 +1,42 @@ + + + + + + Bitcoin Payment Calculator + + {{#css}}calculator{{/css}} + {{#js}}calculator{{/js}} + + +
+ + + +
+ + diff --git a/views/contact.html b/views/contact.html deleted file mode 100644 index 5914db11..00000000 --- a/views/contact.html +++ /dev/null @@ -1,16 +0,0 @@ -

Contact Us

- -

-You can use our message board at meetup.com to get in touch. For issues with this website, let us know at Github. -

- -

Support Us

- -

-Want to send some coins our way? We'll use donations to promote bitcoins by purchasing stickers and Android tablets for local merchants who run our payment software. Send to 1VAnbtCAnYccECnjaMCPnWwt81EHCVgNr -- every little bit helps! -

-QR -

- - - diff --git a/views/error.html b/views/error.html deleted file mode 100644 index 58edb1a5..00000000 --- a/views/error.html +++ /dev/null @@ -1 +0,0 @@ -Error: {{error}} diff --git a/views/exchangers.html b/views/exchangers.html deleted file mode 100644 index b3d86fa4..00000000 --- a/views/exchangers.html +++ /dev/null @@ -1,65 +0,0 @@ -
-
-
-

Exchangers

-

- Our goal is to establish a network of trusted individuals who can provide a consistent experience and reliable price for people wanting to trade bitcoins in Vancouver. -

-

Join Us!

-
- -
-

Meeting Procedure

-
    -
  • Contact one of us to let us know your availability and how much you want to spend
  • -
  • We'll arrange a time to meet at a public place like a café or a bank
  • -
  • At the time of meeting, we'll look up the exchange rate above to determine how many bitcoins to send for the amount specified
  • -
  • You'll provide us with a bitcoin address to send to and count out the cash for us
  • -
  • We'll send the bitcoins to your address using a phone or laptop
  • -
  • When the transaction is confirmed, we take the cash and you keep the bitcoins!
  • -
-
-
- -
-
-

Adam

- - - - - - - - - -
Neighbourhood:Hastings/Sunrise
Contact
-
-
-

Jackson

- - - - - - - - - -
Neighbourhood:Fairview
Contact
-
-
-

Yuri

- - - - - - - - - -
Neighbourhood:West End
Contact
-
-
-
diff --git a/views/index.html b/views/index.html deleted file mode 100644 index 72454ad0..00000000 --- a/views/index.html +++ /dev/null @@ -1,31 +0,0 @@ -
-
-
-
-

Bitcoin Vancouver

-

We help local businesses accept bitcoins by providing them with payment software and paying cash for their bitcoins. We also sell bitcoins to the public through a network of qualified local exchangers.

-

Learn more »

-
- -
-
-

Info

-

New to bitcoins? We'll explain why you might want to use them and point you to some useful resources.

-

Go »

-
- -
-

Merchants

-

You can spend your bitcoins in town to support local merchants and improve the local economy.

-

Go »

-
- -
-

Exchangers

-

Looking to buy or sell bitcoins? Our trusted exchangers will give you a fair price and a professional experience.

-

Go »

-
-
-
-
-
diff --git a/views/join.html b/views/join.html deleted file mode 100644 index f25c0dea..00000000 --- a/views/join.html +++ /dev/null @@ -1,11 +0,0 @@ -

Join Us

- -

-If you're a resident of Vancouver and would like to be listed as a local exchanger here, come to our monthly meetup group and introduce yourself! We'll teach you everything you need to know and if you agree to use our posted rates and we get the sense that you'll be fair and professional then we'll happily list you on our exchangers page. -

- -

Our Rates

- -

-Our exchange rates are pegged to the current market prices at cavirtex.com including a 3% surcharge to cover the transaction fees that they charge to use their service. We don't take any commission above and beyond that for ourselves. Our hope is that eventually there will be enough turnover in the Vancouver bitcoin economy that we won't need to use an online exchange. When that happens, we'll be able to eliminate fees altogether. -

diff --git a/views/layout.html b/views/layout.html index 0e84c667..ae4d5b69 100644 --- a/views/layout.html +++ b/views/layout.html @@ -15,8 +15,7 @@ VanBTC