use of io.nuls.core.script.P2PKHScriptSig in project nuls by nuls-io.
the class ConsensusTool method createBlock.
public static Block createBlock(BlockData blockData, Account account) throws NulsException {
if (null == account) {
throw new NulsRuntimeException(ErrorCode.ACCOUNT_NOT_EXIST);
}
Block block = new Block();
block.setTxs(blockData.getTxList());
BlockHeader header = new BlockHeader();
block.setHeader(header);
try {
block.getHeader().setExtend(blockData.getRoundData().serialize());
} catch (IOException e) {
Log.error(e);
}
header.setHeight(blockData.getHeight());
header.setTime(TimeService.currentTimeMillis());
header.setPreHash(blockData.getPreHash());
header.setTxCount(blockData.getTxList().size());
List<NulsDigestData> txHashList = new ArrayList<>();
for (int i = 0; i < blockData.getTxList().size(); i++) {
Transaction tx = blockData.getTxList().get(i);
txHashList.add(tx.getHash());
}
header.setPackingAddress(account.getAddress().toString());
header.setMerkleHash(NulsDigestData.calcMerkleDigestData(txHashList));
header.setHash(NulsDigestData.calcDigestData(block.getHeader()));
P2PKHScriptSig scriptSig = new P2PKHScriptSig();
NulsSignData signData = accountService.signDigest(header.getHash(), account, NulsContext.CACHED_PASSWORD_OF_WALLET);
scriptSig.setSignData(signData);
scriptSig.setPublicKey(account.getPubKey());
header.setScriptSig(scriptSig);
return block;
}
use of io.nuls.core.script.P2PKHScriptSig in project nuls by nuls-io.
the class AccountServiceImpl method createP2PKHScriptSigFromDigest.
@Override
public P2PKHScriptSig createP2PKHScriptSigFromDigest(NulsDigestData nulsDigestData, Account account, String password) throws NulsException {
P2PKHScriptSig p2PKHScriptSig = new P2PKHScriptSig();
p2PKHScriptSig.setSignData(signDigest(nulsDigestData, account, password));
p2PKHScriptSig.setPublicKey(account.getPubKey());
return p2PKHScriptSig;
}
use of io.nuls.core.script.P2PKHScriptSig in project nuls by nuls-io.
the class GenesisBlock method initGengsisTxs.
private void initGengsisTxs(Map<String, Object> jsonMap) {
List<Map<String, Object>> list = (List<Map<String, Object>>) jsonMap.get(CONFIG_FILED_TXS);
if (null == list || list.isEmpty()) {
throw new NulsRuntimeException(ErrorCode.CONFIG_ERROR);
}
CoinTransferData data = new CoinTransferData(OperationType.COIN_BASE, Na.ZERO);
data.setPriKey(Hex.decode(priKey));
Na total = Na.ZERO;
for (Map<String, Object> map : list) {
String address = (String) map.get(CONFIG_FILED_ADDRESS);
AssertUtil.canNotEmpty(address, ErrorCode.NULL_PARAMETER);
Integer nuls = (Integer) map.get(CONFIG_FILED_NULS);
AssertUtil.canNotEmpty(nuls, ErrorCode.NULL_PARAMETER);
Integer height = (Integer) map.get(CONFIG_FILED_UNLOCK_HEIGHT);
Coin coin = new Coin();
coin.setNa(Na.parseNuls(nuls));
coin.setUnlockTime(0);
if (height == null) {
coin.setUnlockTime(0);
} else {
coin.setUnlockHeight(height.longValue());
}
data.addTo(address, coin);
total = total.add(coin.getNa());
}
data.setTotalNa(total);
CoinBaseTransaction tx = null;
try {
tx = new CoinBaseTransaction(data, null);
} catch (NulsException e) {
Log.error(e);
throw new NulsRuntimeException(e);
}
tx.setTime(this.blockTime);
tx.setFee(Na.ZERO);
try {
tx.setHash(NulsDigestData.calcDigestData(tx.serialize()));
} catch (IOException e) {
Log.error(e);
throw new NulsRuntimeException(e);
}
P2PKHScriptSig p2PKHScriptSig = new P2PKHScriptSig();
Account account = null;
try {
account = AccountTool.createAccount(priKey);
} catch (NulsException e) {
e.printStackTrace();
}
AccountService accountService = NulsContext.getServiceBean(AccountService.class);
P2PKHScriptSig scriptSig = null;
try {
scriptSig = accountService.createP2PKHScriptSigFromDigest(tx.getHash(), account, "");
} catch (NulsException e) {
e.printStackTrace();
}
try {
tx.setScriptSig(scriptSig.serialize());
} catch (IOException e) {
e.printStackTrace();
}
List<Transaction> txlist = new ArrayList<>();
// tx.setStatus(TxStatusEnum.AGREED);
txlist.add(tx);
setTxs(txlist);
}
use of io.nuls.core.script.P2PKHScriptSig in project nuls by nuls-io.
the class UtxoTxInputsValidator method validate.
@Override
public ValidateResult validate(AbstractCoinTransaction tx) {
UtxoData data = (UtxoData) tx.getCoinData();
for (int i = 0; i < data.getInputs().size(); i++) {
UtxoInput input = data.getInputs().get(i);
UtxoOutput output = input.getFrom();
if (output == null && tx.getStatus() == TxStatusEnum.CACHED) {
return ValidateResult.getFailedResult(ErrorCode.ORPHAN_TX);
}
if (tx.getStatus() == TxStatusEnum.CACHED) {
if (!output.isUsable()) {
return ValidateResult.getFailedResult(ErrorCode.UTXO_STATUS_CHANGE);
}
} else if (tx.getStatus() == TxStatusEnum.AGREED) {
if (!output.isSpend()) {
return ValidateResult.getFailedResult(ErrorCode.UTXO_STATUS_CHANGE);
}
}
byte[] owner = output.getOwner();
P2PKHScriptSig p2PKHScriptSig = null;
try {
p2PKHScriptSig = P2PKHScriptSig.createFromBytes(tx.getScriptSig());
} catch (NulsException e) {
return ValidateResult.getFailedResult(ErrorCode.DATA_ERROR);
}
byte[] user = p2PKHScriptSig.getSignerHash160();
if (!Arrays.equals(owner, user)) {
return ValidateResult.getFailedResult(ErrorCode.INVALID_OUTPUT);
}
return ValidateResult.getSuccessResult();
}
return ValidateResult.getSuccessResult();
}
Aggregations