All Downloads are FREE. Search and download functionalities are using the official Maven repository.

software.crldev.elrondspringbootstarterreactive.domain.esdt.ESDTNFTMultiTransfer Maven / Gradle / Ivy

Go to download

A SpringBoot Starter solution designed to ensure easy and efficient integration with the Elrond Network using a Reactive API layer.

The newest version!
package software.crldev.elrondspringbootstarterreactive.domain.esdt;

import lombok.NonNull;
import software.crldev.elrondspringbootstarterreactive.domain.account.Address;
import software.crldev.elrondspringbootstarterreactive.domain.common.Balance;
import software.crldev.elrondspringbootstarterreactive.domain.esdt.ESDTTransaction;
import software.crldev.elrondspringbootstarterreactive.domain.esdt.common.TransferToken;
import software.crldev.elrondspringbootstarterreactive.domain.transaction.GasLimit;
import software.crldev.elrondspringbootstarterreactive.domain.transaction.PayloadData;
import software.crldev.elrondspringbootstarterreactive.domain.wallet.Wallet;
import software.crldev.elrondspringbootstarterreactive.interactor.transaction.TransactionRequest;
import java.util.List;
import java.util.stream.Collectors;
import static java.lang.String.format;
import static software.crldev.elrondspringbootstarterreactive.config.constants.ESDTConstants.ESDT_MULTI_TRANSFER_CALL;
import static software.crldev.elrondspringbootstarterreactive.util.HexValidator.processNumberHexArgument;

/**
 * Value object for multi ESDT transfer
 *
 * @author carlo_stanciu
 */
public final class ESDTNFTMultiTransfer implements ESDTTransaction {
    @NonNull
    private final Address receiverAddress;
    @NonNull
    private final List tokenList;

    private PayloadData processPayloadData() {
        return PayloadData.fromString(format("%s@%s@%s@%s", ESDT_MULTI_TRANSFER_CALL, receiverAddress.getHex(), processNumberHexArgument(Integer.toString(tokenList.size(), 16)), processTokenList()));
    }

    @Override
    public TransactionRequest toTransactionRequest(Wallet wallet) {
        return TransactionRequest.builder().receiverAddress(wallet.getAddress()).data(processPayloadData()).value(Balance.zero()).gasLimit(GasLimit.multiEsdtTransfer(tokenList.size())).build();
    }

    private String processTokenList() {
        return tokenList.stream().map(t -> t.getIdentifier().getHex() + "@" + t.getNonce().getHex() + "@" + t.getAmount().getHex()).collect(Collectors.joining("@"));
    }

    ESDTNFTMultiTransfer(@NonNull final Address receiverAddress, @NonNull final List tokenList) {
        if (receiverAddress == null) {
            throw new NullPointerException("receiverAddress is marked non-null but is null");
        }
        if (tokenList == null) {
            throw new NullPointerException("tokenList is marked non-null but is null");
        }
        this.receiverAddress = receiverAddress;
        this.tokenList = tokenList;
    }


    public static class ESDTNFTMultiTransferBuilder {
        private Address receiverAddress;
        private List tokenList;

        ESDTNFTMultiTransferBuilder() {
        }

        /**
         * @return {@code this}.
         */
        public ESDTNFTMultiTransfer.ESDTNFTMultiTransferBuilder receiverAddress(@NonNull final Address receiverAddress) {
            if (receiverAddress == null) {
                throw new NullPointerException("receiverAddress is marked non-null but is null");
            }
            this.receiverAddress = receiverAddress;
            return this;
        }

        /**
         * @return {@code this}.
         */
        public ESDTNFTMultiTransfer.ESDTNFTMultiTransferBuilder tokenList(@NonNull final List tokenList) {
            if (tokenList == null) {
                throw new NullPointerException("tokenList is marked non-null but is null");
            }
            this.tokenList = tokenList;
            return this;
        }

        public ESDTNFTMultiTransfer build() {
            return new ESDTNFTMultiTransfer(this.receiverAddress, this.tokenList);
        }

        @Override
        public String toString() {
            return "ESDTNFTMultiTransfer.ESDTNFTMultiTransferBuilder(receiverAddress=" + this.receiverAddress + ", tokenList=" + this.tokenList + ")";
        }
    }

    public static ESDTNFTMultiTransfer.ESDTNFTMultiTransferBuilder builder() {
        return new ESDTNFTMultiTransfer.ESDTNFTMultiTransferBuilder();
    }

    @NonNull
    public Address getReceiverAddress() {
        return this.receiverAddress;
    }

    @NonNull
    public List getTokenList() {
        return this.tokenList;
    }

    @Override
    public boolean equals(final Object o) {
        if (o == this) return true;
        if (!(o instanceof ESDTNFTMultiTransfer)) return false;
        final ESDTNFTMultiTransfer other = (ESDTNFTMultiTransfer) o;
        final Object this$receiverAddress = this.getReceiverAddress();
        final Object other$receiverAddress = other.getReceiverAddress();
        if (this$receiverAddress == null ? other$receiverAddress != null : !this$receiverAddress.equals(other$receiverAddress)) return false;
        final Object this$tokenList = this.getTokenList();
        final Object other$tokenList = other.getTokenList();
        if (this$tokenList == null ? other$tokenList != null : !this$tokenList.equals(other$tokenList)) return false;
        return true;
    }

    @Override
    public int hashCode() {
        final int PRIME = 59;
        int result = 1;
        final Object $receiverAddress = this.getReceiverAddress();
        result = result * PRIME + ($receiverAddress == null ? 43 : $receiverAddress.hashCode());
        final Object $tokenList = this.getTokenList();
        result = result * PRIME + ($tokenList == null ? 43 : $tokenList.hashCode());
        return result;
    }

    @Override
    public String toString() {
        return "ESDTNFTMultiTransfer(receiverAddress=" + this.getReceiverAddress() + ", tokenList=" + this.getTokenList() + ")";
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy