This commit is contained in:
Ilesanmi Omoniyi O. 2025-03-11 12:21:09 -05:00 committed by GitHub
commit fb90ebfb97
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -22,8 +22,11 @@ import junitparams.JUnitParamsRunner;
import junitparams.Parameters; import junitparams.Parameters;
import org.bitcoinj.base.BitcoinNetwork; import org.bitcoinj.base.BitcoinNetwork;
import org.bitcoinj.base.ScriptType; import org.bitcoinj.base.ScriptType;
import org.bitcoinj.base.Network;
import org.bitcoinj.base.exceptions.AddressFormatException;
import org.bitcoinj.base.internal.TimeUtils; import org.bitcoinj.base.internal.TimeUtils;
import org.bitcoinj.crypto.AesKey; import org.bitcoinj.crypto.AesKey;
import org.bitcoinj.crypto.HDKeyDerivation;
import org.bitcoinj.base.internal.ByteUtils; import org.bitcoinj.base.internal.ByteUtils;
import org.bitcoinj.core.AbstractBlockChain; import org.bitcoinj.core.AbstractBlockChain;
import org.bitcoinj.base.Address; import org.bitcoinj.base.Address;
@ -3534,4 +3537,67 @@ public class WalletTest extends TestWithWallet {
Wallet wallet10 = Wallet.fromWatchingKeyB58(TESTNET, watchingKeyb58, Instant.ofEpochSecond(1415282801)); Wallet wallet10 = Wallet.fromWatchingKeyB58(TESTNET, watchingKeyb58, Instant.ofEpochSecond(1415282801));
assertEquals(TESTNET, wallet10.network()); assertEquals(TESTNET, wallet10.network());
} }
@Test
public void testFromSpendingKey() {
Network network = BitcoinNetwork.TESTNET;
DeterministicKey key1 = HDKeyDerivation.createMasterPrivateKey("satoshi lives!".getBytes());
DeterministicKey spendingKey = HDKeyDerivation.deriveChildKey(key1, ChildNumber.ZERO_HARDENED);
Instant creationTime = Instant.ofEpochSecond(1415282801);
key1.setCreationTime(creationTime);
Wallet wallet = Wallet.fromSpendingKey(network, spendingKey, ScriptType.P2PKH);
assertNotNull(wallet);
assertEquals(network, wallet.network());
assertTrue(wallet.isConsistent());
assertEquals(creationTime, wallet.earliestKeyCreationTime());
}
@Test(expected = IllegalStateException.class)
public void testFromSpendingKeyInvalidInput() {
Network network = BitcoinNetwork.TESTNET;
Wallet.fromSpendingKey(network, null, ScriptType.P2PKH); // Null key should throw an exception.
}
@Test
public void testFromSpendingKeyB58() {
Network network = BitcoinNetwork.TESTNET;
DeterministicKey key1 = HDKeyDerivation.createMasterPrivateKey("satoshi lives!".getBytes());
DeterministicKey key2 = HDKeyDerivation.deriveChildKey(key1, ChildNumber.ZERO_HARDENED);
final String priv58 = key2.serializePrivB58(network);
Instant creationTime = Instant.ofEpochSecond(1415282801);
Wallet wallet = Wallet.fromSpendingKeyB58(network, priv58, creationTime);
assertNotNull(wallet);
assertEquals(network, wallet.network());
assertEquals(creationTime, wallet.earliestKeyCreationTime());
assertTrue(wallet.isConsistent());
assertEquals(DeterministicKey.deserializeB58(key1, priv58, network), key2);
}
@Test(expected = AddressFormatException.class)
public void testFromSpendingKeyB58InvalidBase58() {
Network network = BitcoinNetwork.TESTNET;
Wallet.fromSpendingKeyB58(network, "invalid_base58", Instant.now());
}
@Test
public void testFromMasterKey() {
Network network = BitcoinNetwork.TESTNET;
DeterministicKey masterKey = HDKeyDerivation.createMasterPrivateKey(new byte[32]);
Instant creationTime = Instant.ofEpochSecond(1415282801);
masterKey.setCreationTime(creationTime);
ChildNumber accountNumber = new ChildNumber(0, true);
Wallet wallet = Wallet.fromMasterKey(network, masterKey, ScriptType.P2PKH, accountNumber);
assertNotNull(wallet);
assertEquals(network, wallet.network());
assertTrue(wallet.isConsistent());
assertEquals(creationTime, wallet.earliestKeyCreationTime());
}
} }