Search in sources :

Example 1 with OwnedMosaicsResponse

use of com.github.rosklyar.client.account.domain.mosaic.OwnedMosaicsResponse in project nem-library by rosklyar.

the class DefaultFeeCalculator method mosaicFee.

private long mosaicFee(MosaicTransfer mosaicTransfer, int times) {
    String namespaceId = mosaicTransfer.mosaicId.namespaceId;
    String mosaicName = mosaicTransfer.mosaicId.name;
    MosaicsMetaDataResponse mosaicsMetaDataResponse = mosaicClient.mosaics(namespaceId, null, 100);
    MosaicMetaData mosaicMetaData = mosaicsMetaDataResponse.data.stream().filter(mmd -> mmd.mosaic.id.name.equals(mosaicName)).findFirst().orElseThrow(() -> new RuntimeException(String.format("No mosaic definition with name=%s found in namespace=%s", mosaicName, namespaceId)));
    int divisibility = mosaicMetaData.mosaic.properties.stream().filter(pr -> pr.name.equals("divisibility")).findFirst().map(pr -> Integer.valueOf(pr.value)).orElseThrow(RuntimeException::new);
    OwnedMosaicsResponse ownedMosaicsResponse = accountClient.ownedMosaics(accountClient.getFromPublicKey(mosaicMetaData.mosaic.creator).account.address);
    long mosaicQuantity = ownedMosaicsResponse.data.stream().filter(ownedMosaic -> ownedMosaic.mosaicId.name.equals(mosaicName)).findFirst().map(ownedMosaic -> ownedMosaic.quantity).orElseThrow(RuntimeException::new);
    if (isSmallBusinessMosaic(divisibility, mosaicQuantity)) {
        return 1L;
    }
    long supplyRelatedAdjustment = roundToLong(0.8 * log(valueOf(maxMosaicQuantity).divide(valueOf(mosaicQuantity)).doubleValue()), DOWN);
    long xemEquivalent = roundToLong(valueOf(8999999999L * mosaicTransfer.quantity * times).divide(valueOf(mosaicQuantity)).doubleValue(), DOWN);
    long microXemEquivalent = xemEquivalent * TEN.pow(nemDivisibility).longValue();
    long xemFee = calculateXemTransferFee(microXemEquivalent);
    return max(1L, xemFee - supplyRelatedAdjustment);
}
Also used : AccountClient(com.github.rosklyar.client.account.AccountClient) DOWN(java.math.RoundingMode.DOWN) Strings.isNullOrEmpty(com.google.common.base.Strings.isNullOrEmpty) MosaicClient(com.github.rosklyar.client.mosaic.MosaicClient) MosaicMetaData(com.github.rosklyar.client.mosaic.domain.MosaicMetaData) MosaicTransfer(com.github.rosklyar.client.transaction.domain.mosaic.MosaicTransfer) BigInteger.valueOf(java.math.BigInteger.valueOf) List(java.util.List) TEN(java.math.BigInteger.TEN) MosaicsMetaDataResponse(com.github.rosklyar.client.mosaic.domain.MosaicsMetaDataResponse) Math(java.lang.Math) DoubleMath.roundToLong(com.google.common.math.DoubleMath.roundToLong) OwnedMosaicsResponse(com.github.rosklyar.client.account.domain.mosaic.OwnedMosaicsResponse) MosaicMetaData(com.github.rosklyar.client.mosaic.domain.MosaicMetaData) MosaicsMetaDataResponse(com.github.rosklyar.client.mosaic.domain.MosaicsMetaDataResponse) OwnedMosaicsResponse(com.github.rosklyar.client.account.domain.mosaic.OwnedMosaicsResponse)

Example 2 with OwnedMosaicsResponse

use of com.github.rosklyar.client.account.domain.mosaic.OwnedMosaicsResponse in project nem-library by rosklyar.

the class AccountClientTest method getOwnedMosaics.

@Test
void getOwnedMosaics() {
    List<OwnedMosaic> expectedOwnedMosaics = new ArrayList<>();
    expectedOwnedMosaics.add(new OwnedMosaic(new MosaicId("nem", "xem"), 13000000));
    OwnedMosaicsResponse ownedMosaicsResponse = accountClient.ownedMosaics(address);
    assertEquals(expectedOwnedMosaics, ownedMosaicsResponse.data);
}
Also used : OwnedMosaic(com.github.rosklyar.client.account.domain.mosaic.OwnedMosaic) MosaicId(com.github.rosklyar.client.transaction.domain.mosaic.MosaicId) ArrayList(java.util.ArrayList) OwnedMosaicsResponse(com.github.rosklyar.client.account.domain.mosaic.OwnedMosaicsResponse) Test(org.junit.jupiter.api.Test)

Aggregations

OwnedMosaicsResponse (com.github.rosklyar.client.account.domain.mosaic.OwnedMosaicsResponse)2 AccountClient (com.github.rosklyar.client.account.AccountClient)1 OwnedMosaic (com.github.rosklyar.client.account.domain.mosaic.OwnedMosaic)1 MosaicClient (com.github.rosklyar.client.mosaic.MosaicClient)1 MosaicMetaData (com.github.rosklyar.client.mosaic.domain.MosaicMetaData)1 MosaicsMetaDataResponse (com.github.rosklyar.client.mosaic.domain.MosaicsMetaDataResponse)1 MosaicId (com.github.rosklyar.client.transaction.domain.mosaic.MosaicId)1 MosaicTransfer (com.github.rosklyar.client.transaction.domain.mosaic.MosaicTransfer)1 Strings.isNullOrEmpty (com.google.common.base.Strings.isNullOrEmpty)1 DoubleMath.roundToLong (com.google.common.math.DoubleMath.roundToLong)1 Math (java.lang.Math)1 TEN (java.math.BigInteger.TEN)1 BigInteger.valueOf (java.math.BigInteger.valueOf)1 DOWN (java.math.RoundingMode.DOWN)1 ArrayList (java.util.ArrayList)1 List (java.util.List)1 Test (org.junit.jupiter.api.Test)1