50 lines
1.9 KiB
JavaScript
50 lines
1.9 KiB
JavaScript
|
const express = require('express');
|
||
|
const app = express();
|
||
|
const Web3 = require('web3');
|
||
|
const { hashPersonalMessage, addHexPrefix, sha3 } = require('ethereumjs-util');
|
||
|
|
||
|
const hashMessageHex = message => addHexPrefix(hashPersonalMessage(Buffer.from(message)).toString('hex'));
|
||
|
|
||
|
app.use(express.json());
|
||
|
|
||
|
const DeviceManagerArtifact = require('../build/contracts/DeviceManager.json');
|
||
|
let latestNetwork = DeviceManagerArtifact.networks[Object.keys(DeviceManagerArtifact.networks).reduce((res, curr) => curr > res ? curr : res)];
|
||
|
|
||
|
// Connect to local node
|
||
|
const web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
|
||
|
web3.eth.defaultAccount = web3.eth.accounts[0];
|
||
|
|
||
|
// Instance using ABI and contract address
|
||
|
const deviceManager = web3.eth.contract(DeviceManagerArtifact.abi).at(latestNetwork.address);
|
||
|
|
||
|
// Receive payload and validate on blockchain
|
||
|
app.post('/receive', function (req, res) {
|
||
|
console.log('received payload: ' + JSON.stringify(req.body));
|
||
|
|
||
|
// Validate message
|
||
|
const { deviceId, message, signature } = req.body;
|
||
|
let validMessage = deviceManager.isValidEthMessage(deviceId, hashMessageHex(message), signature);
|
||
|
console.log('valid message: ' + validMessage);
|
||
|
|
||
|
// Validate metadata
|
||
|
const { metadata, proof } = req.body;
|
||
|
let metadataHash = addHexPrefix(sha3(metadata).toString('hex'));
|
||
|
let validMetadata = deviceManager.isValidMetadataMember(deviceId, proof, metadataHash);
|
||
|
console.log('valid metadata: ' + validMetadata);
|
||
|
|
||
|
// Validate firmware
|
||
|
const { firmware } = req.body;
|
||
|
let firmwareHash = addHexPrefix(sha3(firmware).toString('hex'));
|
||
|
let validFirmware = deviceManager.isValidFirmwareHash(deviceId, firmwareHash);
|
||
|
console.log('valid firmware: ' + validFirmware);
|
||
|
|
||
|
// Respond back with status
|
||
|
res.send({
|
||
|
validMessage,
|
||
|
validMetadata,
|
||
|
validFirmware
|
||
|
});
|
||
|
})
|
||
|
|
||
|
app.listen(1337, () => console.log('Platform simulation listening on port 1337'));
|