Search in sources :

Example 6 with ContractTokenTransferInfoPo

use of io.nuls.contract.dto.ContractTokenTransferInfoPo in project nuls by nuls-io.

the class ContractResultDto method makeTokenTransfers.

private void makeTokenTransfers(List<String> tokenTransferEvents) {
    List<ContractTokenTransferDto> result = new ArrayList<>();
    if (tokenTransferEvents != null && tokenTransferEvents.size() > 0) {
        ContractTokenTransferInfoPo po;
        for (String event : tokenTransferEvents) {
            po = ContractUtil.convertJsonToTokenTransferInfoPo(event);
            if (po != null) {
                result.add(new ContractTokenTransferDto(po));
            }
        }
    }
    this.tokenTransfers = result;
}
Also used : ArrayList(java.util.ArrayList) ContractTokenTransferInfoPo(io.nuls.contract.dto.ContractTokenTransferInfoPo)

Example 7 with ContractTokenTransferInfoPo

use of io.nuls.contract.dto.ContractTokenTransferInfoPo in project nuls by nuls-io.

the class ContractServiceImpl method getTokenTransferInfoList.

@Override
public Result<List<ContractTokenTransferInfoPo>> getTokenTransferInfoList(String address, NulsDigestData hash) {
    try {
        if (hash == null) {
            return Result.getFailed(ContractErrorCode.NULL_PARAMETER);
        }
        Result accountResult = accountService.getAccount(address);
        if (accountResult.isFailed()) {
            return accountResult;
        }
        byte[] addressBytes = AddressTool.getAddress(address);
        List<ContractTokenTransferInfoPo> tokenTransferInfoListByAddress = contractTokenTransferStorageService.getTokenTransferInfoListByAddress(addressBytes, hash.serialize());
        return Result.getSuccess().setData(tokenTransferInfoListByAddress);
    } catch (Exception e) {
        Log.error(e);
        return Result.getFailed();
    }
}
Also used : ContractTokenTransferInfoPo(io.nuls.contract.dto.ContractTokenTransferInfoPo) NulsException(io.nuls.kernel.exception.NulsException) IOException(java.io.IOException) ContractResult(io.nuls.contract.dto.ContractResult) ValidateResult(io.nuls.kernel.validate.ValidateResult) CoinDataResult(io.nuls.account.ledger.model.CoinDataResult)

Example 8 with ContractTokenTransferInfoPo

use of io.nuls.contract.dto.ContractTokenTransferInfoPo in project nuls by nuls-io.

the class ContractUtil method convertJsonToTokenTransferInfoPo.

public static ContractTokenTransferInfoPo convertJsonToTokenTransferInfoPo(String event) {
    if (StringUtils.isBlank(event)) {
        return null;
    }
    ContractTokenTransferInfoPo po;
    try {
        Map<String, Object> eventMap = JSONUtils.json2map(event);
        String eventName = (String) eventMap.get(CONTRACT_EVENT);
        String contractAddress = (String) eventMap.get(CONTRACT_EVENT_ADDRESS);
        po = new ContractTokenTransferInfoPo();
        po.setContractAddress(contractAddress);
        if (NRC20_EVENT_TRANSFER.equals(eventName)) {
            Map<String, Object> data = (Map<String, Object>) eventMap.get(CONTRACT_EVENT_DATA);
            Collection<Object> values = data.values();
            int i = 0;
            String transferEventdata;
            byte[] addressBytes;
            for (Object object : values) {
                transferEventdata = (String) object;
                if (i == 0 || i == 1) {
                    if (AddressTool.validAddress(transferEventdata)) {
                        addressBytes = AddressTool.getAddress(transferEventdata);
                        if (i == 0) {
                            po.setFrom(addressBytes);
                        } else {
                            po.setTo(addressBytes);
                        }
                    }
                }
                if (i == 2) {
                    po.setValue(StringUtils.isBlank(transferEventdata) ? BigInteger.ZERO : new BigInteger(transferEventdata));
                    break;
                }
                i++;
            }
            return po;
        }
        return null;
    } catch (Exception e) {
        Log.error(e);
        return null;
    }
}
Also used : BigInteger(java.math.BigInteger) ContractTokenTransferInfoPo(io.nuls.contract.dto.ContractTokenTransferInfoPo) Map(java.util.Map)

Example 9 with ContractTokenTransferInfoPo

use of io.nuls.contract.dto.ContractTokenTransferInfoPo in project nuls by nuls-io.

the class AccountLedgerResource method getTxInfoList.

