From d6d252f3141711ca16ea660895eb38e5b8af74af Mon Sep 17 00:00:00 2001 From: alice3773 <56470525+alice3773@users.noreply.github.com> Date: Mon, 2 May 2022 23:17:26 +0800 Subject: [PATCH] finish the first exchnage project --- server/index.js | 76 ++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 65 insertions(+), 11 deletions(-) diff --git a/server/index.js b/server/index.js index 6da22c6d..74664c65 100644 --- a/server/index.js +++ b/server/index.js @@ -2,31 +2,85 @@ const express = require('express'); const app = express(); const cors = require('cors'); const port = 3042; +const EC = require('elliptic').ec; +global.fetch = require("node-fetch"); + // localhost can have cross origin errors // depending on the browser you use! app.use(cors()); app.use(express.json()); +const ec = new EC('secp256k1'); +const keyPair = []; +// ECDSA +while (keyPair.length < 3) { + const key = ec.genKeyPair(); + keyPair.push({ + key: key, + privateKey: key.getPrivate().toString(16), + publicX: key.getPublic().x.toString(16), + publicY: key.getPublic().y.toString(16), + publicKey: key.getPublic().encode('hex') + }) +} +console.log(keyPair); + +const addr1 = keyPair[0]['publicKey']; +const addr2 = keyPair[1]['publicKey']; +const addr3 = keyPair[2]['publicKey']; + const balances = { - "1": 100, - "2": 50, - "3": 75, + [addr1]: 100, + [addr2]: 50, + [addr3]: 75, } +console.log(balances); + +const balancesPair = [{ + [addr1]: 100, + privateKey: keyPair[0]['privateKey'] + }, + { + [addr2]: 50, + privateKey: keyPair[1]['privateKey'] + }, + { + [addr3]: 75, + privateKey: keyPair[2]['privateKey'] + } +] +console.log(balancesPair); app.get('/balance/:address', (req, res) => { - const {address} = req.params; - const balance = balances[address] || 0; - res.send({ balance }); + const { address } = req.params; + const balance = balances[address] || 0; + console.log(balance); + res.send({ balance }); }); app.post('/send', (req, res) => { - const {sender, recipient, amount} = req.body; - balances[sender] -= amount; - balances[recipient] = (balances[recipient] || 0) + +amount; - res.send({ balance: balances[sender] }); + const { sender, recipient, amount } = req.body; + // console.log({ sender, recipient, amount }); + // console.log(sender); + + const msgHash = ['Alica send 2 ETH to Bobbie', 2, 'ETH']; + var signKey = ""; + keyPair.map((pair) => { + if (pair['publicKey'] === sender) { + signKey = pair['key'] + } + }) + // console.log(signKey); + const signature = signKey.sign(msgHash); + const derSign = signature.toDER(); + console.log(signKey.verify(msgHash, derSign)); + + balances[sender] -= amount; + balances[recipient] = (balances[recipient] || 0) + +amount; + res.send({ balance: balances[sender] }); }); app.listen(port, () => { - console.log(`Listening on port ${port}!`); + console.log(`Listening on port ${port}!`); });