use of io.nuls.kernel.model.Na in project nuls by nuls-io.
the class ContractTransferTransaction method getFee.
@Override
public Na getFee() {
ContractTransferData data = this.txData;
byte success = data.getSuccess();
// 合约执行成功的内部转账,手续费已从Gas中扣除,此处不在收取手续费
if (success == 1) {
return Na.ZERO;
}
// 合约执行失败,退回调用者向合约地址转入的资金,需要额外收取手续费
Na fee = Na.ZERO;
if (null != coinData) {
fee = coinData.getFee();
}
return fee;
}
use of io.nuls.kernel.model.Na in project nuls by nuls-io.
the class PocRewardCacheService method addRewardItem.
private void addRewardItem(long height, long time, Coin coin, long startTime) {
// String address = AddressTool.getStringAddressByBytes(coin.());
String address = AddressTool.getStringAddressByBytes(coin.getAddress());
Map<Long, RewardItem> map = todayRewardMap.get(address);
if (null == map) {
map = new HashMap<>();
todayRewardMap.put(address, map);
}
if (time > startTime) {
map.put(height, new RewardItem(time, coin.getNa()));
}
Na tna = todayMap.get(address);
if (tna == null) {
tna = Na.ZERO;
}
tna = tna.add(coin.getNa());
todayMap.put(address, tna);
Na na = totalMap.get(address);
if (na == null) {
na = Na.ZERO;
}
na = na.add(coin.getNa());
totalMap.put(address, na);
if (height > totalRewardHeight) {
totalReward = totalReward.add(coin.getNa());
}
}
use of io.nuls.kernel.model.Na in project nuls by nuls-io.
the class PocRewardCacheService method rollback.
public void rollback(Block block) {
if (block.getHeader().getHeight() > endHeight) {
return;
}
CoinBaseTransaction tx = (CoinBaseTransaction) block.getTxs().get(0);
if (null != tx.getCoinData().getTo() && !tx.getCoinData().getTo().isEmpty()) {
for (Coin coin : tx.getCoinData().getTo()) {
// String address = AddressTool.getStringAddressByBytes(coin.());
String address = AddressTool.getStringAddressByBytes(coin.getAddress());
Map<Long, RewardItem> map = todayRewardMap.get(address);
if (null == map) {
continue;
}
map.remove(block.getHeader().getHeight());
Na na = totalMap.get(address);
if (na == null) {
continue;
}
na = na.subtract(coin.getNa());
todayMap.put(address, na);
}
}
if (endHeight == block.getHeader().getHeight()) {
endHeight = block.getHeader().getHeight() - 1;
}
}
use of io.nuls.kernel.model.Na in project nuls by nuls-io.
the class PocRewardCacheService method calcRewards.
public void calcRewards() {
List<String> list = new ArrayList<>(todayRewardMap.keySet());
Na na = Na.ZERO;
Map<String, Na> resultMap = new HashMap<>();
long startTime = TimeService.currentTimeMillis() - 24 * 3600000L;
for (String address : list) {
Na reward = Na.ZERO;
List<RewardItem> rewardItems = new ArrayList<>(todayRewardMap.get(address).values());
for (RewardItem item : rewardItems) {
if (item.getTime() < startTime) {
continue;
}
reward = reward.add(item.getNa());
}
na = na.add(reward);
resultMap.put(address, reward);
}
this.todayReward = na;
this.todayMap = resultMap;
}
use of io.nuls.kernel.model.Na in project nuls by nuls-io.
the class UtxoResource method getUtxoByAddressAndAmount.
@GET
@Path("/amount/{address}/{amount}")
@Produces(MediaType.APPLICATION_JSON)
@ApiOperation(value = "根据address和amount查询UTXO")
@ApiResponses(value = { @ApiResponse(code = 200, message = "success", response = AccountUtxoDto.class) })
public RpcClientResult getUtxoByAddressAndAmount(@ApiParam(name = "address", value = "地址", required = true) @PathParam("address") String address, @ApiParam(name = "amount", value = "金额", required = true) @PathParam("amount") Long amount) {
if (StringUtils.isBlank(address) || amount == null) {
return Result.getFailed(LedgerErrorCode.NULL_PARAMETER).toRpcClientResult();
}
if (!AddressTool.validAddress(address)) {
return Result.getFailed(LedgerErrorCode.PARAMETER_ERROR).toRpcClientResult();
}
Result result = null;
try {
List<Coin> coinList = getAllUtxoByAddress(address);
Na amountNa = Na.valueOf(amount.longValue());
AccountUtxoDto accountUtxoDto = new AccountUtxoDto();
List<UtxoDto> list = new LinkedList<>();
Na values = Na.ZERO;
for (Coin coin : coinList) {
if (!coin.usable()) {
continue;
}
if (coin.getNa().equals(Na.ZERO)) {
continue;
}
list.add(new UtxoDto(coin));
values = values.add(coin.getNa());
if (values.isGreaterOrEquals(amountNa)) {
break;
}
}
accountUtxoDto.setUtxoDtoList(list);
result = Result.getSuccess().setData(accountUtxoDto);
return result.toRpcClientResult();
} catch (Exception e) {
Log.error(e);
result = Result.getFailed(LedgerErrorCode.SYS_UNKOWN_EXCEPTION);
return result.toRpcClientResult();
}
}
Aggregations