@GET
@Path("/tx/list/{address}")
@Produces(MediaType.APPLICATION_JSON)
@ApiOperation(value = "账户地址查询交易列表", notes = "result.data: balanceJson 返回账户相关的交易列表")
@ApiResponses(value = { @ApiResponse(code = 200, message = "success", response = Page.class) })
public RpcClientResult getTxInfoList(@ApiParam(name = "address", value = "账户地址", required = true) @PathParam("address") String address, @ApiParam(name = "assetType", value = "资产类型") @QueryParam("assetType") String assetType, @ApiParam(name = "type", value = "类型") @QueryParam("type") Integer type, @ApiParam(name = "pageNumber", value = "页码") @QueryParam("pageNumber") Integer pageNumber, @ApiParam(name = "pageSize", value = "每页条数") @QueryParam("pageSize") Integer pageSize) {
    if (null == pageNumber || pageNumber == 0) {
        pageNumber = 1;
    }
    if (null == pageSize || pageSize == 0) {
        pageSize = 10;
    }
    if (pageNumber < 0 || pageSize < 0 || pageSize > 100) {
        return Result.getFailed(KernelErrorCode.PARAMETER_ERROR).toRpcClientResult();
    }
    if (type == null || type <= 0) {
        type = -1;
    }
    byte[] addressBytes = null;
    Result dtoResult = Result.getSuccess();
    try {
        addressBytes = AddressTool.getAddress(address.trim());
    } catch (Exception e) {
        return Result.getFailed(AccountLedgerErrorCode.PARAMETER_ERROR).toRpcClientResult();
    }
    List<TransactionInfo> result = new ArrayList<TransactionInfo>();
    boolean isEmptyAssetType = StringUtils.isBlank(assetType);
    boolean isNeedQueryToken = StringUtils.isBlank(assetType) || AddressTool.validAddress(assetType);
    boolean isNeedQueryNuls = StringUtils.isBlank(assetType) || "NULS".equals(assetType);
    Set<String> hashCheckSet = MapUtil.createHashSet(8);
    // 合约token代币转账交易记录
    if (isNeedQueryToken) {
        Result<List<ContractTokenTransferInfoPo>> listResult = contractService.getTokenTransferInfoList(address);
        List<ContractTokenTransferInfoPo> list = listResult.getData();
        if (list != null && list.size() > 0) {
            List<ContractTokenTransferInfoPo> tokenInfoList = null;
            if (!isEmptyAssetType) {
                String contractAddress = assetType;
                if (AddressTool.validAddress(contractAddress)) {
                    tokenInfoList = list.stream().filter(po -> contractAddress.equals(po.getContractAddress())).collect(Collectors.toList());
                }
            } else {
                tokenInfoList = list;
            }
            TransactionInfo info = null;
            if (null != tokenInfoList) {
                for (ContractTokenTransferInfoPo po : tokenInfoList) {
                    info = new TransactionInfo();
                    // 临时type,用于区分资产类型 - 基础币和代币
                    info.setTxType(1000);
                    NulsDigestData hashData = new NulsDigestData();
                    try {
                        hashData.parse(po.getTxHash(), 0);
                    } catch (NulsException e) {
                        Log.error(e);
                    // skip it
                    }
                    info.setTxHash(hashData);
                    info.setContractAddress(AddressTool.getAddress(po.getContractAddress()));
                    info.setTime(po.getTime());
                    info.setBlockHeight(po.getBlockHeight());
                    info.setStatus(po.getStatus());
                    info.setInfo(po.getInfo(addressBytes));
                    info.setSymbol(po.getSymbol());
                    result.add(info);
                    hashCheckSet.add(hashData.getDigestHex());
                }
            }
        }
    }
    // 基础币交易记录
    if (isNeedQueryNuls) {
        Result<List<TransactionInfo>> rawResult = accountLedgerService.getTxInfoList(addressBytes);
        if (rawResult.isFailed()) {
            dtoResult.setSuccess(false);
            dtoResult.setErrorCode(rawResult.getErrorCode());
            return dtoResult.toRpcClientResult();
        }
        List<TransactionInfo> infoList = rawResult.getData();
        if (infoList != null && infoList.size() > 0) {
            // 过滤掉既是调用合约的交易类型,又是代币转账类型的交易
            List<TransactionInfo> baseList = infoList.stream().filter(info -> hashCheckSet.add(info.getTxHash().getDigestHex())).collect(Collectors.toList());
            if (type == -1) {
                result.addAll(baseList);
            } else {
                for (TransactionInfo txInfo : baseList) {
                    if (txInfo.getTxType() == type) {
                        result.add(txInfo);
                    }
                }
            }
        }
    }
    result.sort(new Comparator<TransactionInfo>() {

        @Override
        public int compare(TransactionInfo o1, TransactionInfo o2) {
            return o1.compareTo(o2.getTime());
        }
    });
    Page<TransactionInfoDto> page = new Page<>(pageNumber, pageSize, result.size());
    int start = pageNumber * pageSize - pageSize;
    if (start >= page.getTotal()) {
        dtoResult.setData(page);
        return dtoResult.toRpcClientResult();
    }
    int end = start + pageSize;
    if (end > page.getTotal()) {
        end = (int) page.getTotal();
    }
    List<TransactionInfoDto> infoDtoList = new ArrayList<>();
    for (int i = start; i < end; i++) {
        TransactionInfo info = result.get(i);
        Transaction tx = ledgerService.getTx(info.getTxHash());
        if (tx == null) {
            tx = accountLedgerService.getUnconfirmedTransaction(info.getTxHash()).getData();
        }
        if (tx == null) {
            continue;
        }
        info.setBlockHeight(tx.getBlockHeight());
        // 非合约Token转账
        if (info.getTxType() != 1000) {
            info.setInfo(tx.getInfo(addressBytes));
        }
        infoDtoList.add(new TransactionInfoDto(info));
    }
    page.setList(infoDtoList);
    dtoResult.setSuccess(true);
    dtoResult.setData(page);
    return dtoResult.toRpcClientResult();
}
Also used : io.nuls.accout.ledger.rpc.form(io.nuls.accout.ledger.rpc.form) Output(io.protostuff.Output) ECKey(io.nuls.core.tools.crypto.ECKey) StringUtils(io.nuls.core.tools.str.StringUtils) CryptoException(io.nuls.core.tools.crypto.Exception.CryptoException) MediaType(javax.ws.rs.core.MediaType) UtxoDtoComparator(io.nuls.accout.ledger.rpc.util.UtxoDtoComparator) AccountTool(io.nuls.account.util.AccountTool) NulsContext(io.nuls.kernel.context.NulsContext) Page(io.nuls.core.tools.page.Page) io.swagger.annotations(io.swagger.annotations) BigInteger(java.math.BigInteger) SignatureUtil(io.nuls.kernel.script.SignatureUtil) TransferTransaction(io.nuls.protocol.model.tx.TransferTransaction) AccountLedgerErrorCode(io.nuls.account.ledger.constant.AccountLedgerErrorCode) TransactionSignature(io.nuls.kernel.script.TransactionSignature) CoinDataTool(io.nuls.account.ledger.util.CoinDataTool) TxStatusEnum(io.nuls.kernel.constant.TxStatusEnum) Collectors(java.util.stream.Collectors) ProtocolConstant(io.nuls.protocol.constant.ProtocolConstant) Arrays(org.spongycastle.util.Arrays) AccountService(io.nuls.account.service.AccountService) MultipleAddressTransferModel(io.nuls.account.ledger.model.MultipleAddressTransferModel) NulsException(io.nuls.kernel.exception.NulsException) javax.ws.rs(javax.ws.rs) AESEncrypt(io.nuls.core.tools.crypto.AESEncrypt) Autowired(io.nuls.kernel.lite.annotation.Autowired) ContractTokenTransferInfoPo(io.nuls.contract.dto.ContractTokenTransferInfoPo) TxMaxSizeValidator(io.nuls.protocol.model.validator.TxMaxSizeValidator) UnsupportedEncodingException(java.io.UnsupportedEncodingException) LedgerService(io.nuls.ledger.service.LedgerService) java.util(java.util) TimeService(io.nuls.kernel.func.TimeService) Script(io.nuls.kernel.script.Script) AccountLedgerService(io.nuls.account.ledger.service.AccountLedgerService) io.nuls.kernel.utils(io.nuls.kernel.utils) P2PHKSignature(io.nuls.kernel.script.P2PHKSignature) LedgerRpcUtil(io.nuls.accout.ledger.rpc.util.LedgerRpcUtil) Component(io.nuls.kernel.lite.annotation.Component) io.nuls.kernel.model(io.nuls.kernel.model) ValidateResult(io.nuls.kernel.validate.ValidateResult) AccountLegerUtils(io.nuls.account.ledger.base.util.AccountLegerUtils) AccountErrorCode(io.nuls.account.constant.AccountErrorCode) NulsConstant(io.nuls.kernel.constant.NulsConstant) CoinDataResult(io.nuls.account.ledger.model.CoinDataResult) MapUtil(io.nuls.core.tools.map.MapUtil) KernelErrorCode(io.nuls.kernel.constant.KernelErrorCode) TransactionErrorCode(io.nuls.kernel.constant.TransactionErrorCode) io.nuls.accout.ledger.rpc.dto(io.nuls.accout.ledger.rpc.dto) CoinComparator(io.nuls.account.ledger.base.util.CoinComparator) NulsRuntimeException(io.nuls.kernel.exception.NulsRuntimeException) TransactionInfo(io.nuls.account.ledger.model.TransactionInfo) NulsConfig(io.nuls.kernel.cfg.NulsConfig) IOException(java.io.IOException) Log(io.nuls.core.tools.log.Log) ConvertCoinTool(io.nuls.accout.ledger.rpc.util.ConvertCoinTool) ContractService(io.nuls.contract.service.ContractService) Hex(io.nuls.core.tools.crypto.Hex) LedgerErrorCode(io.nuls.ledger.constant.LedgerErrorCode) LocalUtxoService(io.nuls.account.ledger.base.service.LocalUtxoService) Balance(io.nuls.account.model.Balance) Page(io.nuls.core.tools.page.Page) ValidateResult(io.nuls.kernel.validate.ValidateResult) CoinDataResult(io.nuls.account.ledger.model.CoinDataResult) NulsException(io.nuls.kernel.exception.NulsException) TransactionInfo(io.nuls.account.ledger.model.TransactionInfo) ContractTokenTransferInfoPo(io.nuls.contract.dto.ContractTokenTransferInfoPo) CryptoException(io.nuls.core.tools.crypto.Exception.CryptoException) NulsException(io.nuls.kernel.exception.NulsException) UnsupportedEncodingException(java.io.UnsupportedEncodingException) NulsRuntimeException(io.nuls.kernel.exception.NulsRuntimeException) IOException(java.io.IOException) TransferTransaction(io.nuls.protocol.model.tx.TransferTransaction)

