Search in sources :

Example 1 with ContractTransfer

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

the class ContractResultDto method setOrginTransfers.

public void setOrginTransfers(List<ContractTransfer> transfers) {
    List<ContractTransferDto> list = new LinkedList<>();
    this.transfers = list;
    if (transfers == null || transfers.size() == 0) {
        return;
    }
    for (ContractTransfer transfer : transfers) {
        list.add(new ContractTransferDto(transfer));
    }
}
Also used : ContractTransfer(io.nuls.contract.dto.ContractTransfer) LinkedList(java.util.LinkedList)

Example 2 with ContractTransfer

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

the class BlockServiceImpl method contractTransfer.

private void contractTransfer(Transaction tx, List<Transaction> txList) {
    if (tx instanceof CallContractTransaction) {
        CallContractTransaction callTx = (CallContractTransaction) tx;
        ContractResult contractResult = callTx.getContractResult();
        if (contractResult != null) {
            List<ContractTransfer> transfers = contractResult.getTransfers();
            // 合约调用交易存在合约转账(从合约转出)交易,则从全网账本中查出完整交易添加到交易集合中
            if (transfers != null && transfers.size() > 0) {
                for (ContractTransfer transfer : transfers) {
                    Transaction contractTx = ledgerService.getTx(transfer.getHash());
                    if (contractTx != null) {
                        txList.add(contractTx);
                    }
                }
            }
        }
    }
}
Also used : ContractResult(io.nuls.contract.dto.ContractResult) ContractTransferTransaction(io.nuls.contract.entity.tx.ContractTransferTransaction) CallContractTransaction(io.nuls.contract.entity.tx.CallContractTransaction) ContractTransfer(io.nuls.contract.dto.ContractTransfer) CallContractTransaction(io.nuls.contract.entity.tx.CallContractTransaction)

Example 3 with ContractTransfer

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

the class ContractServiceImpl method refreshTempBalance.

private void refreshTempBalance(CallContractTransaction callContractTransaction, ContractResult contractExecutedResult, Long height) {
    CallContractData callContractData = callContractTransaction.getTxData();
    byte[] contractAddress = callContractData.getContractAddress();
    BigInteger preBalance = vmContext.getBalance(contractAddress, height);
    contractExecutedResult.setPreBalance(preBalance);
    // 增加转入
    long value = callContractData.getValue();
    if (value > 0) {
        contractBalanceManager.addTempBalance(contractAddress, Na.valueOf(value));
    }
    // 增加转入, 扣除转出
    List<ContractTransfer> transfers = contractExecutedResult.getTransfers();
    if (transfers != null && transfers.size() > 0) {
        LinkedHashMap<String, Na>[] contracts = this.filterContractNa(transfers);
        LinkedHashMap<String, Na> contractOutNa = contracts[0];
        LinkedHashMap<String, Na> contractInNa = contracts[1];
        byte[] contractBytes;
        Set<Map.Entry<String, Na>> ins = contractInNa.entrySet();
        for (Map.Entry<String, Na> in : ins) {
            contractBytes = asBytes(in.getKey());
            vmContext.getBalance(contractBytes, height);
            contractBalanceManager.addTempBalance(contractBytes, in.getValue());
        }
        Set<Map.Entry<String, Na>> outs = contractOutNa.entrySet();
        for (Map.Entry<String, Na> out : outs) {
            contractBytes = asBytes(out.getKey());
            vmContext.getBalance(contractBytes, height);
            contractBalanceManager.minusTempBalance(contractBytes, out.getValue());
        }
    }
}
Also used : ContractTransfer(io.nuls.contract.dto.ContractTransfer) LedgerUtil.asString(io.nuls.ledger.util.LedgerUtil.asString) BigInteger(java.math.BigInteger)

Example 4 with ContractTransfer

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

the class CallContractTransaction method getAllRelativeAddress.

