diff --git a/CHANGELOG.md b/CHANGELOG.md index ae92953c8..b25315b32 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,9 @@ # Changelog # Unreleased changes + - Cleanup the API a bit for configure baker transaction by using `PartsPerHundredThousands` for determining the commission rates. + - Fix serialization of `ConfigureDelegation` transaction + - Remove `AccountNonce` in favor of just using the `Nonce` type across the API. - Fix a bug in the serialization of `AccountIndex` - Fix a bug that caused `getAccountInfo` to fail for delegator and baker accounts if they had no stake pending changes. This change is also propagated to the type level such that `Baker` and `AccountDelegation` retains an `Optional` diff --git a/concordium-android-sdk/pom.xml b/concordium-android-sdk/pom.xml index 22242c59f..4141bd8ef 100644 --- a/concordium-android-sdk/pom.xml +++ b/concordium-android-sdk/pom.xml @@ -5,7 +5,7 @@ com.concordium.sdk concordium-sdk-base - 6.1.0 + 6.1.1-SNAPSHOT concordium-android-sdk diff --git a/concordium-sdk-examples/pom.xml b/concordium-sdk-examples/pom.xml index af8fcabdd..e4be8201d 100644 --- a/concordium-sdk-examples/pom.xml +++ b/concordium-sdk-examples/pom.xml @@ -23,7 +23,7 @@ com.concordium.sdk concordium-sdk - 6.1.0 + 6.1.1-SNAPSHOT compile diff --git a/concordium-sdk-examples/src/main/java/com/concordium/sdk/examples/ConfigureBaking.java b/concordium-sdk-examples/src/main/java/com/concordium/sdk/examples/ConfigureBaking.java new file mode 100644 index 000000000..63b9a7fe4 --- /dev/null +++ b/concordium-sdk-examples/src/main/java/com/concordium/sdk/examples/ConfigureBaking.java @@ -0,0 +1,89 @@ +package com.concordium.sdk.examples; + +import com.concordium.sdk.ClientV2; +import com.concordium.sdk.Connection; +import com.concordium.sdk.crypto.bakertransactions.BakerKeys; +import com.concordium.sdk.crypto.ed25519.ED25519SecretKey; +import com.concordium.sdk.exceptions.ClientInitializationException; +import com.concordium.sdk.requests.AccountQuery; +import com.concordium.sdk.requests.BlockQuery; +import com.concordium.sdk.responses.accountinfo.AccountInfo; +import com.concordium.sdk.responses.blockitemstatus.FinalizedBlockItem; +import com.concordium.sdk.responses.transactionstatus.PartsPerHundredThousand; +import com.concordium.sdk.transactions.*; +import com.concordium.sdk.types.AccountAddress; +import lombok.val; +import picocli.CommandLine; + +import java.net.MalformedURLException; +import java.net.URL; +import java.util.Optional; +import java.util.concurrent.Callable; + +/** + * An example of how to configure baking for an account. + */ +@CommandLine.Command(name = "ConfigureBaking", mixinStandardHelpOptions = true) +public class ConfigureBaking implements Callable { + + @CommandLine.Option( + names = {"--endpoint"}, + description = "GRPC interface of the node.", + defaultValue = "http://localhost:20002") + private String endpoint; + + @CommandLine.Option( + names = {"--timeout"}, + description = "GRPC request timeout in milliseconds.", + defaultValue = "100000") + private int timeout; + + @Override + public Integer call() throws MalformedURLException, ClientInitializationException { + val endpointUrl = new URL(this.endpoint); + + Connection connection = Connection.newBuilder() + .host(endpointUrl.getHost()) + .port(endpointUrl.getPort()) + .build(); + val client = ClientV2.from(connection); + + AccountAddress sender = AccountAddress.from("3WZE6etUvVp1eyhEtTxqZrQaanTAZnZCHEmZmDyCbCwxnmQuPE"); + TransactionSigner signer = TransactionSigner.from( + SignerEntry.from(Index.from(0), Index.from(0), + ED25519SecretKey + .from("56f60de843790c308dac2d59a5eec9f6b1649513f827e5a13d7038accfe31784"))); + AccountInfo accountInfo = client.getAccountInfo(BlockQuery.LAST_FINAL, AccountQuery.from(sender)); + BakerKeys bakerkeys = BakerKeys.createBakerKeys(); + System.out.println(bakerkeys.toJson()); + val tx = TransactionFactory.newConfigureBaker() + .nonce(accountInfo.getNonce()) + .expiry(Expiry.createNew().addMinutes(5)) + .signer(signer) + .sender(sender) + .payload(ConfigureBakerPayload.builder() + .capital(CCDAmount.from(10000)) + .openForDelegation(true) + .restakeEarnings(true) + .bakingRewardCommission(PartsPerHundredThousand.from(5000)) + .finalizationRewardCommission(PartsPerHundredThousand.from(100000)) + .transactionFeeCommission(PartsPerHundredThousand.from(80000)) + .metadataUrl("") + .keysWithProofs( + ConfigureBakerKeysPayload + .getNewConfigureBakerKeysPayload(sender, bakerkeys)) + .build()) + .build(); + Hash hash = client.sendTransaction(tx); + System.out.println(hash); + Optional finalizedBlockItem = client.waitUntilFinalized(hash, this.timeout); + System.out.println(finalizedBlockItem); + + return 0; + } + + public static void main(String[] args) { + int exitCode = new CommandLine(new ConfigureBaking()).execute(args); + System.exit(exitCode); + } +} diff --git a/concordium-sdk-examples/src/main/java/com/concordium/sdk/examples/ConfigureDelegation.java b/concordium-sdk-examples/src/main/java/com/concordium/sdk/examples/ConfigureDelegation.java new file mode 100644 index 000000000..9921bddf7 --- /dev/null +++ b/concordium-sdk-examples/src/main/java/com/concordium/sdk/examples/ConfigureDelegation.java @@ -0,0 +1,82 @@ +package com.concordium.sdk.examples; + +import com.concordium.sdk.ClientV2; +import com.concordium.sdk.Connection; +import com.concordium.sdk.crypto.ed25519.ED25519SecretKey; +import com.concordium.sdk.exceptions.ClientInitializationException; +import com.concordium.sdk.requests.AccountQuery; +import com.concordium.sdk.requests.BlockQuery; +import com.concordium.sdk.responses.BakerId; +import com.concordium.sdk.responses.accountinfo.AccountInfo; +import com.concordium.sdk.responses.blockitemstatus.FinalizedBlockItem; +import com.concordium.sdk.responses.transactionstatus.DelegationTarget; +import com.concordium.sdk.transactions.*; +import com.concordium.sdk.types.AccountAddress; +import lombok.val; +import picocli.CommandLine; + +import java.net.MalformedURLException; +import java.net.URL; +import java.util.Optional; +import java.util.concurrent.Callable; + +/** + * An example of how to configure delegation for an account. + */ +@CommandLine.Command(name = "ConfigureDelegation", mixinStandardHelpOptions = true) +public class ConfigureDelegation implements Callable { + + @CommandLine.Option( + names = {"--endpoint"}, + description = "GRPC interface of the node.", + defaultValue = "http://localhost:20002") + private String endpoint; + + @CommandLine.Option( + names = {"--timeout"}, + description = "GRPC request timeout in milliseconds.", + defaultValue = "100000") + private int timeout; + + @Override + public Integer call() throws MalformedURLException, ClientInitializationException { + val endpointUrl = new URL(this.endpoint); + + Connection connection = Connection.newBuilder() + .host(endpointUrl.getHost()) + .port(endpointUrl.getPort()) + .build(); + val client = ClientV2.from(connection); + + AccountAddress sender = AccountAddress.from("3WZE6etUvVp1eyhEtTxqZrQaanTAZnZCHEmZmDyCbCwxnmQuPE"); + TransactionSigner signer = TransactionSigner.from( + SignerEntry.from(Index.from(0), Index.from(0), + ED25519SecretKey + .from("56f60de843790c308dac2d59a5eec9f6b1649513f827e5a13d7038accfe31784"))); + AccountInfo accountInfo = client.getAccountInfo(BlockQuery.LAST_FINAL, AccountQuery.from(sender)); + val tx = TransactionFactory.newConfigureDelegation() + .nonce(accountInfo.getNonce()) + .expiry(Expiry.createNew().addMinutes(5)) + .signer(signer) + .sender(sender) + .payload(ConfigureDelegationPayload.builder() + .capital(CCDAmount.from(200)) + .delegationTarget(DelegationTarget.builder() + .type(DelegationTarget.DelegationType.BAKER) + .bakerId(BakerId.from(207)) + .build()) + .build()) + .build(); + Hash hash = client.sendTransaction(tx); + System.out.println(hash); + Optional finalizedBlockItem = client.waitUntilFinalized(hash, this.timeout); + System.out.println(finalizedBlockItem); + + return 0; + } + + public static void main(String[] args) { + int exitCode = new CommandLine(new ConfigureDelegation()).execute(args); + System.exit(exitCode); + } +} diff --git a/concordium-sdk-examples/src/main/java/com/concordium/sdk/examples/GetNextAccountSequenceNumber.java b/concordium-sdk-examples/src/main/java/com/concordium/sdk/examples/GetNextAccountSequenceNumber.java index 5205e51f0..086440ec5 100644 --- a/concordium-sdk-examples/src/main/java/com/concordium/sdk/examples/GetNextAccountSequenceNumber.java +++ b/concordium-sdk-examples/src/main/java/com/concordium/sdk/examples/GetNextAccountSequenceNumber.java @@ -3,8 +3,8 @@ import com.concordium.sdk.ClientV2; import com.concordium.sdk.Connection; import com.concordium.sdk.exceptions.ClientInitializationException; -import com.concordium.sdk.transactions.AccountNonce; import com.concordium.sdk.types.AccountAddress; +import com.concordium.sdk.types.Nonce; import picocli.CommandLine; import picocli.CommandLine.Command; import picocli.CommandLine.Option; @@ -31,7 +31,7 @@ public Integer call() throws ClientInitializationException, MalformedURLExceptio .build(); - AccountNonce nextAccountSequenceNumber = ClientV2 + Nonce nextAccountSequenceNumber = ClientV2 .from(connection) .getNextAccountSequenceNumber(ACCOUNT_ADDRESS); diff --git a/concordium-sdk-examples/src/main/java/com/concordium/sdk/examples/SendSimpleTransfer.java b/concordium-sdk-examples/src/main/java/com/concordium/sdk/examples/SendSimpleTransfer.java index dcd3b5a7f..4ab9555ae 100644 --- a/concordium-sdk-examples/src/main/java/com/concordium/sdk/examples/SendSimpleTransfer.java +++ b/concordium-sdk-examples/src/main/java/com/concordium/sdk/examples/SendSimpleTransfer.java @@ -6,6 +6,7 @@ import com.concordium.sdk.exceptions.ClientInitializationException; import com.concordium.sdk.requests.AccountQuery; import com.concordium.sdk.requests.BlockQuery; +import com.concordium.sdk.responses.blockitemstatus.FinalizedBlockItem; import com.concordium.sdk.transactions.*; import com.concordium.sdk.types.AccountAddress; import lombok.var; @@ -15,6 +16,7 @@ import java.net.MalformedURLException; import java.net.URL; +import java.util.Optional; import java.util.concurrent.Callable; @Command(name = "SendSimpleTransfer", mixinStandardHelpOptions = true) @@ -52,17 +54,18 @@ public Integer call() throws MalformedURLException, ClientInitializationExceptio var client = ClientV2.from(connection); var senderInfo = client.getAccountInfo(BlockQuery.BEST, AccountQuery.from(sender)); - var nonce = senderInfo.getAccountNonce(); + var nonce = senderInfo.getNonce(); var txnHash = client.sendTransaction(TransactionFactory.newTransfer() .sender(sender) .receiver(receiver) .amount(amount) - .nonce(AccountNonce.from(nonce)) + .nonce(nonce) .expiry(expiry) .signer(signer) .build()); System.out.println(txnHash); - + Optional finalizedBlockItem = client.waitUntilFinalized(txnHash, this.timeout); + System.out.println(finalizedBlockItem); return 0; } diff --git a/concordium-sdk-examples/src/main/java/com/concordium/sdk/examples/contractexample/cis2nft/Cis2Nft.java b/concordium-sdk-examples/src/main/java/com/concordium/sdk/examples/contractexample/cis2nft/Cis2Nft.java index c7278f0f9..53b62de24 100644 --- a/concordium-sdk-examples/src/main/java/com/concordium/sdk/examples/contractexample/cis2nft/Cis2Nft.java +++ b/concordium-sdk-examples/src/main/java/com/concordium/sdk/examples/contractexample/cis2nft/Cis2Nft.java @@ -70,7 +70,7 @@ public Integer call() throws IOException, ClientInitializationException { .timeout(timeout) .build(); var client = ClientV2.from(connection); - Nonce nonce = client.getAccountInfo(BlockQuery.BEST, AccountQuery.from(AccountAddress.from(SENDER_ADDRESS))).getAccountNonce(); + Nonce nonce = client.getAccountInfo(BlockQuery.BEST, AccountQuery.from(AccountAddress.from(SENDER_ADDRESS))).getNonce(); switch (this.methodName) { case INIT: @@ -119,7 +119,7 @@ private void handleInit(ClientV2 client, Nonce nonce) { .sender(AccountAddress.from(SENDER_ADDRESS)) .payload(payload) .expiry(EXPIRY) - .nonce(AccountNonce.from(nonce)) + .nonce(nonce) .signer(SIGNER) .maxEnergyCost(UInt64.from(10000)) .build(); @@ -135,7 +135,7 @@ private void handleMethod(ClientV2 client, Nonce nonce, SchemaParameter paramete .sender(AccountAddress.from(SENDER_ADDRESS)) .payload(payload) .expiry(EXPIRY) - .nonce(AccountNonce.from(nonce)) + .nonce(nonce) .signer(SIGNER) .maxEnergyCost(UInt64.from(10000)) .build(); diff --git a/concordium-sdk-examples/src/main/java/com/concordium/sdk/examples/contractexample/wccd/Cis2WCCD.java b/concordium-sdk-examples/src/main/java/com/concordium/sdk/examples/contractexample/wccd/Cis2WCCD.java index f439f4e9a..ca39a76cf 100644 --- a/concordium-sdk-examples/src/main/java/com/concordium/sdk/examples/contractexample/wccd/Cis2WCCD.java +++ b/concordium-sdk-examples/src/main/java/com/concordium/sdk/examples/contractexample/wccd/Cis2WCCD.java @@ -68,7 +68,7 @@ public Integer call() throws Exception { .timeout(timeout) .build(); var client = ClientV2.from(connection); - Nonce nonce = client.getAccountInfo(BlockQuery.BEST, AccountQuery.from(AccountAddress.from(SENDER_ADDRESS))).getAccountNonce(); + Nonce nonce = client.getAccountInfo(BlockQuery.BEST, AccountQuery.from(AccountAddress.from(SENDER_ADDRESS))).getNonce(); switch (this.methodName) { case INIT: handleInit(client, nonce); @@ -136,7 +136,7 @@ private void handleInit(ClientV2 client, Nonce nonce) { .sender(AccountAddress.from(SENDER_ADDRESS)) .payload(payload) .expiry(EXPIRY) - .nonce(AccountNonce.from(nonce)) + .nonce(nonce) .signer(SIGNER) .maxEnergyCost(UInt64.from(10000)) .build(); @@ -152,7 +152,7 @@ private void handleMethod(ClientV2 client, Nonce nonce, SchemaParameter paramete .sender(AccountAddress.from(SENDER_ADDRESS)) .payload(payload) .expiry(EXPIRY) - .nonce(AccountNonce.from(nonce)) + .nonce(nonce) .signer(SIGNER) .maxEnergyCost(UInt64.from(10000)) .build(); diff --git a/concordium-sdk/pom.xml b/concordium-sdk/pom.xml index db5359535..bd037b493 100644 --- a/concordium-sdk/pom.xml +++ b/concordium-sdk/pom.xml @@ -7,7 +7,7 @@ com.concordium.sdk concordium-sdk-base - 6.1.0 + 6.1.1-SNAPSHOT com.concordium.sdk diff --git a/concordium-sdk/src/main/java/com/concordium/sdk/ClientV2.java b/concordium-sdk/src/main/java/com/concordium/sdk/ClientV2.java index bf1e420a7..055239a4c 100644 --- a/concordium-sdk/src/main/java/com/concordium/sdk/ClientV2.java +++ b/concordium-sdk/src/main/java/com/concordium/sdk/ClientV2.java @@ -41,6 +41,7 @@ import com.concordium.sdk.transactions.smartcontracts.WasmModule; import com.concordium.sdk.types.AccountAddress; import com.concordium.sdk.types.ContractAddress; +import com.concordium.sdk.types.Nonce; import com.concordium.sdk.types.Timestamp; import com.google.common.collect.ImmutableList; import com.google.protobuf.ByteString; @@ -234,14 +235,12 @@ public Hash sendTransaction(final AccountTransaction accountTransaction) { /** * Sends a credential deployment transaction to the Concordium Node. * - * @param expiry the transaction expiry, i.e. the time after which the transaction is invalid - * @param rawPayload the serialized bytes of the credential deployment transaction, including its signatures + * @param credentialDeploymentTransaction the credential deployment to send. * @return Transaction {@link Hash}. */ public Hash sendCredentialDeploymentTransaction(CredentialDeploymentTransaction credentialDeploymentTransaction) { val req = ClientV2MapperExtensions.to(credentialDeploymentTransaction); val grpcOutput = this.server().sendBlockItem(req); - return to(grpcOutput); } @@ -304,15 +303,15 @@ public ChainParameters getChainParameters(BlockQuery blockQuery) { } /** - * Retrieves the next {@link AccountNonce} for an account. - * This is the {@link AccountNonce} to use for future transactions + * Retrieves the next {@link Nonce} for an account. + * This is the {@link Nonce} to use for future transactions * E.g. when using {@link ClientV2#sendTransaction(AccountTransaction)} * When this function is queried with a non-existent account it will report the next available account nonce to be 1 and all transactions as finalized. * * @param address The {@link AccountAddress} - * @return The next {@link AccountNonce} + * @return The next {@link Nonce} */ - public AccountNonce getNextAccountSequenceNumber(AccountAddress address) { + public Nonce getNextAccountSequenceNumber(AccountAddress address) { val grpcOutput = this.server() .getNextAccountSequenceNumber(to(address)); return to(grpcOutput); diff --git a/concordium-sdk/src/main/java/com/concordium/sdk/ClientV2MapperExtensions.java b/concordium-sdk/src/main/java/com/concordium/sdk/ClientV2MapperExtensions.java index 9dc937a59..95990019c 100644 --- a/concordium-sdk/src/main/java/com/concordium/sdk/ClientV2MapperExtensions.java +++ b/concordium-sdk/src/main/java/com/concordium/sdk/ClientV2MapperExtensions.java @@ -289,7 +289,7 @@ static AccountAddress to(com.concordium.sdk.types.AccountAddress address) { static com.concordium.sdk.responses.accountinfo.AccountInfo to(AccountInfo account) { com.concordium.sdk.responses.accountinfo.AccountInfo.AccountInfoBuilder builder = com.concordium.sdk.responses.accountinfo.AccountInfo.builder(); builder - .accountNonce(to(account.getSequenceNumber())) + .Nonce(to(account.getSequenceNumber())) .accountAmount(to(account.getAmount())) .accountReleaseSchedule(to(account.getSchedule())) .accountCredentials(ImmutableMap.copyOf(to( @@ -529,8 +529,8 @@ static com.concordium.sdk.responses.accountinfo.ReleaseSchedule to(ReleaseSchedu .build(); } - static AccountNonce to(NextAccountSequenceNumber nextAccountSequenceNumber) { - return AccountNonce.from(to(nextAccountSequenceNumber.getSequenceNumber())); + static Nonce to(NextAccountSequenceNumber nextAccountSequenceNumber) { + return Nonce.from(nextAccountSequenceNumber.getSequenceNumber().getValue()); } @@ -784,7 +784,7 @@ static TransactionHeader to(AccountTransactionHeader header, int payloadSize) { val ret = TransactionHeader.builder() .sender(to(header.getSender())) .expiry(to(header.getExpiry())) - .accountNonce(to(header.getSequenceNumber())) + .Nonce(to(header.getSequenceNumber())) .build(); ret.setMaxEnergyCost(to(header.getEnergyAmount())); ret.setPayloadSize(UInt32.from(payloadSize)); @@ -912,7 +912,7 @@ static com.concordium.grpc.v2.Signature to(Signature signature) { static AccountTransactionHeader to(TransactionHeader header) { return AccountTransactionHeader.newBuilder() .setSequenceNumber(SequenceNumber.newBuilder() - .setValue(to(header.getAccountNonce())) + .setValue(to(header.getNonce())) .build()) .setSender(to(header.getSender())) .setExpiry(to(header.getExpiry())) @@ -928,8 +928,8 @@ static TransactionTime to(UInt64 expiry) { return TransactionTime.newBuilder().setValue(expiry.getValue()).build(); } - static long to(Nonce accountNonce) { - return accountNonce.getValue().getValue(); + static long to(Nonce Nonce) { + return Nonce.getValue().getValue(); } static com.concordium.sdk.responses.cryptographicparameters.CryptographicParameters to(CryptographicParameters grpcOutput) { diff --git a/concordium-sdk/src/main/java/com/concordium/sdk/crypto/bakertransactions/BakerKeys.java b/concordium-sdk/src/main/java/com/concordium/sdk/crypto/bakertransactions/BakerKeys.java index f24835b9f..13a2d426a 100644 --- a/concordium-sdk/src/main/java/com/concordium/sdk/crypto/bakertransactions/BakerKeys.java +++ b/concordium-sdk/src/main/java/com/concordium/sdk/crypto/bakertransactions/BakerKeys.java @@ -79,6 +79,11 @@ public static BakerKeys createBakerKeys() { } + @SneakyThrows + public String toJson(){ + return JsonMapper.INSTANCE.writeValueAsString(this); + } + /** * Write the {@link BakerCredentials} to the provided Writer with the supplied baker id. diff --git a/concordium-sdk/src/main/java/com/concordium/sdk/crypto/ed25519/ED25519SecretKey.java b/concordium-sdk/src/main/java/com/concordium/sdk/crypto/ed25519/ED25519SecretKey.java index f6ef43b0c..5033ed52d 100644 --- a/concordium-sdk/src/main/java/com/concordium/sdk/crypto/ed25519/ED25519SecretKey.java +++ b/concordium-sdk/src/main/java/com/concordium/sdk/crypto/ed25519/ED25519SecretKey.java @@ -5,6 +5,7 @@ import com.concordium.sdk.exceptions.ED25519Exception; import com.concordium.sdk.transactions.Signer; import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import lombok.EqualsAndHashCode; import lombok.Getter; @@ -71,4 +72,10 @@ public static ED25519SecretKey createNew() { public byte[] getRawBytes() { return this.bytes; } + + @Override + @JsonValue + public String toString() { + return Hex.encodeHexString(this.getBytes()); + } } diff --git a/concordium-sdk/src/main/java/com/concordium/sdk/responses/accountinfo/AccountInfo.java b/concordium-sdk/src/main/java/com/concordium/sdk/responses/accountinfo/AccountInfo.java index 646bb2d9a..b7fab799d 100644 --- a/concordium-sdk/src/main/java/com/concordium/sdk/responses/accountinfo/AccountInfo.java +++ b/concordium-sdk/src/main/java/com/concordium/sdk/responses/accountinfo/AccountInfo.java @@ -32,7 +32,7 @@ public final class AccountInfo { * That is, this is the first unused nonce from the perspective of the block that * `AccountInfo` is for. */ - private final Nonce accountNonce; + private final Nonce Nonce; /** * The amount of CCD owned by this account. */ diff --git a/concordium-sdk/src/main/java/com/concordium/sdk/responses/accountinfo/CommissionRates.java b/concordium-sdk/src/main/java/com/concordium/sdk/responses/accountinfo/CommissionRates.java index f25f3022b..601a0d310 100644 --- a/concordium-sdk/src/main/java/com/concordium/sdk/responses/accountinfo/CommissionRates.java +++ b/concordium-sdk/src/main/java/com/concordium/sdk/responses/accountinfo/CommissionRates.java @@ -17,21 +17,21 @@ public class CommissionRates { /** * Fraction of transaction rewards charged by the pool owner. */ - private final double transactionCommission; + private final PartsPerHundredThousand transactionCommission; /** * Fraction of finalization rewards charged by the pool owner. */ - private final double finalizationCommission; + private final PartsPerHundredThousand finalizationCommission; /** * Fraction of baking rewards charged by the pool owner. */ - private final double bakingCommission; + private final PartsPerHundredThousand bakingCommission; public static CommissionRates from(com.concordium.grpc.v2.CommissionRates commissionRates) { return CommissionRates.builder() - .transactionCommission(PartsPerHundredThousand.from(commissionRates.getTransaction().getPartsPerHundredThousand()).asDouble()) - .finalizationCommission(PartsPerHundredThousand.from(commissionRates.getFinalization().getPartsPerHundredThousand()).asDouble()) - .bakingCommission(PartsPerHundredThousand.from(commissionRates.getBaking().getPartsPerHundredThousand()).asDouble()) + .transactionCommission(PartsPerHundredThousand.from(commissionRates.getTransaction().getPartsPerHundredThousand())) + .finalizationCommission(PartsPerHundredThousand.from(commissionRates.getFinalization().getPartsPerHundredThousand())) + .bakingCommission(PartsPerHundredThousand.from(commissionRates.getBaking().getPartsPerHundredThousand())) .build(); } } diff --git a/concordium-sdk/src/main/java/com/concordium/sdk/responses/transactionstatus/DelegationTarget.java b/concordium-sdk/src/main/java/com/concordium/sdk/responses/transactionstatus/DelegationTarget.java index 6a27d3b6d..f3f90d8de 100644 --- a/concordium-sdk/src/main/java/com/concordium/sdk/responses/transactionstatus/DelegationTarget.java +++ b/concordium-sdk/src/main/java/com/concordium/sdk/responses/transactionstatus/DelegationTarget.java @@ -3,11 +3,9 @@ import com.concordium.sdk.responses.BakerId; import com.concordium.sdk.transactions.TransactionType; import com.concordium.sdk.types.UInt16; +import com.concordium.sdk.types.UInt64; import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.Builder; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.ToString; +import lombok.*; import java.nio.ByteBuffer; @@ -53,15 +51,15 @@ public static DelegationTarget from(com.concordium.grpc.v2.DelegationTarget dele } public byte[] getBytes() { - ByteBuffer buffer = ByteBuffer.allocate(TransactionType.BYTES); if (this.type == DelegationType.PASSIVE) { - buffer.put((byte) 0); + return new byte[]{0}; // tag for passive delegation } else if (type == DelegationType.BAKER) { - buffer = ByteBuffer.allocate(TransactionType.BYTES + UInt16.BYTES); + val buffer = ByteBuffer.allocate(1 + UInt64.BYTES); // baker tag + size of a baker id. buffer.put((byte) 1); buffer.put(this.bakerId.getBytes()); + return buffer.array(); } - return buffer.array(); + throw new IllegalArgumentException("Illegal DelegationType. Must be either PASSIVE or BAKER"); } @ToString diff --git a/concordium-sdk/src/main/java/com/concordium/sdk/responses/transactionstatus/PartsPerHundredThousand.java b/concordium-sdk/src/main/java/com/concordium/sdk/responses/transactionstatus/PartsPerHundredThousand.java index 48a3c53d6..2d92b59df 100644 --- a/concordium-sdk/src/main/java/com/concordium/sdk/responses/transactionstatus/PartsPerHundredThousand.java +++ b/concordium-sdk/src/main/java/com/concordium/sdk/responses/transactionstatus/PartsPerHundredThousand.java @@ -1,7 +1,6 @@ package com.concordium.sdk.responses.transactionstatus; -import com.concordium.sdk.responses.Fraction; -import com.concordium.sdk.types.UInt64; +import com.concordium.sdk.types.UInt32; import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.ToString; @@ -10,15 +9,25 @@ @Getter @ToString public class PartsPerHundredThousand { - private final Fraction value; + private final UInt32 numerator; private final int HUNDRED_THOUSAND = 100000; - PartsPerHundredThousand(UInt64 value) { - this.value = new Fraction(value, UInt64.from(HUNDRED_THOUSAND)); + + PartsPerHundredThousand(UInt32 value) { + this.numerator = value; } - public static PartsPerHundredThousand from(long x) { - return new PartsPerHundredThousand(UInt64.from(x)); + /** + * Create a {@link PartsPerHundredThousand} from the provided value. + * + * @param x numerator of the fraction + * @return The parts per hundred thousands i.e. x / 100_000 + *

