Skip to content

Commit 5255a8a

Browse files
committed
Reproduce snet-cli wallet generation procedure
1 parent 4b67df7 commit 5255a8a

3 files changed

Lines changed: 58 additions & 5 deletions

File tree

src/main/java/io/singularitynet/sdk/client/ConfigurationDependencyFactory.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public IPFS getIpfs() {
4040
public Signer getSigner() {
4141
switch (config.getSignerType()) {
4242
case MNEMONIC:
43-
return new MnemonicIdentity(config.getSignerMnemonic());
43+
return new MnemonicIdentity(config.getSignerMnemonic(), 0);
4444
case PRIVATE_KEY:
4545
return new PrivateKeyIdentity(config.getSignerPrivateKey());
4646
default:
Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,29 @@
11
package io.singularitynet.sdk.ethereum;
22

3-
import org.web3j.crypto.WalletUtils;
3+
import java.util.Arrays;
4+
5+
import org.web3j.crypto.MnemonicUtils;
6+
import org.web3j.crypto.Bip32ECKeyPair;
47

58
public class MnemonicIdentity extends PrivateKeyIdentity {
69

7-
public MnemonicIdentity(String mnemonic) {
8-
// FIXME: test that private key generated is equal to snet cli one
9-
super(WalletUtils.loadBip39Credentials("", mnemonic).getEcKeyPair());
10+
private static final int[] PATH_PREFIX = new int[] {
11+
44 | Bip32ECKeyPair.HARDENED_BIT,
12+
60 | Bip32ECKeyPair.HARDENED_BIT,
13+
0 | Bip32ECKeyPair.HARDENED_BIT,
14+
0
15+
};
16+
17+
public MnemonicIdentity(String mnemonic, int walletIndex) {
18+
super(wallet(mnemonic, walletIndex));
19+
}
20+
21+
private static Bip32ECKeyPair wallet(String mnemonic, int walletIndex) {
22+
byte[] seed = MnemonicUtils.generateSeed(mnemonic, "");
23+
Bip32ECKeyPair master = Bip32ECKeyPair.generateKeyPair(seed);
24+
int[] path = Arrays.copyOf(PATH_PREFIX, PATH_PREFIX.length + 1);
25+
path[path.length - 1] = walletIndex;
26+
return Bip32ECKeyPair.deriveKeyPair(master, path);
1027
}
1128

1229
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package io.singularitynet.sdk.ethereum;
2+
3+
import static org.junit.Assert.*;
4+
import org.junit.*;
5+
6+
import io.singularitynet.sdk.common.Utils;
7+
8+
public class MnemonicIndentityTest {
9+
10+
private static String mnemonic = "insect lottery stable theme shrimp expose match frog entry always viable cabbage mechanic cinnamon spread";
11+
private static byte[] message = Utils.strToBytes32("Some message");
12+
13+
@Test
14+
public void generateMnemonicIdentityWallet0() {
15+
PrivateKeyIdentity expected = fromBase64Key("pAIRj43MIe6/Yj6AigjI0X8jYzDSk929nUSkRBRJcVA=");
16+
17+
MnemonicIdentity actual = new MnemonicIdentity(mnemonic, 0);
18+
19+
assertArrayEquals("Signature", expected.sign(message), actual.sign(message));
20+
}
21+
22+
@Test
23+
public void generateMnemonicIdentityWallet42() {
24+
PrivateKeyIdentity expected = fromBase64Key("gczjSyFyWK024XVHDipAsFr3EP3v3NtDanNsrO4O1D8=");
25+
26+
MnemonicIdentity actual = new MnemonicIdentity(mnemonic, 42);
27+
28+
assertArrayEquals("Signature", expected.sign(message), actual.sign(message));
29+
}
30+
31+
private static PrivateKeyIdentity fromBase64Key(String key) {
32+
byte[] privateKey = Utils.base64ToBytes(key);
33+
return new PrivateKeyIdentity(privateKey);
34+
}
35+
36+
}

0 commit comments

Comments
 (0)