@Override
public List<byte[]> getAllRelativeAddress() {
    if (contractResult == null && contractService != null) {
        contractResult = contractService.getContractExecuteResult(this.hash);
    }
    if (contractResult != null) {
        List<byte[]> relativeAddress = super.getAllRelativeAddress();
        if (relativeAddress == null) {
            return new ArrayList<>();
        }
        if (relativeAddress.size() == 0) {
            return relativeAddress;
        }
        HashSet<ByteArrayWrapper> addressesSet = MapUtil.createHashSet(relativeAddress.size());
        relativeAddress.stream().forEach(address -> addressesSet.add(new ByteArrayWrapper(address)));
        // 合约转账(从合约转出)
        List<ContractTransfer> transfers = contractResult.getTransfers();
        if (transfers != null && transfers.size() > 0) {
            for (ContractTransfer transfer : transfers) {
                addressesSet.add(new ByteArrayWrapper(transfer.getFrom()));
                addressesSet.add(new ByteArrayWrapper(transfer.getTo()));
            }
        }
        // 解析合约事件中的合约地址
        List<byte[]> parseEventContractList = this.parseEventContract(contractResult.getEvents());
        for (byte[] contract : parseEventContractList) {
            addressesSet.add(new ByteArrayWrapper(contract));
        }
        List<byte[]> resultList = new ArrayList<>();
        for (ByteArrayWrapper wrapper : addressesSet) {
            resultList.add(wrapper.getBytes());
        }
        return resultList;
    } else {
        return super.getAllRelativeAddress();
    }
}
Also used : ByteArrayWrapper(io.nuls.kernel.utils.ByteArrayWrapper) ContractTransfer(io.nuls.contract.dto.ContractTransfer)

Example 5 with ContractTransfer

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

the class UtxoAccountsServiceImpl method buildContractTranfersBalance.

/**
 * @param utxoAccountsMap
 * @param transferList
 * @param blockHeight
 * @param txIndex
 */
private void buildContractTranfersBalance(Map<String, UtxoAccountsBalancePo> utxoAccountsMap, List<ContractTransfer> transferList, long blockHeight, int txIndex) {
    for (ContractTransfer contractTransfer : transferList) {
        byte[] from = contractTransfer.getFrom();
        byte[] to = contractTransfer.getTo();
        String addressFrom = AddressTool.getStringAddressByBytes(from);
        String addressTo = AddressTool.getStringAddressByBytes(to);
        UtxoAccountsBalancePo balanceFrom = utxoAccountsMap.get(addressFrom);
        UtxoAccountsBalancePo balanceTo = utxoAccountsMap.get(addressTo);
        if (null == balanceFrom) {
            balanceFrom = new UtxoAccountsBalancePo();
            balanceFrom.setOwner(from);
            utxoAccountsMap.put(addressFrom, balanceFrom);
        }
        balanceFrom.setBlockHeight(blockHeight);
        balanceFrom.setTxIndex(txIndex);
        balanceFrom.setContractFromBalance(balanceFrom.getContractFromBalance() + contractTransfer.getValue().getValue());
        if (null == balanceTo) {
            balanceTo = new UtxoAccountsBalancePo();
            balanceTo.setOwner(to);
            utxoAccountsMap.put(addressTo, balanceTo);
        }
        balanceTo.setBlockHeight(blockHeight);
        balanceTo.setTxIndex(txIndex);
        balanceTo.setContractToBalance(balanceTo.getContractToBalance() + contractTransfer.getValue().getValue());
    }
}
Also used : UtxoAccountsBalancePo(io.nuls.utxo.accounts.storage.po.UtxoAccountsBalancePo) ContractTransfer(io.nuls.contract.dto.ContractTransfer)

Aggregations

ContractTransfer (io.nuls.contract.dto.ContractTransfer)10 LedgerUtil.asString (io.nuls.ledger.util.LedgerUtil.asString)4 ContractResult (io.nuls.contract.dto.ContractResult)2 BigInteger (java.math.BigInteger)2 CoinDataResult (io.nuls.account.ledger.model.CoinDataResult)1 CallContractTransaction (io.nuls.contract.entity.tx.CallContractTransaction)1 ContractTransferTransaction (io.nuls.contract.entity.tx.ContractTransferTransaction)1 NulsException (io.nuls.kernel.exception.NulsException)1 ByteArrayWrapper (io.nuls.kernel.utils.ByteArrayWrapper)1 ValidateResult (io.nuls.kernel.validate.ValidateResult)1 UtxoAccountsBalancePo (io.nuls.utxo.accounts.storage.po.UtxoAccountsBalancePo)1 LinkedList (java.util.LinkedList)1