Example 10 with ContractTokenTransferInfoPo

use of io.nuls.contract.dto.ContractTokenTransferInfoPo in project nuls by nuls-io.

the class ContractTokenTransferStorageServiceImpl method getTokenTransferInfoListByAddress.

@Override
public List<ContractTokenTransferInfoPo> getTokenTransferInfoListByAddress(byte[] address, byte[] txHash) {
    List<ContractTokenTransferInfoPo> infoPoList = new ArrayList<>();
    List<byte[]> keyList = dbService.keyList(this.area);
    if (keyList == null || keyList.isEmpty()) {
        return infoPoList;
    }
    ContractTokenTransferInfoPo tokenTransferInfoPo;
    for (byte[] key : keyList) {
        if (isAddressAndHashEquals(key, address, txHash)) {
            tokenTransferInfoPo = dbService.getModel(this.area, key, ContractTokenTransferInfoPo.class);
            infoPoList.add(tokenTransferInfoPo);
        }
    }
    return infoPoList;
}
Also used : ArrayList(java.util.ArrayList) ContractTokenTransferInfoPo(io.nuls.contract.dto.ContractTokenTransferInfoPo)

Aggregations

ContractTokenTransferInfoPo (io.nuls.contract.dto.ContractTokenTransferInfoPo)13 IOException (java.io.IOException)8 ContractResult (io.nuls.contract.dto.ContractResult)7 NulsException (io.nuls.kernel.exception.NulsException)7 ContractAddressInfoPo (io.nuls.contract.storage.po.ContractAddressInfoPo)6 VarInt (io.nuls.kernel.utils.VarInt)6 ValidateResult (io.nuls.kernel.validate.ValidateResult)5 CoinDataResult (io.nuls.account.ledger.model.CoinDataResult)4 BigInteger (java.math.BigInteger)3 ContractTransferTransaction (io.nuls.contract.entity.tx.ContractTransferTransaction)2 CreateContractTransaction (io.nuls.contract.entity.tx.CreateContractTransaction)2 CallContractData (io.nuls.contract.entity.txdata.CallContractData)2 ContractData (io.nuls.contract.entity.txdata.ContractData)2 CreateContractData (io.nuls.contract.entity.txdata.CreateContractData)2 NulsRuntimeException (io.nuls.kernel.exception.NulsRuntimeException)2 UnsupportedEncodingException (java.io.UnsupportedEncodingException)2 ArrayList (java.util.ArrayList)2 AccountErrorCode (io.nuls.account.constant.AccountErrorCode)1 LocalUtxoService (io.nuls.account.ledger.base.service.LocalUtxoService)1 AccountLegerUtils (io.nuls.account.ledger.base.util.AccountLegerUtils)1