use of io.nem.symbol.sdk.model.transaction.SecretLockInfo in project nem2-sdk-java by nemtech.
the class SecretLockRepositoryOkHttpImpl method toSecretLockInfo.
private SecretLockInfo toSecretLockInfo(SecretLockInfoDTO dto) {
SecretLockEntryDTO lock = dto.getLock();
MosaicId mosaicId = MapperUtils.toMosaicId(lock.getMosaicId());
return new SecretLockInfo(dto.getId(), ObjectUtils.defaultIfNull(dto.getLock().getVersion(), 1), MapperUtils.toAddress(lock.getOwnerAddress()), mosaicId, lock.getAmount(), lock.getEndHeight(), LockStatus.rawValueOf(lock.getStatus().getValue().byteValue()), LockHashAlgorithm.rawValueOf(lock.getHashAlgorithm().getValue()), lock.getSecret(), MapperUtils.toAddress(lock.getRecipientAddress()), lock.getCompositeHash());
}
use of io.nem.symbol.sdk.model.transaction.SecretLockInfo in project nem2-sdk-java by nemtech.
the class SecretLockRepositoryVertxImplTest method getSecretLock.
@Test
public void getSecretLock() throws Exception {
Address address = Address.generateRandom(this.networkType);
Address recipientAddress = Address.generateRandom(this.networkType);
MosaicId mosaicId = MosaicId.createFromNonce(MosaicNonce.createRandom(), address);
SecretLockEntryDTO lockHashDto = new SecretLockEntryDTO();
lockHashDto.setOwnerAddress(encodeAddress(address));
lockHashDto.setAmount(BigInteger.ONE);
lockHashDto.setEndHeight(BigInteger.TEN);
lockHashDto.setCompositeHash("ABC");
lockHashDto.setRecipientAddress(encodeAddress(recipientAddress));
lockHashDto.setMosaicId(mosaicId.getIdAsHex());
lockHashDto.setVersion(1);
lockHashDto.setStatus(LockStatus.NUMBER_1);
lockHashDto.setHashAlgorithm(LockHashAlgorithmEnum.NUMBER_2);
lockHashDto.setSecret("ABC");
SecretLockInfoDTO hashLockInfoDTO = new SecretLockInfoDTO();
hashLockInfoDTO.setLock(lockHashDto);
hashLockInfoDTO.setId("123");
mockRemoteCall(hashLockInfoDTO);
SecretLockInfo resolvedSecretLockInfo = repository.getSecretLock(lockHashDto.getCompositeHash()).toFuture().get();
Assertions.assertEquals(hashLockInfoDTO.getLock().getSecret(), resolvedSecretLockInfo.getSecret());
Assertions.assertEquals(address, resolvedSecretLockInfo.getOwnerAddress());
Assertions.assertEquals(hashLockInfoDTO.getId(), resolvedSecretLockInfo.getRecordId().get());
Assertions.assertEquals(address, resolvedSecretLockInfo.getOwnerAddress());
Assertions.assertEquals(recipientAddress, resolvedSecretLockInfo.getRecipientAddress());
Assertions.assertEquals(LockHashAlgorithm.HASH_256, resolvedSecretLockInfo.getHashAlgorithm());
Assertions.assertEquals(lockHashDto.getCompositeHash(), resolvedSecretLockInfo.getCompositeHash());
Assertions.assertEquals(io.nem.symbol.sdk.model.transaction.LockStatus.USED, resolvedSecretLockInfo.getStatus());
Assertions.assertEquals(mosaicId, resolvedSecretLockInfo.getMosaicId());
Assertions.assertEquals(lockHashDto.getAmount(), resolvedSecretLockInfo.getAmount());
Assertions.assertEquals(lockHashDto.getEndHeight(), resolvedSecretLockInfo.getEndHeight());
Assertions.assertEquals(lockHashDto.getSecret(), resolvedSecretLockInfo.getSecret());
}
use of io.nem.symbol.sdk.model.transaction.SecretLockInfo in project nem2-sdk-java by nemtech.
the class SecretLockIntegrationTest method secretLockAndProofTransaction.
@ParameterizedTest
@MethodSource("provider")
void secretLockAndProofTransaction(RepositoryType type, LockHashAlgorithm lockHashAlgorithm) {
RepositoryFactory repositoryFactory = getRepositoryFactory(type);
byte[] secretSeed = RandomUtils.generateRandomBytes(20);
String secret = ConvertUtils.toHex(lockHashAlgorithm.hash(secretSeed));
String storedSecret = ConvertUtils.padHex(secret, LockHashAlgorithm.DEFAULT_SECRET_HEX_SIZE);
if (lockHashAlgorithm == LockHashAlgorithm.HASH_160) {
Assertions.assertEquals(LockHashAlgorithm.DEFAULT_SECRET_HEX_SIZE, storedSecret.length());
Assertions.assertEquals(40, secret.length());
} else {
Assertions.assertEquals(LockHashAlgorithm.DEFAULT_SECRET_HEX_SIZE, storedSecret.length());
Assertions.assertEquals(LockHashAlgorithm.DEFAULT_SECRET_HEX_SIZE, secret.length());
}
String proof = ConvertUtils.toHex(secretSeed);
Account account = config().getNemesisAccount1();
Account account2 = config().getNemesisAccount2();
Currency currency = get(repositoryFactory.getNetworkCurrency());
Mosaic mosaic = currency.createAbsolute(BigInteger.valueOf(1));
BigInteger amount = mosaic.getAmount();
BigInteger duration = BigInteger.valueOf(10000);
SecretLockTransaction secretLockTransaction = SecretLockTransactionFactory.create(getNetworkType(), getDeadline(), mosaic, duration, lockHashAlgorithm, secret, account2.getAddress()).maxFee(maxFee).build();
announceAndValidate(type, account, secretLockTransaction);
SecretProofTransaction secretProofTransaction = SecretProofTransactionFactory.create(getNetworkType(), getDeadline(), lockHashAlgorithm, account2.getAddress(), secret, proof).maxFee(maxFee).build();
SecretProofTransaction secretProofTransactionAnnounced = announceAndValidate(type, account, secretProofTransaction);
sleep(500);
Assertions.assertEquals(lockHashAlgorithm, secretProofTransactionAnnounced.getHashType());
Assertions.assertEquals(account2.getAddress(), secretProofTransactionAnnounced.getRecipient());
Assertions.assertEquals(storedSecret, secretProofTransactionAnnounced.getSecret());
Assertions.assertEquals(proof, secretProofTransactionAnnounced.getProof());
SecretLockRepository hashLockRepository = getRepositoryFactory(type).createSecretLockRepository();
SecretLockInfo info = get(hashLockRepository.search(new SecretLockSearchCriteria().address(account.getAddress()).secret(storedSecret))).getData().get(0);
Assertions.assertNotNull(info);
Assertions.assertEquals(account.getAddress(), info.getOwnerAddress());
Assertions.assertEquals(account2.getAddress(), info.getRecipientAddress());
Assertions.assertEquals(amount, info.getAmount());
Assertions.assertEquals(storedSecret, info.getSecret());
Assertions.assertEquals(lockHashAlgorithm, info.getHashAlgorithm());
Assertions.assertEquals(LockStatus.USED, info.getStatus());
Page<SecretLockInfo> page = get(hashLockRepository.search(new SecretLockSearchCriteria().address(account.getAddress()).order(OrderBy.DESC)));
Assertions.assertTrue(page.getData().stream().anyMatch(m -> m.getSecret().equals(storedSecret)));
Assertions.assertEquals(20, page.getPageSize());
SecretLockInfo infoSearch = page.getData().stream().filter(m -> m.getSecret().equals(storedSecret)).findFirst().get();
Assertions.assertNotNull(infoSearch);
Assertions.assertEquals(account.getAddress(), infoSearch.getOwnerAddress());
Assertions.assertEquals(account2.getAddress(), infoSearch.getRecipientAddress());
Assertions.assertEquals(amount, infoSearch.getAmount());
Assertions.assertEquals(lockHashAlgorithm, infoSearch.getHashAlgorithm());
Assertions.assertEquals(LockStatus.USED, infoSearch.getStatus());
Assertions.assertEquals(storedSecret, infoSearch.getSecret());
}
use of io.nem.symbol.sdk.model.transaction.SecretLockInfo in project nem2-sdk-java by nemtech.
the class SecretLockRepositoryIntegrationTest method searchWhenInvalidAddress.
@ParameterizedTest
@EnumSource(RepositoryType.class)
void searchWhenInvalidAddress(RepositoryType type) {
SecretLockRepository repository = getRepositoryFactory(type).createSecretLockRepository();
Address address = Address.generateRandom(getNetworkType());
Page<SecretLockInfo> page = get(repository.search(new SecretLockSearchCriteria().address(address)));
Assertions.assertTrue(page.isLast());
Assertions.assertTrue(page.getData().isEmpty());
Assertions.assertEquals(20, page.getPageSize());
}
Aggregations