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));
}
}
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);
}
}
}
}
}
}
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());
}
}
}
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();
}
}
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());
}
}
Aggregations