Skip to content

Commit 2bfa053

Browse files
committed
Add logging and support for account key wallets in tests
1 parent 354331f commit 2bfa053

File tree

4 files changed

+109
-12
lines changed

4 files changed

+109
-12
lines changed

hd-wallet/src/it/java/com/bloxbean/cardano/hdwallet/QuickTxBuilderIT.java

Lines changed: 51 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import com.bloxbean.cardano.client.backend.api.BackendService;
1010
import com.bloxbean.cardano.client.cip.cip20.MessageMetadata;
1111
import com.bloxbean.cardano.client.common.model.Networks;
12+
import com.bloxbean.cardano.client.crypto.Bech32;
1213
import com.bloxbean.cardano.client.exception.CborSerializationException;
1314
import com.bloxbean.cardano.client.function.helper.SignerProviders;
1415
import com.bloxbean.cardano.client.metadata.Metadata;
@@ -39,6 +40,7 @@ public class QuickTxBuilderIT extends QuickTxBaseIT {
3940
DefaultWalletUtxoSupplier walletUtxoSupplier;
4041
Wallet wallet1;
4142
Wallet wallet2;
43+
Wallet wallet3;
4244

4345
static Account topupAccount;
4446

@@ -58,9 +60,12 @@ void setup() {
5860
utxoSupplier = getUTXOSupplier();
5961

6062
String wallet1Mnemonic = "clog book honey force cricket stamp until seed minimum margin denial kind volume undo simple federal then jealous solid legal crucial crazy acoustic thank";
61-
wallet1 = new Wallet(Networks.testnet(), wallet1Mnemonic);
63+
wallet1 = Wallet.createFromMnemonic(Networks.testnet(), wallet1Mnemonic);
6264
String wallet2Mnemonic = "theme orphan remind output arrive lobster decorate ten gap piece casual distance attend total blast dilemma damp punch pride file limit soldier plug canoe";
63-
wallet2 = new Wallet(Networks.testnet(), wallet2Mnemonic);
65+
wallet2 = Wallet.createFromMnemonic(Networks.testnet(), wallet2Mnemonic);
66+
67+
String acctSk = "acct_xsk1azc6gn5zkdprp4gkapmhdckykphjl62rm9224699ut5z6xcaa9p4hv5hmjfgcrzk72tnsqh6dw0njekdjpsv8nv5h5hk6lpd4ag62zenwhzqs205kfurd7kgs8fm5gx4l4j8htutwj060kyp5y5kgw55qc8lsltd";
68+
wallet3 = Wallet.createFromAccountKey(Networks.testnet(), Bech32.decode(acctSk).data);
6469

6570
walletUtxoSupplier = new DefaultWalletUtxoSupplier(backendService.getUtxoService(), wallet1);
6671
}
@@ -71,15 +76,15 @@ void simplePayment() {
7176
metadata.put(BigInteger.valueOf(100), "This is first metadata");
7277
metadata.putNegative(200, -900);
7378

79+
wallet1.setSearchUtxoByAddrVkh(true);
7480
//topup wallet
75-
splitPaymentBetweenAddress(topupAccount, wallet1, 20, Double.valueOf(50000));
76-
81+
splitPaymentBetweenAddress(topupAccount, wallet1, 20, Double.valueOf(3000), true);
7782

7883
UtxoSupplier walletUtxoSupplier = new DefaultWalletUtxoSupplier(backendService.getUtxoService(), wallet1);
7984
QuickTxBuilder quickTxBuilder = new QuickTxBuilder(backendService, walletUtxoSupplier);
8085

8186
Tx tx = new Tx()
82-
.payToAddress(wallet2.getBaseAddress(0).getAddress(), Amount.ada(50000))
87+
.payToAddress(wallet2.getBaseAddress(0).getAddress(), Amount.ada(2000))
8388
.from(wallet1);
8489

8590
Result<String> result = quickTxBuilder.compose(tx)
@@ -99,7 +104,7 @@ void simplePayment() {
99104
@Test
100105
void simplePayment_withIndexesToScan() {
101106
String mnemonic = "buzz sentence empty coffee manage grid claw street misery deputy direct seek tortoise wedding stay twist crew august omit taste expect obscure abandon iron";
102-
Wallet wallet = new Wallet(Networks.testnet(), mnemonic);
107+
Wallet wallet = Wallet.createFromMnemonic(Networks.testnet(), mnemonic);
103108
wallet.setIndexesToScan(new int[]{5, 30, 45});
104109

105110
//topup index 5, 45
@@ -169,7 +174,7 @@ void utxoTest() {
169174
assertTrue(!utxos.isEmpty());
170175
}
171176

172-
void splitPaymentBetweenAddress(Account topupAccount, Wallet receiverWallet, int totalAddresses, Double adaAmount) {
177+
void splitPaymentBetweenAddress(Account topupAccount, Wallet receiverWallet, int totalAddresses, Double adaAmount, boolean enableEntAddrPayment) {
173178
// Create an amount array with no of totalAddresses with random distribution of split amounts
174179
Double[] amounts = new Double[totalAddresses];
175180
Double remainingAmount = adaAmount;
@@ -187,7 +192,15 @@ void splitPaymentBetweenAddress(Account topupAccount, Wallet receiverWallet, int
187192
int currentIndex = 0;
188193

189194
for (int i = 0; i < totalAddresses; i++) {
190-
addresses[i] = receiverWallet.getBaseAddressString(currentIndex);
195+
if (enableEntAddrPayment) {
196+
if (i % 2 == 0)
197+
addresses[i] = receiverWallet.getBaseAddressString(currentIndex);
198+
else
199+
addresses[i] = receiverWallet.getEntAddress(currentIndex).toBech32();
200+
} else {
201+
addresses[i] = receiverWallet.getBaseAddressString(currentIndex);
202+
}
203+
191204
currentIndex += random.nextInt(20) + 1;
192205
}
193206

@@ -205,4 +218,34 @@ void splitPaymentBetweenAddress(Account topupAccount, Wallet receiverWallet, int
205218

206219
System.out.println(result);
207220
}
221+
222+
@Test
223+
void simplePayment_fromAccountKey() {
224+
Metadata metadata = MetadataBuilder.createMetadata();
225+
metadata.put(BigInteger.valueOf(100), "This is first metadata");
226+
metadata.putNegative(200, -900);
227+
228+
//topup wallet
229+
splitPaymentBetweenAddress(topupAccount, wallet3, 20, Double.valueOf(3000), false);
230+
231+
UtxoSupplier walletUtxoSupplier = new DefaultWalletUtxoSupplier(backendService.getUtxoService(), wallet3);
232+
QuickTxBuilder quickTxBuilder = new QuickTxBuilder(backendService, walletUtxoSupplier);
233+
234+
Tx tx = new Tx()
235+
.payToAddress(wallet2.getBaseAddress(0).getAddress(), Amount.ada(2000))
236+
.from(wallet3);
237+
238+
Result<String> result = quickTxBuilder.compose(tx)
239+
.withSigner(SignerProviders.signerFrom(wallet3))
240+
.withTxInspector(txn -> {
241+
System.out.println(JsonUtil.getPrettyJson(txn));
242+
})
243+
.complete();
244+
245+
System.out.println(result);
246+
assertTrue(result.isSuccessful());
247+
waitForTransaction(result);
248+
249+
checkIfUtxoAvailable(result.getValue(), wallet2.getBaseAddress(0).getAddress());
250+
}
208251
}

hd-wallet/src/it/java/com/bloxbean/cardano/hdwallet/StakeTxIT.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,9 @@ static void beforeAll() {
5959
quickTxBuilder = new QuickTxBuilder(backendService);
6060

6161
String wallet1Mnemonic = "clog book honey force cricket stamp until seed minimum margin denial kind volume undo simple federal then jealous solid legal crucial crazy acoustic thank";
62-
wallet1 = new Wallet(Networks.testnet(), wallet1Mnemonic);
62+
wallet1 = Wallet.createFromMnemonic(Networks.testnet(), wallet1Mnemonic);
6363
String wallet2Mnemonic = "theme orphan remind output arrive lobster decorate ten gap piece casual distance attend total blast dilemma damp punch pride file limit soldier plug canoe";
64-
wallet2 = new Wallet(Networks.testnet(), wallet2Mnemonic);
64+
wallet2 = Wallet.createFromMnemonic(Networks.testnet(), wallet2Mnemonic);
6565

6666
if (backendType.equals(DEVKIT)) {
6767
poolId = "pool1wvqhvyrgwch4jq9aa84hc8q4kzvyq2z3xr6mpafkqmx9wce39zy";

hd-wallet/src/it/resources/log4j.xml

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
3+
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="true">
4+
<!-- Console Appender -->
5+
<appender name="console" class="org.apache.log4j.ConsoleAppender">
6+
<param name="Target" value="System.out" />
7+
<layout class="org.apache.log4j.PatternLayout">
8+
<param name="ConversionPattern" value="%-5p | %d{yyyy-MM-dd HH:mm:ss} | [%t] %C{2} (%F:%L) - %m%n" />
9+
</layout>
10+
</appender>
11+
<!-- Info Log File Appender -->
12+
<appender name="info-log" class="org.apache.log4j.FileAppender">
13+
<param name="File" value="info.log" />
14+
<layout class="org.apache.log4j.PatternLayout">
15+
<param name="ConversionPattern" value="%-5p | %d{yyyy-MM-dd HH:mm:ss} | [%t] %C{2} (%F:%L) - %m%n" />
16+
</layout>
17+
<filter class="org.apache.log4j.varia.LevelRangeFilter">
18+
<param name="LevelMin" value="debug" />
19+
<param name="LevelMax" value="info" />
20+
<param name="AcceptOnMatch" value="true" />
21+
</filter>
22+
</appender>
23+
<!-- Error Log File Appender -->
24+
<appender name="error-log" class="org.apache.log4j.FileAppender">
25+
<param name="Append" value="false" />
26+
<param name="File" value="yaci_error.log" />
27+
<layout class="org.apache.log4j.PatternLayout">
28+
<param name="ConversionPattern" value="%-5p | %d{yyyy-MM-dd HH:mm:ss} | [%t] %C{2} (%F:%L) - %m%n" />
29+
</layout>
30+
<filter class="org.apache.log4j.varia.LevelRangeFilter">
31+
<param name="LevelMin" value="warn" />
32+
<param name="LevelMax" value="fatal" />
33+
<param name="AcceptOnMatch" value="true" />
34+
</filter>
35+
</appender>
36+
<!-- <logger name="com.bloxbean.cardano">-->
37+
<!-- <appender-ref ref="info-log" />-->
38+
<!-- <appender-ref ref="error-log" />-->
39+
<!-- </logger>-->
40+
<root>
41+
<level value="debug" />
42+
<appender-ref ref="console" />
43+
</root>
44+
</log4j:configuration>

hd-wallet/src/main/java/com/bloxbean/cardano/hdwallet/supplier/DefaultWalletUtxoSupplier.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,15 @@
1414
import com.bloxbean.cardano.hdwallet.WalletException;
1515
import com.bloxbean.cardano.hdwallet.model.WalletUtxo;
1616
import lombok.Setter;
17+
import lombok.extern.slf4j.Slf4j;
1718

1819
import java.util.ArrayList;
1920
import java.util.Collections;
2021
import java.util.List;
2122
import java.util.Optional;
2223
import java.util.stream.Collectors;
2324

25+
@Slf4j
2426
public class DefaultWalletUtxoSupplier implements WalletUtxoSupplier {
2527
private final UtxoService utxoService;
2628
@Setter
@@ -33,7 +35,11 @@ public DefaultWalletUtxoSupplier(UtxoService utxoService, Wallet wallet) {
3335

3436
@Override
3537
public List<Utxo> getPage(String address, Integer nrOfItems, Integer page, OrderEnum order) {
36-
return getAll(address); // todo get Page of utxo over multipe addresses - find a good way to aktually do something with page, nrOfItems and order
38+
//All utxos should be fetched at page=0
39+
if (page == 0)
40+
return getAll(address); // todo get Page of utxo over multipe addresses - find a good way to aktually do something with page, nrOfItems and order
41+
else
42+
return Collections.emptyList();
3743
}
3844

3945
@Override
@@ -84,6 +90,10 @@ public List<WalletUtxo> getUtxosForAccountAndIndex(int account, int index) {
8490
checkIfWalletIsSet();
8591

8692
Address address = getBaseAddress(account, index);
93+
94+
if (log.isDebugEnabled())
95+
log.debug("Scanning address for account: {}, index: {}", account, index);
96+
8797
String addrStr = address.getAddress();
8898
String addrVkh = address.getBech32VerificationKeyHash().orElse(null);
8999

@@ -115,7 +125,7 @@ public List<WalletUtxo> getUtxosForAccountAndIndex(int account, int index) {
115125
}).collect(Collectors.toList());
116126

117127
utxos.addAll(utxoList);
118-
if(utxoPage.size() < 100)
128+
if(utxoPage.size() < DEFAULT_NR_OF_ITEMS_TO_FETCH)
119129
break;
120130
page++;
121131
}

0 commit comments

Comments
 (0)