diff --git a/src/test-services/getAddresses/Dockerfile b/src/test-services/getAddresses/Dockerfile new file mode 100644 index 0000000..a1228a0 --- /dev/null +++ b/src/test-services/getAddresses/Dockerfile @@ -0,0 +1,11 @@ +FROM node:10.16.0-alpine + +WORKDIR /test + +COPY package.json /test/ + +RUN npm install + +COPY testGetAddresses.js /test/ + +ENTRYPOINT ["node", "testGetAddresses.js"] diff --git a/src/test-services/getAddresses/package.json b/src/test-services/getAddresses/package.json new file mode 100644 index 0000000..de27143 --- /dev/null +++ b/src/test-services/getAddresses/package.json @@ -0,0 +1,8 @@ +{ + "name": "get-addresses", + "version": "0.0.1", + "dependencies": { + "ethers": "4.0.37", + "bech32": "1.1.3" + } +} diff --git a/src/test-services/getAddresses/run.sh b/src/test-services/getAddresses/run.sh new file mode 100755 index 0000000..371932e --- /dev/null +++ b/src/test-services/getAddresses/run.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +set -e + +cd $(dirname "$0") + +docker build -t get-addresses . > /dev/null + +docker run --rm get-addresses $@ diff --git a/src/test-services/getAddresses/testGetAddresses.js b/src/test-services/getAddresses/testGetAddresses.js new file mode 100644 index 0000000..e51c3c6 --- /dev/null +++ b/src/test-services/getAddresses/testGetAddresses.js @@ -0,0 +1,25 @@ +const { utils } = require('ethers') +const bech32 = require('bech32') +const crypto = require('crypto') + +const privateKey = process.argv[2].startsWith('0x') ? process.argv[2] : '0x' + process.argv[2] + +const ethAddress = utils.computeAddress(privateKey) +const publicKey = utils.computePublicKey(privateKey, true) + +console.log(`Eth address: ${ethAddress}\nBnc address: ${publicKeyToAddress(publicKey)}`) + +function publicKeyToAddress (publicKey) { + const sha256Hash = sha256(Buffer.from(publicKey.substr(2), 'hex')) + const hash = ripemd160(Buffer.from(sha256Hash, 'hex')) + const words = bech32.toWords(Buffer.from(hash, 'hex')) + return bech32.encode('tbnb', words) +} + +function sha256 (bytes) { + return crypto.createHash('sha256').update(bytes).digest('hex') +} + +function ripemd160 (bytes) { + return crypto.createHash('ripemd160').update(bytes).digest('hex') +}