Skip to content

Commit

Permalink
Add Groestlcoin (GRS)
Browse files Browse the repository at this point in the history
  • Loading branch information
HashEngineering authored and gruve-p committed Nov 10, 2020
1 parent 1af6f6b commit 423625b
Show file tree
Hide file tree
Showing 6 changed files with 43 additions and 2 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ npm install multicoin-address-validator
* GarliCoin/grlc `'GarliCoin'` or `'grlc'`
* Gnosis/gno `'Gnosis'` or `'gno'`
* Golem/gnt `'Golem'` or `'gnt'`
* Groestlcoin/grs `'Groestlcoin'` or `'grs'`
* HedgeTrade/hedg `'HedgeTrade'` or `'hedg'`
* Hush/hush `'Hush'` or `'hush'`
* HyperSpace/xsc `'HyperSpace'` or `'xsc'`
Expand Down
3 changes: 3 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,8 @@
"gno",
"Golem",
"gnt",
"Groestlcoin"",
"grs",
"HedgeTrade",
"hedg",
"Hush",
Expand Down Expand Up @@ -243,6 +245,7 @@
"bundle": "^2.1.0",
"cbor-js": "^0.1.0",
"crc": "^3.8.0",
"groestl-hash-js": "1.0.0",
"jssha": "^3.1.2",
"lodash.isequal": "^4.5.0",
"minify": "^6.0.0"
Expand Down
2 changes: 2 additions & 0 deletions src/bitcoin_validator.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@ function getChecksum(hashFunction, payload) {
return cryptoUtils.blake256Checksum(payload);
case 'keccak256':
return cryptoUtils.keccak256Checksum(payload);
case 'groestl512x2':
return cryptoUtils.groestl512x2(payload);
case 'sha256':
default:
return cryptoUtils.sha256Checksum(payload);
Expand Down
5 changes: 5 additions & 0 deletions src/crypto/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ var Blake2B = require('./blake2b');
var base58 = require('./base58');
var base32 = require('./base32');
var BigNum = require('browserify-bignum');
var groestl = require('groestl-hash-js');

function numberToHex(number) {
var hex = Math.round(number).toString(16)
Expand Down Expand Up @@ -115,6 +116,10 @@ module.exports = {
blake2b256: function (hexString) {
return new Blake2B(32).update(Buffer.from(hexString, 'hex'), 32).digest('hex');
},
groestl512x2: function (hexString) {
let result = groestl.groestl_2(Buffer.from(hexString, 'hex'), 1, 0).substr(0, 8);
return result;
},
base58: base58.decode,
byteArray2hexStr: byteArray2hexStr,
hexStr2byteArray: hexStr2byteArray,
Expand Down
9 changes: 7 additions & 2 deletions src/currencies.js
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,13 @@ var CURRENCIES = [{
addressTypes: { prod: ['30', '05', '32'], testnet: ['6f', 'c4', '3a'] },
bech32Hrp: { prod: ['ltc'], testnet: ['tltc'] },
validator: BTCValidator
}, {
name: 'Groestlcoin',
symbol: 'grs',
addressTypes: { prod: ['24', '05'], testnet: ['6f', 'c4'] },
bech32Hrp: { prod: ['grs'], testnet: ['tgrs'] },
hashFunction: 'groestl512x2',
validator: BTCValidator
}, {
name: 'PeerCoin',
symbol: 'ppc',
Expand Down Expand Up @@ -516,5 +523,3 @@ var CURRENCIES = [{
// CURRENCIES
// .sort((a, b) => a.name.toUpperCase() > b.name.toUpperCase() ? 1 : -1)
// .forEach(c => console.log(`"${c.name}","${c.symbol}",`));


25 changes: 25 additions & 0 deletions test/wallet_address_validator.js
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,31 @@ describe('WAValidator.validate()', function () {
valid('tltc1qu78xur5xnq6fjy83amy0qcjfau8m367defyhms', 'litecoin', { networkType: 'testnet' });
});

it('should return true for correct groestlcoin addresses', function () {
valid('Foa6yZoKq2r4t3tUFKFcfoXSQjSodZsGx1', 'groestlcoin');
valid('Fr2Z1bLzqRZByt2WeZwWnpCkA1eBYv83wZ', 'groestlcoin');
valid('Fr2Z1bLzqRZByt2WeZwWnpCkA1eBYv83wZ', 'GRS');
valid('Fr2Z1bLzqRZByt2WeZwWnpCkA1eBYv83wZ', 'Groestlcoin');
valid('Fr2Z1bLzqRZByt2WeZwWnpCkA1eBYv83wZ', 'grs');
valid('Fr2Z1bLzqRZByt2WeZwWnpCkA1eBYv83wZ', 'grs', 'prod');
valid('Fr2Z1bLzqRZByt2WeZwWnpCkA1eBYv83wZ', 'grs', 'both');
valid('FpM19fiGQNjNcaRjFaXVX6Nrewr4gnuuMZ', 'grs', 'prod');
valid('3FyVFsEyyBPzHjD3qUEgX7Jsn4tcJWiqeN', 'grs', 'prod');
valid('38mKdURe1zcQyrFqRLzR8PRao3iLFU5hwU', 'grs', 'prod');
valid('mptPo5AvLzJXi4T82vR6g82fT5uJ9cgfsV', 'grs', 'both');
valid('FdWcvgskHoXUTqeQRAiuGuh5KQ2EoXv5iM', 'groestlcoin');
valid('mzBc4XEFSdzCDcTxAgf6EZXgsZWq3SbMQT', 'groestlcoin', 'testnet');
valid('mzBc4XEFSdzCDcTxAgf6EZXgsZWq3SbMQT', 'groestlcoin', 'both');

// p2sh addresses
valid('3NJZLcZEEYBpxYEUGewU4knsQRn1T2Htk2', 'groestlcoin');
valid('2MxKEf2su6FGAUfCEAHreGFQvEYrfZDahUf', 'groestlcoin', 'testnet');

// segwit addresses
valid('grs1q49qls5kklryt95g5xx4p6msycpgjp8ramfc9jq', 'groestlcoin');
valid('tgrs1qgjd3qhncsxdyh5gt7hz4k6zzvfguslwxwgv23j', 'groestlcoin');
});

it('should return true for correct peercoin addresses', function () {
valid('PHCEsP6od3WJ8K2WKWEDBYKhH95pc9kiZN', 'peercoin');
valid('PSbM1pGoE9dnAuVWvpQqTTYVpKZU41dNAz', 'peercoin');
Expand Down

0 comments on commit 423625b

Please sign in to comment.