diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/service/bma/TransactionRemoteServiceImpl.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/service/bma/TransactionRemoteServiceImpl.java index 7f5b9b99926a1835455fcae73f5f97efe8dd6a03..f59f74a443b129812caa580ac3fa55d7930244d4 100644 --- a/duniter4j-core-client/src/main/java/org/duniter/core/client/service/bma/TransactionRemoteServiceImpl.java +++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/service/bma/TransactionRemoteServiceImpl.java @@ -67,6 +67,7 @@ public class TransactionRemoteServiceImpl extends BaseRemoteServiceImpl implemen private CryptoService cryptoService; + private BlockchainRemoteService blockchainService; public TransactionRemoteServiceImpl() { super(); @@ -76,6 +77,7 @@ public class TransactionRemoteServiceImpl extends BaseRemoteServiceImpl implemen public void afterPropertiesSet() { super.afterPropertiesSet(); cryptoService = ServiceLocator.instance().getCryptoService(); + blockchainService = ServiceLocator.instance().getBlockchainRemoteService(); } @@ -106,14 +108,15 @@ public class TransactionRemoteServiceImpl extends BaseRemoteServiceImpl implemen Preconditions.checkArgument(peer != null || wallet.getCurrency() != null); peer = peer != null ? peer : peerService.getActivePeerByCurrency(wallet.getCurrency()); + // Get current block - BlockchainBlock currentBlock = httpService.executeRequest(peer, BlockchainRemoteServiceImpl.URL_BLOCK_CURRENT, BlockchainBlock.class); + BlockchainBlock currentBlock = blockchainService.getCurrentBlock(peer, true); // http post /tx/process HttpPost httpPost = new HttpPost(httpService.getPath(peer, URL_TX_PROCESS)); // compute transaction - String transaction = getSignedTransaction(peer, wallet, currentBlock,mapPubkeyAmount , 0, + String transaction = getSignedTransaction(peer, wallet, currentBlock, mapPubkeyAmount , 0, comment); if (log.isDebugEnabled()) { diff --git a/duniter4j-core-client/src/test/java/org/duniter/core/client/service/bma/TransactionRemoteServiceTest.java b/duniter4j-core-client/src/test/java/org/duniter/core/client/service/bma/TransactionRemoteServiceTest.java index 0b465aa0093939a1682d2a8b0eb27c7660df3e31..361e782f5202ff664b8d4fc6a7c729f707a4811d 100644 --- a/duniter4j-core-client/src/test/java/org/duniter/core/client/service/bma/TransactionRemoteServiceTest.java +++ b/duniter4j-core-client/src/test/java/org/duniter/core/client/service/bma/TransactionRemoteServiceTest.java @@ -28,6 +28,8 @@ import com.google.common.collect.Maps; import lombok.extern.slf4j.Slf4j; import org.duniter.core.client.TestResource; import org.duniter.core.client.config.Configuration; +import org.duniter.core.client.model.bma.BlockchainBlock; +import org.duniter.core.client.model.bma.BlockchainBlocks; import org.duniter.core.client.model.bma.TxSource; import org.duniter.core.client.model.local.Peer; import org.duniter.core.client.model.local.Wallet; @@ -48,6 +50,8 @@ public class TransactionRemoteServiceTest { public static final TestResource resource = TestResource.create(); private TransactionRemoteService service; + + private int unitbase; @Before public void setUp() { @@ -57,6 +61,12 @@ public class TransactionRemoteServiceTest { Assume.assumeTrue( "Invalid currencies in test fixtures", Objects.equals(resource.getFixtures().getDefaultCurrency(), resource.getFixtures().getCurrency())); + + // Get the current unit base + BlockchainBlock currentBlock = ServiceLocator.instance().getBlockchainRemoteService() + .getCurrentBlock(resource.getFixtures().getDefaultCurrency()); + Assume.assumeNotNull(currentBlock); + this.unitbase = currentBlock.getUnitbase(); } @Test @@ -64,12 +74,12 @@ public class TransactionRemoteServiceTest { try { service.transfer( - createTestWallet(), - resource.getFixtures().getOtherUserPublicKey(0), - 1, - "my comments" + System.currentTimeMillis()); + createTestWallet(), + resource.getFixtures().getOtherUserPublicKey(0), + BlockchainBlocks.powBase(1, unitbase), + "Unit test Duniter4j at " + System.currentTimeMillis()); } catch (InsufficientCreditException e) { - // OK continue + Assume.assumeNoException(String.format("No credit on the test wallet '%s'", resource.getFixtures().getUserPublicKey().substring(0,8)), e); } } @@ -77,17 +87,17 @@ public class TransactionRemoteServiceTest { public void transferMulti() throws Exception { Map<String, Long> destPubkeyAmount = ImmutableMap.<String, Long>builder() - .put(resource.getFixtures().getOtherUserPublicKey(0), 1l) - .put(resource.getFixtures().getOtherUserPublicKey(1), 2l) + .put(resource.getFixtures().getOtherUserPublicKey(0), BlockchainBlocks.powBase(1, unitbase)) + .put(resource.getFixtures().getOtherUserPublicKey(1), BlockchainBlocks.powBase(2, unitbase)) .build(); try { service.transfer( createTestWallet(), destPubkeyAmount, - "my comments" + System.currentTimeMillis()); + "Unit test Duniter4j at " + System.currentTimeMillis()); } catch (InsufficientCreditException e) { - // OK continue + Assume.assumeNoException(String.format("No credit on the test wallet '%s'", resource.getFixtures().getUserPublicKey().substring(0,8)), e); } }