use of io.nuls.protocol.model.tx.CoinBaseTransaction in project nuls by nuls-io.
the class GenesisBlock method initGengsisTxs.
private void initGengsisTxs(Map<String, Object> jsonMap) throws Exception {
List<Map<String, Object>> list = (List<Map<String, Object>>) jsonMap.get(CONFIG_FILED_TXS);
if (null == list || list.isEmpty()) {
throw new NulsRuntimeException(KernelErrorCode.CONFIG_ERROR);
}
CoinData coinData = new CoinData();
for (Map<String, Object> map : list) {
String address = (String) map.get(CONFIG_FILED_ADDRESS);
AssertUtil.canNotEmpty(address, KernelErrorCode.NULL_PARAMETER.getMsg());
Double amount = Double.valueOf("" + map.get(CONFIG_FILED_AMOUNT));
AssertUtil.canNotEmpty(amount, KernelErrorCode.NULL_PARAMETER.getMsg());
Long lockTime = Long.valueOf("" + map.get(CONFIG_FILED_LOCK_TIME));
Address ads = Address.fromHashs(address);
Coin coin = new Coin(ads.getAddressBytes(), Na.parseNuls(amount), lockTime == null ? 0 : lockTime.longValue());
coinData.addTo(coin);
}
CoinBaseTransaction tx = new CoinBaseTransaction();
tx.setTime(this.blockTime);
tx.setCoinData(coinData);
String remark = (String) jsonMap.get(CONFIG_FILED_REMARK);
if (StringUtils.isNotBlank(remark)) {
tx.setRemark(Hex.decode(remark));
}
tx.setHash(NulsDigestData.calcDigestData(tx.serializeForHash()));
List<Transaction> txlist = new ArrayList<>();
txlist.add(tx);
setTxs(txlist);
}
use of io.nuls.protocol.model.tx.CoinBaseTransaction 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.protocol.model.tx.CoinBaseTransaction in project nuls by nuls-io.
the class PocRewardCacheService method addBlock.
public void addBlock(Block block) {
if (block.getHeader().getHeight() <= endHeight) {
return;
}
CoinBaseTransaction tx = (CoinBaseTransaction) block.getTxs().get(0);
this.calcReward(block.getHeader().getHeight(), tx);
}
use of io.nuls.protocol.model.tx.CoinBaseTransaction in project nuls by nuls-io.
the class ConsensusProcess method addConsensusTx.
/**
* CoinBase transaction & Punish transaction
*
* @param bestBlock local highest block
* @param txList all tx of block
* @param self agent meeting data
*/
private void addConsensusTx(Block bestBlock, List<Transaction> txList, MeetingMember self, MeetingRound round) throws NulsException, IOException {
CoinBaseTransaction coinBaseTransaction = ConsensusTool.createCoinBaseTx(self, txList, round, bestBlock.getHeader().getHeight() + 1 + PocConsensusConstant.COINBASE_UNLOCK_HEIGHT);
txList.add(0, coinBaseTransaction);
punishTx(bestBlock, txList, self, round);
}
use of io.nuls.protocol.model.tx.CoinBaseTransaction in project nuls by nuls-io.
the class ConsensusTool method createCoinBaseTx.
public static CoinBaseTransaction createCoinBaseTx(MeetingMember member, List<Transaction> txList, MeetingRound localRound, long unlockHeight) {
CoinData coinData = new CoinData();
// 合约剩余Gas退还
List<Coin> returnGasList = returnContractSenderNa(txList, unlockHeight);
List<Coin> rewardList = calcReward(txList, member, localRound, unlockHeight);
if (!returnGasList.isEmpty()) {
Coin agentReward = rewardList.remove(0);
rewardList.addAll(returnGasList);
rewardList.sort(new Comparator<Coin>() {
@Override
public int compare(Coin o1, Coin o2) {
return Arrays.hashCode(o1.getOwner()) > Arrays.hashCode(o2.getOwner()) ? 1 : -1;
}
});
rewardList.add(0, agentReward);
}
for (Coin coin : rewardList) {
coinData.addTo(coin);
}
CoinBaseTransaction tx = new CoinBaseTransaction();
tx.setTime(member.getPackEndTime());
tx.setCoinData(coinData);
try {
tx.setHash(NulsDigestData.calcDigestData(tx.serializeForHash()));
} catch (IOException e) {
Log.error(e);
}
return tx;
}
Aggregations