+ * @throws IllegalArgumentException if the provided numerator is greater than 100_000. + */ + public static PartsPerHundredThousand from(int x) { + if (x > 100000) throw new IllegalArgumentException("numerator must be less or equal than 100_000."); + return new PartsPerHundredThousand(UInt32.from(x)); } @@ -28,6 +37,16 @@ public static PartsPerHundredThousand from(long x) { * @return the value as a floating point value. */ public double asDouble() { - return getValue().asDouble(); + return (double) this.numerator.getValue() / (double) HUNDRED_THOUSAND; + } + + + /** + * Get the bytes representing the {@link PartsPerHundredThousand} + * + * @return the serialized format + */ + public byte[] getBytes() { + return this.numerator.getBytes(); } } diff --git a/concordium-sdk/src/main/java/com/concordium/sdk/transactions/AccountNonce.java b/concordium-sdk/src/main/java/com/concordium/sdk/transactions/AccountNonce.java deleted file mode 100644 index 6b904e2f5..000000000 --- a/concordium-sdk/src/main/java/com/concordium/sdk/transactions/AccountNonce.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.concordium.sdk.transactions; - -import com.concordium.sdk.types.Nonce; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; -import lombok.ToString; - -@ToString -@Setter -@NoArgsConstructor -@Getter -public final class AccountNonce { - private Nonce nonce; - private boolean allFinal; - - private AccountNonce(Nonce value, boolean allFinal) { - this.nonce = value; - this.allFinal = allFinal; - } - - /** - * Increments the AccountNonce - * - * @return The new incremented AccountNonce - */ - public AccountNonce increment() { - return new AccountNonce(this.nonce.nextNonce(), this.allFinal); - } - - public static AccountNonce from(long value) { - return from(Nonce.from(value)); - } - - public static AccountNonce from(Nonce nonce) { - return new AccountNonce(nonce, true); - } -} diff --git a/concordium-sdk/src/main/java/com/concordium/sdk/transactions/AccountTransaction.java b/concordium-sdk/src/main/java/com/concordium/sdk/transactions/AccountTransaction.java index 877db56f2..623f60c87 100644 --- a/concordium-sdk/src/main/java/com/concordium/sdk/transactions/AccountTransaction.java +++ b/concordium-sdk/src/main/java/com/concordium/sdk/transactions/AccountTransaction.java @@ -1,9 +1,12 @@ package com.concordium.sdk.transactions; import com.concordium.sdk.types.AccountAddress; +import com.concordium.sdk.types.Nonce; import com.concordium.sdk.types.UInt64; import lombok.*; + import java.nio.ByteBuffer; + import static com.google.common.primitives.Bytes.concat; @Getter @@ -28,16 +31,17 @@ public class AccountTransaction extends BlockItem { /** * Constructor serializing an account transaction - * @param sender sender of the transaction - * @param nonce account nonce - * @param expiry the expiry of the transaction - * @param signer the {@link Signer} of the transaction - * @param payload the payload of the transaction + * + * @param sender sender of the transaction + * @param nonce account nonce + * @param expiry the expiry of the transaction + * @param signer the {@link Signer} of the transaction + * @param payload the payload of the transaction * @param maxEnergyCost the max energy cost allowed for this transaction. */ AccountTransaction( @NonNull final AccountAddress sender, - @NonNull final AccountNonce nonce, + @NonNull final Nonce nonce, @NonNull final Expiry expiry, @NonNull final TransactionSigner signer, @NonNull final Payload payload, @@ -45,7 +49,7 @@ public class AccountTransaction extends BlockItem { this(payload .withHeader(TransactionHeader.explicitMaxEnergyBuilder() .sender(sender) - .accountNonce(nonce.getNonce()) + .Nonce(nonce) .expiry(expiry.getValue()) .maxEnergyCost(maxEnergyCost) .build()) @@ -54,9 +58,10 @@ public class AccountTransaction extends BlockItem { /** * Constructor for deserializing a transaction + * * @param signature the signature - * @param header the header - * @param payload the payload + * @param header the header + * @param payload the payload */ public AccountTransaction( @NonNull final TransactionSignature signature, @@ -95,10 +100,10 @@ public AccountAddress getSender() { /** * Sequence number for Account Activity. This should increase monotonically. * - * @return {@link AccountNonce}. + * @return {@link Nonce}. */ - public AccountNonce getNonce() { - return AccountNonce.from(this.header.getAccountNonce()); + public Nonce getNonce() { + return this.header.getNonce(); } /** diff --git a/concordium-sdk/src/main/java/com/concordium/sdk/transactions/ConfigureBakerPayload.java b/concordium-sdk/src/main/java/com/concordium/sdk/transactions/ConfigureBakerPayload.java index 0f7aab27c..51ade155a 100644 --- a/concordium-sdk/src/main/java/com/concordium/sdk/transactions/ConfigureBakerPayload.java +++ b/concordium-sdk/src/main/java/com/concordium/sdk/transactions/ConfigureBakerPayload.java @@ -1,5 +1,6 @@ package com.concordium.sdk.transactions; +import com.concordium.sdk.responses.transactionstatus.PartsPerHundredThousand; import com.concordium.sdk.types.UInt16; import com.concordium.sdk.types.UInt32; import lombok.Builder; @@ -8,6 +9,7 @@ import lombok.val; import java.nio.ByteBuffer; +import java.util.Objects; /** * Payload for configuring a baker. @@ -30,7 +32,7 @@ public class ConfigureBakerPayload { /** * Whether the pool is open for delegators. */ - private final Integer openForDelegation; + private final Boolean openForDelegation; /** * The key/proof pairs to verify the baker. */ @@ -39,18 +41,22 @@ public class ConfigureBakerPayload { * The URL referencing the baker's metadata. */ private final String metadataUrl; + /** * The commission the pool owner takes on transaction fees. + * The supplied value is interpreted as "the value" / 100_000 */ - private final UInt32 transactionFeeCommission; + private final PartsPerHundredThousand transactionFeeCommission; /** * The commission the pool owner takes on baking rewards. + * The supplied value is interpreted as "the value" / 100_000 */ - private final UInt32 bakingRewardCommission; + private final PartsPerHundredThousand bakingRewardCommission; /** * The commission the pool owner takes on finalization rewards. + * The supplied value is interpreted as "the value" / 100_000 */ - private final UInt32 finalizationRewardCommission; + private final PartsPerHundredThousand finalizationRewardCommission; ByteBuffer createNotNullBuffer(byte[] bufferBytes) { val buffer = ByteBuffer.allocate(bufferBytes.length); @@ -64,19 +70,19 @@ public byte[] getBitMapBytes() { bitValue |= ((this.capital != null) ? it : 0); it *= 2; - bitValue |= ((this.restakeEarnings != null) ? it : 0); + bitValue |= (!(Objects.isNull(this.restakeEarnings)) ? it : 0); it *= 2; - bitValue |= ((this.openForDelegation != null) ? it : 0); + bitValue |= (!Objects.isNull(this.openForDelegation) ? it : 0); it *= 2; bitValue |= ((this.keysWithProofs != null) ? it : 0); it *= 2; bitValue |= ((this.metadataUrl != null) ? it : 0); it *= 2; - bitValue |= ((this.transactionFeeCommission != null) ? it : 0); + bitValue |= (!Objects.isNull(this.transactionFeeCommission ) ? it : 0); it *= 2; - bitValue |= ((this.bakingRewardCommission != null) ? it : 0); + bitValue |= (!Objects.isNull(this.bakingRewardCommission) ? it : 0); it *= 2; - bitValue |= ((this.finalizationRewardCommission != null) ? it : 0); + bitValue |= (!Objects.isNull(this.finalizationRewardCommission) ? it : 0); return UInt16.from(bitValue).getBytes(); } @@ -109,7 +115,7 @@ public byte[] getBytes() { } if (this.openForDelegation != null) { - val openForDelegationByte = this.openForDelegation.byteValue(); + val openForDelegationByte = (byte) (this.openForDelegation ? 1 : 0); openForDelegationBuffer = createNotNullBuffer(new byte[]{openForDelegationByte}); bufferLength += TransactionType.BYTES; } diff --git a/concordium-sdk/src/main/java/com/concordium/sdk/transactions/ConfigureBakerTransaction.java b/concordium-sdk/src/main/java/com/concordium/sdk/transactions/ConfigureBakerTransaction.java index cbe71567e..82022a84b 100644 --- a/concordium-sdk/src/main/java/com/concordium/sdk/transactions/ConfigureBakerTransaction.java +++ b/concordium-sdk/src/main/java/com/concordium/sdk/transactions/ConfigureBakerTransaction.java @@ -2,6 +2,7 @@ import com.concordium.sdk.exceptions.TransactionCreationException; import com.concordium.sdk.types.AccountAddress; +import com.concordium.sdk.types.Nonce; import com.concordium.sdk.types.UInt64; import lombok.*; @@ -17,7 +18,7 @@ public class ConfigureBakerTransaction extends AccountTransaction { ConfigureBakerTransaction( @NonNull final ConfigureBakerPayload payload, @NonNull final AccountAddress sender, - @NonNull final AccountNonce nonce, + @NonNull final Nonce nonce, @NonNull final Expiry expiry, @NonNull final TransactionSigner signer, @NonNull final UInt64 cost) { @@ -39,7 +40,7 @@ public class ConfigureBakerTransaction extends AccountTransaction { @Builder public static ConfigureBakerTransaction from(final ConfigureBakerPayload payload, final AccountAddress sender, - final AccountNonce nonce, + final Nonce nonce, final Expiry expiry, final TransactionSigner signer) { try { diff --git a/concordium-sdk/src/main/java/com/concordium/sdk/transactions/ConfigureDelegationPayload.java b/concordium-sdk/src/main/java/com/concordium/sdk/transactions/ConfigureDelegationPayload.java index 40152f338..e864c4eef 100644 --- a/concordium-sdk/src/main/java/com/concordium/sdk/transactions/ConfigureDelegationPayload.java +++ b/concordium-sdk/src/main/java/com/concordium/sdk/transactions/ConfigureDelegationPayload.java @@ -2,10 +2,7 @@ import com.concordium.sdk.responses.transactionstatus.DelegationTarget; import com.concordium.sdk.types.UInt16; -import lombok.Builder; -import lombok.EqualsAndHashCode; -import lombok.Getter; -import lombok.val; +import lombok.*; import java.nio.ByteBuffer; @@ -79,13 +76,13 @@ public byte[] getBytes() { if (this.restakeEarnings != null) { val restakeEarningsByte = (byte) (this.restakeEarnings ? 1 : 0); restakeEarningBuffer = createNotNullBuffer(new byte[]{restakeEarningsByte}); - bufferLength += TransactionType.BYTES; + bufferLength += 1; // 1 byte indicates whether restaking should be set or not. } if (this.delegationTarget != null) { val openForDelegationBytes = this.delegationTarget.getBytes(); delegationTargetBuffer = createNotNullBuffer(openForDelegationBytes); - bufferLength += TransactionType.BYTES; + bufferLength += openForDelegationBytes.length; } val buffer = ByteBuffer.allocate(bufferLength); diff --git a/concordium-sdk/src/main/java/com/concordium/sdk/transactions/ConfigureDelegationTransaction.java b/concordium-sdk/src/main/java/com/concordium/sdk/transactions/ConfigureDelegationTransaction.java index 97911bb12..6798ed43b 100644 --- a/concordium-sdk/src/main/java/com/concordium/sdk/transactions/ConfigureDelegationTransaction.java +++ b/concordium-sdk/src/main/java/com/concordium/sdk/transactions/ConfigureDelegationTransaction.java @@ -2,6 +2,7 @@ import com.concordium.sdk.exceptions.TransactionCreationException; import com.concordium.sdk.types.AccountAddress; +import com.concordium.sdk.types.Nonce; import lombok.*; /** @@ -15,7 +16,7 @@ public class ConfigureDelegationTransaction extends AccountTransaction { private ConfigureDelegationTransaction( @NonNull final ConfigureDelegationPayload payload, @NonNull final AccountAddress sender, - @NonNull final AccountNonce nonce, + @NonNull final Nonce nonce, @NonNull final Expiry expiry, @NonNull final TransactionSigner signer) { super(sender, nonce, expiry, signer, ConfigureDelegation.createNew(payload), TransactionTypeCost.CONFIGURE_DELEGATION.getValue()); @@ -36,7 +37,7 @@ private ConfigureDelegationTransaction( @Builder public static ConfigureDelegationTransaction from(final ConfigureDelegationPayload payload, final AccountAddress sender, - final AccountNonce nonce, + final Nonce nonce, final Expiry expiry, final TransactionSigner signer) { try { diff --git a/concordium-sdk/src/main/java/com/concordium/sdk/transactions/DeployModuleTransaction.java b/concordium-sdk/src/main/java/com/concordium/sdk/transactions/DeployModuleTransaction.java index 46fe86b4f..b12de0b00 100644 --- a/concordium-sdk/src/main/java/com/concordium/sdk/transactions/DeployModuleTransaction.java +++ b/concordium-sdk/src/main/java/com/concordium/sdk/transactions/DeployModuleTransaction.java @@ -3,6 +3,7 @@ import com.concordium.sdk.exceptions.TransactionCreationException; import com.concordium.sdk.transactions.smartcontracts.WasmModule; import com.concordium.sdk.types.AccountAddress; +import com.concordium.sdk.types.Nonce; import com.concordium.sdk.types.UInt64; import lombok.*; @@ -15,7 +16,7 @@ public class DeployModuleTransaction extends AccountTransaction { private DeployModuleTransaction( @NonNull final AccountAddress sender, - @NonNull final AccountNonce nonce, + @NonNull final Nonce nonce, @NonNull final Expiry expiry, @NonNull final TransactionSigner signer, @NonNull final WasmModule module, @@ -43,7 +44,7 @@ private DeployModuleTransaction( */ @Builder(builderClassName = "DeployModuleTransactionBuilder") public static DeployModuleTransaction from(final AccountAddress sender, - final AccountNonce nonce, + final Nonce nonce, final Expiry expiry, final TransactionSigner signer, final WasmModule module, diff --git a/concordium-sdk/src/main/java/com/concordium/sdk/transactions/EncryptedTransferTransaction.java b/concordium-sdk/src/main/java/com/concordium/sdk/transactions/EncryptedTransferTransaction.java index c343c8067..afc8d405c 100644 --- a/concordium-sdk/src/main/java/com/concordium/sdk/transactions/EncryptedTransferTransaction.java +++ b/concordium-sdk/src/main/java/com/concordium/sdk/transactions/EncryptedTransferTransaction.java @@ -3,6 +3,7 @@ import com.concordium.sdk.exceptions.TransactionCreationException; import com.concordium.sdk.types.AccountAddress; +import com.concordium.sdk.types.Nonce; import lombok.*; @Getter @@ -17,7 +18,7 @@ private EncryptedTransferTransaction( @NonNull final EncryptedAmountTransferData data, @NonNull final AccountAddress receiver, @NonNull final AccountAddress sender, - @NonNull final AccountNonce nonce, + @NonNull final Nonce nonce, @NonNull final Expiry expiry, @NonNull final TransactionSigner signer) { super(sender, nonce, expiry, signer, EncryptedTransfer.createNew(data, receiver), TransactionTypeCost.ENCRYPTED_TRANSFER.getValue()); @@ -38,7 +39,7 @@ private EncryptedTransferTransaction( public static EncryptedTransferTransaction from(final EncryptedAmountTransferData data, final AccountAddress receiver, final AccountAddress sender, - final AccountNonce nonce, + final Nonce nonce, final Expiry expiry, final TransactionSigner signer) { try { diff --git a/concordium-sdk/src/main/java/com/concordium/sdk/transactions/EncryptedTransferWithMemoTransaction.java b/concordium-sdk/src/main/java/com/concordium/sdk/transactions/EncryptedTransferWithMemoTransaction.java index 35d3cb7c0..fce0178da 100644 --- a/concordium-sdk/src/main/java/com/concordium/sdk/transactions/EncryptedTransferWithMemoTransaction.java +++ b/concordium-sdk/src/main/java/com/concordium/sdk/transactions/EncryptedTransferWithMemoTransaction.java @@ -3,6 +3,7 @@ import com.concordium.sdk.exceptions.TransactionCreationException; import com.concordium.sdk.types.AccountAddress; +import com.concordium.sdk.types.Nonce; import lombok.*; @Getter @@ -18,7 +19,7 @@ private EncryptedTransferWithMemoTransaction( @NonNull final AccountAddress receiver, @NonNull final Memo memo, @NonNull final AccountAddress sender, - @NonNull final AccountNonce nonce, + @NonNull final Nonce nonce, @NonNull final Expiry expiry, @NonNull final TransactionSigner signer) { super(sender, nonce, expiry, signer, EncryptedTransferWithMemo.createNew(data, receiver, memo), TransactionTypeCost.ENCRYPTED_TRANSFER_WITH_MEMO.getValue()); @@ -44,7 +45,7 @@ public static EncryptedTransferWithMemoTransaction from( final AccountAddress receiver, final Memo memo, final AccountAddress sender, - final AccountNonce nonce, + final Nonce nonce, final Expiry expiry, final TransactionSigner signer) { try { diff --git a/concordium-sdk/src/main/java/com/concordium/sdk/transactions/InitContractTransaction.java b/concordium-sdk/src/main/java/com/concordium/sdk/transactions/InitContractTransaction.java index 2caba7c30..bdc30a973 100644 --- a/concordium-sdk/src/main/java/com/concordium/sdk/transactions/InitContractTransaction.java +++ b/concordium-sdk/src/main/java/com/concordium/sdk/transactions/InitContractTransaction.java @@ -3,6 +3,7 @@ import com.concordium.sdk.exceptions.TransactionCreationException; import com.concordium.sdk.types.AccountAddress; +import com.concordium.sdk.types.Nonce; import com.concordium.sdk.types.UInt64; import lombok.Builder; import lombok.EqualsAndHashCode; @@ -23,7 +24,7 @@ public class InitContractTransaction extends AccountTransaction { private InitContractTransaction( @NonNull final InitContractPayload payload, @NonNull final AccountAddress sender, - @NonNull final AccountNonce nonce, + @NonNull final Nonce nonce, @NonNull final Expiry expiry, @NonNull final TransactionSigner signer, @NonNull final UInt64 maxEnergyCost) { @@ -53,7 +54,7 @@ private InitContractTransaction( public static InitContractTransaction from( final InitContractPayload payload, final AccountAddress sender, - final AccountNonce nonce, + final Nonce nonce, final Expiry expiry, final TransactionSigner signer, final UInt64 maxEnergyCost) { diff --git a/concordium-sdk/src/main/java/com/concordium/sdk/transactions/RegisterDataTransaction.java b/concordium-sdk/src/main/java/com/concordium/sdk/transactions/RegisterDataTransaction.java index 2fad21b18..b4311b1c7 100644 --- a/concordium-sdk/src/main/java/com/concordium/sdk/transactions/RegisterDataTransaction.java +++ b/concordium-sdk/src/main/java/com/concordium/sdk/transactions/RegisterDataTransaction.java @@ -3,6 +3,7 @@ import com.concordium.sdk.exceptions.TransactionCreationException; import com.concordium.sdk.types.AccountAddress; +import com.concordium.sdk.types.Nonce; import lombok.*; @Getter @@ -12,7 +13,7 @@ public class RegisterDataTransaction extends AccountTransaction { private RegisterDataTransaction( @NonNull final AccountAddress sender, @NonNull final Data data, - @NonNull final AccountNonce nonce, + @NonNull final Nonce nonce, @NonNull final Expiry expiry, @NonNull final TransactionSigner signer) { super(sender, nonce, expiry, signer, RegisterData.createNew(data), TransactionTypeCost.REGISTER_DATA.getValue()); @@ -43,7 +44,7 @@ private RegisterDataTransaction( public static RegisterDataTransaction from( final AccountAddress sender, final Data data, - final AccountNonce nonce, + final Nonce nonce, final Expiry expiry, final TransactionSigner signer) { try { diff --git a/concordium-sdk/src/main/java/com/concordium/sdk/transactions/TransactionHeader.java b/concordium-sdk/src/main/java/com/concordium/sdk/transactions/TransactionHeader.java index 116f96832..39e9bee81 100644 --- a/concordium-sdk/src/main/java/com/concordium/sdk/transactions/TransactionHeader.java +++ b/concordium-sdk/src/main/java/com/concordium/sdk/transactions/TransactionHeader.java @@ -16,7 +16,7 @@ @ToString public class TransactionHeader { private final AccountAddress sender; - private final Nonce accountNonce; + private final Nonce nonce; private final UInt64 expiry; @Setter @@ -28,15 +28,15 @@ public class TransactionHeader { * Create a {@link TransactionHeader} * * @param sender the sender {@link AccountAddress} - * @param accountNonce the nonce. + * @param Nonce the nonce. * Note. this should be the next available account nonce. * This can e.g. be retrieved via {@link com.concordium.sdk.responses.accountinfo.AccountInfo} * @param expiry A Unix timestamp indicating when the transaction should expire. */ @Builder - TransactionHeader(@NonNull AccountAddress sender, @NonNull Nonce accountNonce, @NonNull UInt64 expiry) { + TransactionHeader(@NonNull AccountAddress sender, @NonNull Nonce Nonce, @NonNull UInt64 expiry) { this.sender = sender; - this.accountNonce = accountNonce; + this.nonce = Nonce; this.expiry = expiry; this.maxEnergyCost = UInt64.from(0); // dummy value will be overwritten when calculating the cost of the transaction. } @@ -46,24 +46,24 @@ public class TransactionHeader { * set directly in the header as opposed to being calculated. * This is the case for transactions that operate on smart contracts. * @param sender the sender of the transaction - * @param accountNonce the nonce of the sender account + * @param Nonce the nonce of the sender account * @param expiry the expiry of the transaction * @param maxEnergyCost the maximum allowed energy to spend on this transaction. */ @Builder(builderMethodName = "explicitMaxEnergyBuilder", builderClassName = "TransactionHeaderExplicitMaxEnergyBuilder") - TransactionHeader(@NonNull AccountAddress sender, @NonNull Nonce accountNonce, @NonNull UInt64 expiry, @NonNull UInt64 maxEnergyCost) { + TransactionHeader(@NonNull AccountAddress sender, @NonNull Nonce Nonce, @NonNull UInt64 expiry, @NonNull UInt64 maxEnergyCost) { this.sender = sender; - this.accountNonce = accountNonce; + this.nonce = Nonce; this.expiry = expiry; this.maxEnergyCost = maxEnergyCost; } private TransactionHeader(@NonNull final AccountAddress sender, - @NonNull final Nonce accountNonce, + @NonNull final Nonce Nonce, @NonNull final UInt64 expiry, @NonNull final UInt64 maxEnergyCost, @NonNull final UInt32 payloadSize) { - this(sender, accountNonce, expiry); + this(sender, Nonce, expiry); this.maxEnergyCost = maxEnergyCost; this.payloadSize = payloadSize; } @@ -72,7 +72,7 @@ private TransactionHeader(@NonNull final AccountAddress sender, * Creates a new Account {@link TransactionHeader}. * * @param sender Sender ({@link AccountAddress}) of this Transaction. - * @param accountNonce Account {@link com.concordium.sdk.types.Nonce} Of the Sender Account. + * @param Nonce Account {@link com.concordium.sdk.types.Nonce} Of the Sender Account. * @param expiry {@link Expiry} of this transaction. * @param maxEnergyCost Energy allowed for this transaction. * @param payloadSize Byte size of the payload for this transaction. @@ -83,17 +83,17 @@ private TransactionHeader(@NonNull final AccountAddress sender, builderClassName = "TransactionHeaderImmutableBuilder", builderMethodName = "builderImmutable") public static TransactionHeader from(final AccountAddress sender, - final Nonce accountNonce, + final Nonce nonce, final UInt64 expiry, final UInt64 maxEnergyCost, final UInt32 payloadSize) { - return new TransactionHeader(sender, accountNonce, expiry, maxEnergyCost, payloadSize); + return new TransactionHeader(sender, nonce, expiry, maxEnergyCost, payloadSize); } byte[] getBytes() { val buffer = ByteBuffer.allocate(AccountAddress.BYTES + UInt64.BYTES + UInt64.BYTES + UInt32.BYTES + UInt64.BYTES); buffer.put(sender.getBytes()); - buffer.put(accountNonce.getBytes()); + buffer.put(nonce.getBytes()); buffer.put(maxEnergyCost.getBytes()); buffer.put(payloadSize.getBytes()); buffer.put(expiry.getBytes()); @@ -102,11 +102,11 @@ byte[] getBytes() { public static TransactionHeader fromBytes(ByteBuffer source) { AccountAddress sender = AccountAddress.fromBytes(source); - Nonce accountNonce = Nonce.fromBytes(source); + val nonce = Nonce.fromBytes(source); UInt64 maxEnergyCost = UInt64.fromBytes(source); UInt32 payloadSize = UInt32.fromBytes(source); UInt64 expiry = UInt64.fromBytes(source); - TransactionHeader header = new TransactionHeader(sender, accountNonce, expiry); + TransactionHeader header = new TransactionHeader(sender, nonce, expiry); header.setMaxEnergyCost(maxEnergyCost); header.setPayloadSize(payloadSize); return header; diff --git a/concordium-sdk/src/main/java/com/concordium/sdk/transactions/TransferScheduleTransaction.java b/concordium-sdk/src/main/java/com/concordium/sdk/transactions/TransferScheduleTransaction.java index a41f5d2f4..68c3c6ab6 100644 --- a/concordium-sdk/src/main/java/com/concordium/sdk/transactions/TransferScheduleTransaction.java +++ b/concordium-sdk/src/main/java/com/concordium/sdk/transactions/TransferScheduleTransaction.java @@ -2,6 +2,7 @@ import com.concordium.sdk.exceptions.TransactionCreationException; import com.concordium.sdk.types.AccountAddress; +import com.concordium.sdk.types.Nonce; import com.concordium.sdk.types.UInt16; import com.concordium.sdk.types.UInt64; import lombok.*; @@ -19,7 +20,7 @@ private TransferScheduleTransaction( @NonNull final AccountAddress sender, @NonNull final AccountAddress to, @NonNull final Schedule[] schedule, - @NonNull final AccountNonce nonce, + @NonNull final Nonce nonce, @NonNull final Expiry expiry, @NonNull final TransactionSigner signer) { super(sender, nonce, expiry, signer, TransferSchedule.createNew(to, schedule),getCost(schedule)); @@ -47,7 +48,7 @@ public static TransferScheduleTransaction from( final AccountAddress sender, final AccountAddress to, final Schedule[] schedule, - final AccountNonce nonce, + final Nonce nonce, final Expiry expiry, final TransactionSigner signer) { try { diff --git a/concordium-sdk/src/main/java/com/concordium/sdk/transactions/TransferScheduleWithMemoTransaction.java b/concordium-sdk/src/main/java/com/concordium/sdk/transactions/TransferScheduleWithMemoTransaction.java index 5e2d4bcef..61b39db3f 100644 --- a/concordium-sdk/src/main/java/com/concordium/sdk/transactions/TransferScheduleWithMemoTransaction.java +++ b/concordium-sdk/src/main/java/com/concordium/sdk/transactions/TransferScheduleWithMemoTransaction.java @@ -3,6 +3,7 @@ import com.concordium.sdk.exceptions.TransactionCreationException; import com.concordium.sdk.types.AccountAddress; +import com.concordium.sdk.types.Nonce; import com.concordium.sdk.types.UInt16; import com.concordium.sdk.types.UInt64; import lombok.*; @@ -19,7 +20,7 @@ private TransferScheduleWithMemoTransaction( @NonNull final AccountAddress to, @NonNull final Schedule[] schedule, @NonNull final Memo memo, - @NonNull final AccountNonce nonce, + @NonNull final Nonce nonce, @NonNull final Expiry expiry, @NonNull final TransactionSigner signer) { super(sender, nonce, expiry, signer, TransferScheduleWithMemo.createNew(to, schedule, memo), getCost(schedule)); @@ -54,7 +55,7 @@ public static TransferScheduleWithMemoTransaction from( final AccountAddress to, final Schedule[] schedule, final Memo memo, - final AccountNonce nonce, + final Nonce nonce, final Expiry expiry, final TransactionSigner signer) { try { diff --git a/concordium-sdk/src/main/java/com/concordium/sdk/transactions/TransferToEncryptedTransaction.java b/concordium-sdk/src/main/java/com/concordium/sdk/transactions/TransferToEncryptedTransaction.java index 0da5c082e..bb33ef16a 100644 --- a/concordium-sdk/src/main/java/com/concordium/sdk/transactions/TransferToEncryptedTransaction.java +++ b/concordium-sdk/src/main/java/com/concordium/sdk/transactions/TransferToEncryptedTransaction.java @@ -3,6 +3,7 @@ import com.concordium.sdk.exceptions.TransactionCreationException; import com.concordium.sdk.types.AccountAddress; +import com.concordium.sdk.types.Nonce; import lombok.*; /** @@ -15,7 +16,7 @@ public class TransferToEncryptedTransaction extends AccountTransaction { private TransferToEncryptedTransaction( @NonNull final CCDAmount amount, @NonNull final AccountAddress sender, - @NonNull final AccountNonce nonce, + @NonNull final Nonce nonce, @NonNull final Expiry expiry, @NonNull final TransactionSigner signer) { super(sender, nonce, expiry, signer, TransferToEncrypted.createNew(amount), TransactionTypeCost.TRANSFER_TO_ENCRYPTED.getValue()); @@ -37,7 +38,7 @@ private TransferToEncryptedTransaction( public static TransferToEncryptedTransaction from( final CCDAmount amount, final AccountAddress sender, - final AccountNonce nonce, + final Nonce nonce, final Expiry expiry, final TransactionSigner signer) { try { diff --git a/concordium-sdk/src/main/java/com/concordium/sdk/transactions/TransferToPublicTransaction.java b/concordium-sdk/src/main/java/com/concordium/sdk/transactions/TransferToPublicTransaction.java index 4a8ed3c16..58e520f88 100644 --- a/concordium-sdk/src/main/java/com/concordium/sdk/transactions/TransferToPublicTransaction.java +++ b/concordium-sdk/src/main/java/com/concordium/sdk/transactions/TransferToPublicTransaction.java @@ -3,6 +3,7 @@ import com.concordium.sdk.exceptions.TransactionCreationException; import com.concordium.sdk.types.AccountAddress; +import com.concordium.sdk.types.Nonce; import com.concordium.sdk.types.UInt64; import lombok.*; @@ -25,7 +26,7 @@ private TransferToPublicTransaction( @NonNull final UInt64 index, @NonNull final SecToPubAmountTransferProof proof, @NonNull final AccountAddress sender, - @NonNull final AccountNonce nonce, + @NonNull final Nonce nonce, @NonNull final Expiry expiry, @NonNull final TransactionSigner signer) { super(sender, nonce, expiry, signer, TransferToPublic.createNew( @@ -55,7 +56,7 @@ public static TransferToPublicTransaction from( final UInt64 index, final SecToPubAmountTransferProof proof, final AccountAddress sender, - final AccountNonce nonce, + final Nonce nonce, final Expiry expiry, final TransactionSigner signer) { try { diff --git a/concordium-sdk/src/main/java/com/concordium/sdk/transactions/TransferTransaction.java b/concordium-sdk/src/main/java/com/concordium/sdk/transactions/TransferTransaction.java index a45940ba5..78d1f6672 100644 --- a/concordium-sdk/src/main/java/com/concordium/sdk/transactions/TransferTransaction.java +++ b/concordium-sdk/src/main/java/com/concordium/sdk/transactions/TransferTransaction.java @@ -3,6 +3,7 @@ import com.concordium.sdk.exceptions.TransactionCreationException; import com.concordium.sdk.types.AccountAddress; +import com.concordium.sdk.types.Nonce; import lombok.*; @Getter @@ -13,7 +14,7 @@ private TransferTransaction( @NonNull final AccountAddress sender, @NonNull final AccountAddress receiver, @NonNull final CCDAmount amount, - @NonNull final AccountNonce nonce, + @NonNull final Nonce nonce, @NonNull final Expiry expiry, @NonNull final TransactionSigner signer) { super(sender, nonce, expiry, signer, Transfer.createNew(receiver, amount), TransactionTypeCost.TRANSFER_BASE_COST.getValue()); @@ -31,7 +32,7 @@ public static TransferTransaction from( final AccountAddress sender, final AccountAddress receiver, final CCDAmount amount, - final AccountNonce nonce, + final Nonce nonce, final Expiry expiry, final TransactionSigner signer) { try { diff --git a/concordium-sdk/src/main/java/com/concordium/sdk/transactions/TransferWithMemoTransaction.java b/concordium-sdk/src/main/java/com/concordium/sdk/transactions/TransferWithMemoTransaction.java index e9c32bc7e..895d1c8d5 100644 --- a/concordium-sdk/src/main/java/com/concordium/sdk/transactions/TransferWithMemoTransaction.java +++ b/concordium-sdk/src/main/java/com/concordium/sdk/transactions/TransferWithMemoTransaction.java @@ -2,6 +2,7 @@ import com.concordium.sdk.exceptions.TransactionCreationException; import com.concordium.sdk.types.AccountAddress; +import com.concordium.sdk.types.Nonce; import lombok.*; @Getter @@ -13,7 +14,7 @@ private TransferWithMemoTransaction( @NonNull final AccountAddress receiver, @NonNull final CCDAmount amount, @NonNull final Memo memo, - @NonNull final AccountNonce nonce, + @NonNull final Nonce nonce, @NonNull final Expiry expiry, @NonNull final TransactionSigner signer) { super(sender, nonce, expiry, signer, TransferWithMemo.createNew(receiver, amount, memo), TransactionTypeCost.TRANSFER_WITH_MEMO.getValue()); @@ -42,7 +43,7 @@ public static TransferWithMemoTransaction from(final AccountAddress sender, final AccountAddress receiver, final CCDAmount amount, final Memo memo, - final AccountNonce nonce, + final Nonce nonce, final Expiry expiry, final TransactionSigner signer) { try { diff --git a/concordium-sdk/src/main/java/com/concordium/sdk/transactions/UpdateContractTransaction.java b/concordium-sdk/src/main/java/com/concordium/sdk/transactions/UpdateContractTransaction.java index 409db3c0f..a92681a14 100644 --- a/concordium-sdk/src/main/java/com/concordium/sdk/transactions/UpdateContractTransaction.java +++ b/concordium-sdk/src/main/java/com/concordium/sdk/transactions/UpdateContractTransaction.java @@ -3,6 +3,7 @@ import com.concordium.sdk.exceptions.TransactionCreationException; import com.concordium.sdk.types.AccountAddress; +import com.concordium.sdk.types.Nonce; import com.concordium.sdk.types.UInt64; import lombok.*; @@ -16,7 +17,7 @@ public class UpdateContractTransaction extends AccountTransaction { private UpdateContractTransaction( @NonNull final UpdateContract payload, @NonNull final AccountAddress sender, - @NonNull final AccountNonce nonce, + @NonNull final Nonce nonce, @NonNull final Expiry expiry, @NonNull final TransactionSigner signer, @NonNull final UInt64 maxEnergyCost) { @@ -39,7 +40,7 @@ private UpdateContractTransaction( public static UpdateContractTransaction from( final UpdateContract payload, final AccountAddress sender, - final AccountNonce nonce, + final Nonce nonce, final Expiry expiry, final TransactionSigner signer, final UInt64 maxEnergyCost) { diff --git a/concordium-sdk/src/main/java/com/concordium/sdk/transactions/UpdateCredentialKeysTransaction.java b/concordium-sdk/src/main/java/com/concordium/sdk/transactions/UpdateCredentialKeysTransaction.java index c8c1eede7..23be29905 100644 --- a/concordium-sdk/src/main/java/com/concordium/sdk/transactions/UpdateCredentialKeysTransaction.java +++ b/concordium-sdk/src/main/java/com/concordium/sdk/transactions/UpdateCredentialKeysTransaction.java @@ -3,6 +3,7 @@ import com.concordium.sdk.exceptions.TransactionCreationException; import com.concordium.sdk.types.AccountAddress; +import com.concordium.sdk.types.Nonce; import com.concordium.sdk.types.UInt16; import com.concordium.sdk.types.UInt64; import lombok.*; @@ -19,7 +20,7 @@ private UpdateCredentialKeysTransaction( @NonNull final CredentialPublicKeys keys, @NonNull final UInt16 numExistingCredentials, @NonNull final AccountAddress sender, - @NonNull final AccountNonce nonce, + @NonNull final Nonce nonce, @NonNull final Expiry expiry, @NonNull final TransactionSigner signer) { super(sender, nonce, expiry, signer, UpdateCredentialKeys.createNew( @@ -47,7 +48,7 @@ public static UpdateCredentialKeysTransaction from( final CredentialPublicKeys keys, final UInt16 numExistingCredentials, final AccountAddress sender, - final AccountNonce nonce, + final Nonce nonce, final Expiry expiry, final TransactionSigner signer) { try { diff --git a/concordium-sdk/src/main/java/com/concordium/sdk/types/AbstractAddress.java b/concordium-sdk/src/main/java/com/concordium/sdk/types/AbstractAddress.java index 7df7ea898..767b245fa 100644 --- a/concordium-sdk/src/main/java/com/concordium/sdk/types/AbstractAddress.java +++ b/concordium-sdk/src/main/java/com/concordium/sdk/types/AbstractAddress.java @@ -31,26 +31,6 @@ public abstract class AbstractAddress { this.type = type; } - //not pretty - find a better way of handling this. - public static AbstractAddress parseAccount(Map o) { - try { - if (isContractAddress(o)) { - val contract = (Map) o.get("address"); - return new ContractAddress( - contract.get("subindex"), - contract.get("index")); - } else { - return AccountAddress.from(((String) o.get("address"))); - } - } catch (Exception e) { - return null; - } - } - - private static boolean isContractAddress(Map o) { - return AccountType.from((String) o.get("type")) == AccountType.ADDRESS_CONTRACT; - } - public static AbstractAddress from(Address instigator) { switch (instigator.getTypeCase()) { case ACCOUNT: diff --git a/concordium-sdk/src/main/java/com/concordium/sdk/types/UInt16.java b/concordium-sdk/src/main/java/com/concordium/sdk/types/UInt16.java index 91c632e62..bc607f83e 100644 --- a/concordium-sdk/src/main/java/com/concordium/sdk/types/UInt16.java +++ b/concordium-sdk/src/main/java/com/concordium/sdk/types/UInt16.java @@ -10,7 +10,7 @@ @EqualsAndHashCode @Getter @ToString -public final class UInt16 { +public final class UInt16 implements Comparable { public static final int BYTES = 2; private final int value; @@ -53,4 +53,9 @@ public static UInt16 fromBytes(ByteBuffer source) { source.get(valueBytes); return UInt16.from(valueBytes); } + + @Override + public int compareTo(UInt16 o) { + return Integer.compare(this.value, o.value); + } } diff --git a/concordium-sdk/src/main/java/com/concordium/sdk/types/UInt32.java b/concordium-sdk/src/main/java/com/concordium/sdk/types/UInt32.java index cd339f2bb..e464f7a4b 100644 --- a/concordium-sdk/src/main/java/com/concordium/sdk/types/UInt32.java +++ b/concordium-sdk/src/main/java/com/concordium/sdk/types/UInt32.java @@ -1,5 +1,10 @@ package com.concordium.sdk.types; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.val; @@ -7,16 +12,10 @@ import java.io.IOException; import java.nio.ByteBuffer; -import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.SerializerProvider; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import com.fasterxml.jackson.databind.ser.std.StdSerializer; - @EqualsAndHashCode @Getter @JsonSerialize(using = UInt32.UInt32Serializer.class) -public final class UInt32 { +public final class UInt32 implements Comparable { public static final int BYTES = Integer.BYTES; final int value; @@ -34,10 +33,13 @@ public static UInt32 from(String value) { return new UInt32(Integer.parseUnsignedInt(value)); } + /** + * Construct a 32 bits wide integer that is interpreted as unsigned. + * + * @param value the integer treated as unsigned. + * @return the resulting {@link UInt32} + */ public static UInt32 from(int value) { - if (value < 0) { - throw new NumberFormatException("Value of UInt32 can not be negative"); - } return new UInt32(value); } @@ -56,7 +58,12 @@ public static UInt32 fromBytes(ByteBuffer source) { @Override public String toString() { - return String.valueOf(value); + return Integer.toUnsignedString(value); + } + + @Override + public int compareTo(UInt32 other) { + return Integer.compareUnsigned(this.value, other.value); } /** diff --git a/concordium-sdk/src/test/java/com/concordium/sdk/ClientV2GetAccountInfoTest.java b/concordium-sdk/src/test/java/com/concordium/sdk/ClientV2GetAccountInfoTest.java index 8610c32b9..45e333289 100644 --- a/concordium-sdk/src/test/java/com/concordium/sdk/ClientV2GetAccountInfoTest.java +++ b/concordium-sdk/src/test/java/com/concordium/sdk/ClientV2GetAccountInfoTest.java @@ -18,6 +18,7 @@ import com.concordium.sdk.responses.accountinfo.*; import com.concordium.sdk.responses.accountinfo.credential.CredentialType; import com.concordium.sdk.responses.accountinfo.credential.*; +import com.concordium.sdk.responses.transactionstatus.PartsPerHundredThousand; import com.concordium.sdk.transactions.CCDAmount; import com.concordium.sdk.transactions.EncryptedAmountIndex; import com.concordium.sdk.transactions.Hash; @@ -248,7 +249,7 @@ private static com.concordium.sdk.responses.accountinfo.AccountInfo NEW_EXPECTED transaction(Hash.from(RELEASE_TRANSACTION_HASH)). build())). build()). - accountNonce(Nonce.from(SEQUENCE_NUMBER)). + Nonce(Nonce.from(SEQUENCE_NUMBER)). accountCredential(Index.from(0), Credential. builder(). type(CredentialType.NORMAL). @@ -295,9 +296,9 @@ private static com.concordium.sdk.responses.accountinfo.AccountInfo NEW_EXPECTED metadataUrl(BAKER_POOL_URL). openStatus(com.concordium.sdk.responses.transactionstatus.OpenStatus.OPEN_FOR_ALL). commissionRates(com.concordium.sdk.responses.accountinfo.CommissionRates.builder(). - bakingCommission((double) COMMISSION_BAKING_PPHT / 100_000D). - finalizationCommission((double) COMMISSION_FINALIZATION_PPHT / 100_000D). - transactionCommission((double) COMMISSION_TRANSACTION_PPHT / 100_000D). + bakingCommission(PartsPerHundredThousand.from(COMMISSION_BAKING_PPHT)). + finalizationCommission(PartsPerHundredThousand.from(COMMISSION_FINALIZATION_PPHT)). + transactionCommission(PartsPerHundredThousand.from(COMMISSION_TRANSACTION_PPHT)). build()). build()). build()). diff --git a/concordium-sdk/src/test/java/com/concordium/sdk/ClientV2GetBakerRewardPeriodInfoTest.java b/concordium-sdk/src/test/java/com/concordium/sdk/ClientV2GetBakerRewardPeriodInfoTest.java index f9500190c..5ea14abaf 100644 --- a/concordium-sdk/src/test/java/com/concordium/sdk/ClientV2GetBakerRewardPeriodInfoTest.java +++ b/concordium-sdk/src/test/java/com/concordium/sdk/ClientV2GetBakerRewardPeriodInfoTest.java @@ -92,9 +92,9 @@ public class ClientV2GetBakerRewardPeriodInfoTest { .baker(CLIENT_BAKER_INFO_1) .effectiveStake(CCDAmount.fromMicro(EFFECTIVE_STAKE_1)) .commissionRates(CommissionRates.builder() - .finalizationCommission(PartsPerHundredThousand.from(COM_FINAL_1).asDouble()) - .bakingCommission(PartsPerHundredThousand.from(COM_BAKING_1).asDouble()) - .transactionCommission(PartsPerHundredThousand.from(COM_TRAN_1).asDouble()) + .finalizationCommission(PartsPerHundredThousand.from(COM_FINAL_1)) + .bakingCommission(PartsPerHundredThousand.from(COM_BAKING_1)) + .transactionCommission(PartsPerHundredThousand.from(COM_TRAN_1)) .build()) .equityCapital(CCDAmount.fromMicro(EQUITY_1)) .delegatedCapital(CCDAmount.fromMicro(DELEGATED_1)) @@ -105,9 +105,9 @@ public class ClientV2GetBakerRewardPeriodInfoTest { .baker(CLIENT_BAKER_INFO_2) .effectiveStake(CCDAmount.fromMicro(EFFECTIVE_STAKE_2)) .commissionRates(CommissionRates.builder() - .finalizationCommission(PartsPerHundredThousand.from(COM_FINAL_2).asDouble()) - .bakingCommission(PartsPerHundredThousand.from(COM_BAKING_2).asDouble()) - .transactionCommission(PartsPerHundredThousand.from(COM_TRAN_2).asDouble()) + .finalizationCommission(PartsPerHundredThousand.from(COM_FINAL_2)) + .bakingCommission(PartsPerHundredThousand.from(COM_BAKING_2)) + .transactionCommission(PartsPerHundredThousand.from(COM_TRAN_2)) .build()) .equityCapital(CCDAmount.fromMicro(EQUITY_2)) .delegatedCapital(CCDAmount.fromMicro(DELEGATED_2)) diff --git a/concordium-sdk/src/test/java/com/concordium/sdk/ClientV2GetNextAccountSequenceNumberTest.java b/concordium-sdk/src/test/java/com/concordium/sdk/ClientV2GetNextAccountSequenceNumberTest.java index 5ad0adac1..44d42d1ae 100644 --- a/concordium-sdk/src/test/java/com/concordium/sdk/ClientV2GetNextAccountSequenceNumberTest.java +++ b/concordium-sdk/src/test/java/com/concordium/sdk/ClientV2GetNextAccountSequenceNumberTest.java @@ -4,7 +4,7 @@ import com.concordium.grpc.v2.NextAccountSequenceNumber; import com.concordium.grpc.v2.QueriesGrpc; import com.concordium.grpc.v2.SequenceNumber; -import com.concordium.sdk.transactions.AccountNonce; +import com.concordium.sdk.types.Nonce; import io.grpc.ManagedChannel; import io.grpc.inprocess.InProcessChannelBuilder; import io.grpc.inprocess.InProcessServerBuilder; @@ -37,7 +37,7 @@ public class ClientV2GetNextAccountSequenceNumberTest { .setAllFinal(true) .build(); - private static final AccountNonce CONSENSUS_INFO_RES_EXPECTED = AccountNonce.from(NONCE_VALUE); + private static final Nonce CONSENSUS_INFO_RES_EXPECTED = Nonce.from(NONCE_VALUE); private static final QueriesGrpc.QueriesImplBase serviceImpl = mock(QueriesGrpc.QueriesImplBase.class, delegatesTo( new QueriesGrpc.QueriesImplBase() { diff --git a/concordium-sdk/src/test/java/com/concordium/sdk/ClientV2GetPoolInfoTest.java b/concordium-sdk/src/test/java/com/concordium/sdk/ClientV2GetPoolInfoTest.java index 52d1560fa..13d6566a0 100644 --- a/concordium-sdk/src/test/java/com/concordium/sdk/ClientV2GetPoolInfoTest.java +++ b/concordium-sdk/src/test/java/com/concordium/sdk/ClientV2GetPoolInfoTest.java @@ -126,18 +126,18 @@ public void getPoolInfo(PoolInfoRequest request, StreamObservercom.concordium.sdk concordium-sdk-base - 6.1.0 + 6.1.1-SNAPSHOT pom https://github.com/Concordium/concordium-java-sdk