Skip to content
This repository has been archived by the owner on Sep 6, 2018. It is now read-only.

Commit

Permalink
Merge pull request #2 from NiluPlatform/list-nilu-asset
Browse files Browse the repository at this point in the history
List Nilu (NILU)
  • Loading branch information
cbeams committed May 7, 2018
2 parents 19a6480 + 27f0cd1 commit d6a9d62
Show file tree
Hide file tree
Showing 3 changed files with 118 additions and 0 deletions.
87 changes: 87 additions & 0 deletions src/main/java/bisq/asset/coins/Nilu.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
package bisq.asset.coins;

import bisq.asset.AddressValidationResult;
import bisq.asset.AddressValidator;
import bisq.asset.Coin;

import org.bouncycastle.jcajce.provider.digest.Keccak;

import java.nio.charset.StandardCharsets;

public class Nilu extends Coin {

public Nilu() {
super("Nilu", "NILU", new NiluAddressValidator());
}


private static class NiluAddressValidator implements AddressValidator {

private static final String upperOrLowerPattern = "(0x)?([0-9a-f]{40}|[0-9A-F]{40})";
private static final String mixPattern = "(0x)?([0-9a-fA-F]{40})";

@Override
public AddressValidationResult validate(String address) {
if (!isValidAddress(address))
return AddressValidationResult.invalidStructure();

return AddressValidationResult.validAddress();
}

private boolean isValidAddress(String eip55) {
if (eip55 == null || eip55.isEmpty())
return false;

if (eip55.matches(upperOrLowerPattern))
return true;

if (!eip55.matches(mixPattern))
return false;

String addr = convertToEip55Address(eip55);
return addr.replaceFirst("0x", "").equals(eip55.replaceFirst("0x", ""));
}

private String convertToEip55Address(String input) {
String addr = input.replaceFirst("0x", "").toLowerCase();
StringBuilder ret = new StringBuilder("0x");
String hash = sha3String(addr).substring(2);
for (int i = 0; i < addr.length(); i++) {
String a = addr.charAt(i) + "";
ret.append(Integer.parseInt(hash.charAt(i) + "", 16) > 7 ? a.toUpperCase() : a);
}
return ret.toString();
}

private static byte[] sha3(byte[] input, int offset, int length) {
Keccak.DigestKeccak kecc = new Keccak.Digest256();
kecc.update(input, offset, length);
return kecc.digest();
}

private static byte[] sha3(byte[] input) {
return sha3(input, 0, input.length);
}

private static String toHexString(byte[] input, int offset, int length, boolean withPrefix) {
StringBuilder stringBuilder = new StringBuilder();
if (withPrefix) {
stringBuilder.append("0x");
}

for (int i = offset; i < offset + length; ++i) {
stringBuilder.append(String.format("%02x", input[i] & 255));
}

return stringBuilder.toString();
}

private static String toHexString(byte[] input) {
return toHexString(input, 0, input.length, true);
}

private static String sha3String(String utf8String) {
return toHexString(sha3(utf8String.getBytes(StandardCharsets.UTF_8)));
}
}
}
1 change: 1 addition & 0 deletions src/main/resources/META-INF/services/bisq.asset.Asset
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ bisq.asset.coins.Monero
bisq.asset.coins.Namecoin
bisq.asset.coins.NavCoin
bisq.asset.coins.NEETCOIN
bisq.asset.coins.Nilu
bisq.asset.coins.NuBits
bisq.asset.coins.Nxt
bisq.asset.coins.Obsidian
Expand Down
30 changes: 30 additions & 0 deletions src/test/java/bisq/asset/coins/NiluTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package bisq.asset.coins;

import bisq.asset.AbstractAssetTest;

public class NiluTest extends AbstractAssetTest {

public NiluTest() {
super(new Nilu());
}

@Override
public void testValidAddresses() {
assertValidAddress("0x9f5cca390496647b0a9a90803da67af7b9c11eee");
assertValidAddress("0x9F5CCA390496647B0A9A90803DA67AF7B9C11EEE");
assertValidAddress("0x9f5cca390496647B0a9A90803Da67af7b9C11EEE");
assertValidAddress("9f5cca390496647b0a9a90803da67af7b9c11eee");
assertValidAddress("9F5CCA390496647B0A9A90803DA67AF7B9C11EEE");
assertValidAddress("9f5cca390496647B0a9A90803Da67af7b9C11EEE");
}

@Override
public void testInvalidAddresses() {
assertInvalidAddress("0x9f5xca390496647b0a9a90803da67af7b9c11eee");
assertInvalidAddress("0x9F5CCA390496647B0A9A90803DA67AF7B9C11EEE22");
assertInvalidAddress("0x9F5CCA390496647B0A9A90803DA67AF7B9C11EE");
assertInvalidAddress("0x9F5ccA390496647b0a9A90803Da67AF7B9C11EEe");
assertInvalidAddress("9F5CCA390496647B0A9A90803DA67AF7B9C11EEE22");
assertInvalidAddress("9F5CCA390496647B0A9A90803DA67AF7B9C11EE");
}
}

0 comments on commit d6a9d62

Please sign in to comment.