Search in sources :

Example 11 with NulsException

use of io.nuls.kernel.exception.NulsException in project nuls by nuls-io.

the class ContractSdkResource method createContractTx.

@POST
@Path("/sdk/create")
@Produces(MediaType.APPLICATION_JSON)
@ApiOperation(value = "create contact transaction")
@ApiResponses(value = { @ApiResponse(code = 200, message = "success") })
public RpcClientResult createContractTx(@ApiParam(name = "createForm", value = "create contact transaction", required = true) CreateContractTx createContractTx) {
    if (!AddressTool.validAddress(createContractTx.getSender())) {
        return Result.getFailed(AccountErrorCode.ADDRESS_ERROR).toRpcClientResult();
    }
    if (createContractTx.getGasLimit() < 0 || createContractTx.getPrice() < 0) {
        return Result.getFailed(ContractErrorCode.PARAMETER_ERROR).toRpcClientResult();
    }
    if (createContractTx.getUtxos().isEmpty()) {
        // utxo not null and size not zero.
        return Result.getFailed(AccountErrorCode.DATA_PARSE_ERROR).toRpcClientResult();
    }
    Long gasLimit = createContractTx.getGasLimit();
    Long price = createContractTx.getPrice();
    Na value = Na.ZERO;
    long totalGas = LongUtils.mul(gasLimit, price);
    Na totalNa = Na.valueOf(totalGas);
    byte[] senderBytes = AddressTool.getAddress(createContractTx.getSender());
    /**
     * first create a new contract address.
     */
    Address contractAddress = null;
    try {
        contractAddress = AccountTool.createContractAddress();
    } catch (NulsException e) {
        Log.error(e);
        return Result.getFailed(AccountErrorCode.ADDRESS_ERROR).toRpcClientResult();
    }
    byte[] contractAddressBytes = contractAddress.getAddressBytes();
    // 组装txData
    String contractCode = createContractTx.getContractCode();
    byte[] contractCodeBytes = Hex.decode(contractCode);
    CreateContractData txData = new CreateContractData();
    txData.setSender(senderBytes);
    txData.setContractAddress(contractAddressBytes);
    txData.setValue(value.getValue());
    txData.setGasLimit(gasLimit);
    txData.setPrice(price);
    txData.setCodeLen(contractCodeBytes.length);
    txData.setCode(contractCodeBytes);
    Object[] args = createContractTx.getArgs();
    if (args != null) {
        txData.setArgsCount((byte) args.length);
        if (args.length > 0) {
            txData.setArgs(ContractUtil.twoDimensionalArray(args));
        }
    }
    /**
     * create create contract tx data
     */
    CreateContractTransaction tx = new CreateContractTransaction();
    String remark = createContractTx.getRemark();
    if (StringUtils.isNotBlank(remark)) {
        try {
            tx.setRemark(remark.getBytes(NulsConfig.DEFAULT_ENCODING));
        } catch (UnsupportedEncodingException e) {
            throw new RuntimeException(e);
        }
    }
    tx.setTime(TimeService.currentTimeMillis());
    tx.setTxData(txData);
    List<Coin> coinList = ConvertCoinTool.convertCoinList(createContractTx.getUtxos());
    CoinDataResult coinDataResult = CoinDataTool.getCoinData(senderBytes, totalNa, tx.size(), TransactionFeeCalculator.MIN_PRICE_PRE_1024_BYTES, coinList);
    if (!coinDataResult.isEnough()) {
        return RpcClientResult.getFailed(TransactionErrorCode.INSUFFICIENT_BALANCE);
    }
    /**
     * build coin data
     */
    CoinData coinData = new CoinData();
    coinData.setFrom(coinDataResult.getCoinList());
    if (coinDataResult.getChange() != null) {
        coinData.getTo().add(coinDataResult.getChange());
    }
    tx.setCoinData(coinData);
    // 重置为0,重新计算交易对象的size
    tx.setSize(0);
    if (tx.getSize() > TxMaxSizeValidator.MAX_TX_SIZE) {
        return Result.getFailed(TransactionErrorCode.DATA_SIZE_ERROR).toRpcClientResult();
    }
    return this.buildReturnInfo(tx, AddressTool.getStringAddressByBytes(contractAddressBytes));
}
Also used : UnsupportedEncodingException(java.io.UnsupportedEncodingException) CreateContractTransaction(io.nuls.contract.entity.tx.CreateContractTransaction) NulsException(io.nuls.kernel.exception.NulsException) CreateContractData(io.nuls.contract.entity.txdata.CreateContractData) CoinDataResult(io.nuls.account.ledger.model.CoinDataResult) Path(javax.ws.rs.Path) POST(javax.ws.rs.POST) Produces(javax.ws.rs.Produces)

Example 12 with NulsException

use of io.nuls.kernel.exception.NulsException in project nuls by nuls-io.

the class BlockServiceImpl method saveBlock.

/**
 * 保存区块到存储中
 * Save the block to the store.
 *
 * @param block 完整区块/whole block
 * @return 操作结果/operating result
 * @throws NulsException 保存区块有可能出现异常,请捕获后谨慎处理/There may be exceptions to the save block, please handle it carefully after capture.
 */
@Override
public Result saveBlock(Block block) throws NulsException {
    if (null == block || block.getHeader() == null || block.getTxs() == null) {
        return Result.getFailed(ProtocolErroeCode.BLOCK_IS_NULL);
    }
    long height = block.getHeader().getHeight();
    List<Transaction> savedList = new ArrayList<>();
    for (Transaction transaction : block.getTxs()) {
        transaction.setBlockHeight(height);
        boolean needRollback = false;
        Result result = transactionService.commitTx(transaction, block.getHeader());
        if (result.isSuccess()) {
            result = ledgerService.saveTx(transaction);
        } else {
            needRollback = true;
        }
        if (result.isSuccess()) {
            savedList.add(transaction);
        } else {
            if (needRollback) {
                this.transactionService.rollbackCommit(transaction, block.getHeader());
            }
            this.rollbackTxList(savedList, block.getHeader(), false);
            return result;
        }
    }
    Result result = this.blockHeaderStorageService.saveBlockHeader(PoConvertUtil.toBlockHeaderPo(block));
    if (result.isFailed()) {
        this.rollbackTxList(savedList, block.getHeader(), false);
        return result;
    }
    try {
        accountLedgerService.saveConfirmedTransactionList(block.getTxs());
        // 保存合约相关交易
        contractService.saveConfirmedTransactionList(block.getTxs());
    } catch (Exception e) {
        Log.warn("save local tx failed", e);
    }
    return Result.getSuccess();
}
Also used : ContractTransferTransaction(io.nuls.contract.entity.tx.ContractTransferTransaction) CallContractTransaction(io.nuls.contract.entity.tx.CallContractTransaction) ArrayList(java.util.ArrayList) NulsException(io.nuls.kernel.exception.NulsException) ContractResult(io.nuls.contract.dto.ContractResult)

Example 13 with NulsException

use of io.nuls.kernel.exception.NulsException in project nuls by nuls-io.

the class BlockHeaderStorageServiceImpl method getBlockHeaderPo.

/**
 * 根据区块hash查询区块头数据
 * Query block header data according to block hash.
 *
 * @param hashBytes 区块头摘要/block hash
 * @return BlockHeaderPo 区块头数据
 */
private BlockHeaderPo getBlockHeaderPo(byte[] hashBytes) {
    byte[] bytes = dbService.get(ProtocolStorageConstant.DB_NAME_BLOCK_HEADER, hashBytes);
    if (null == bytes) {
        return null;
    }
    BlockHeaderPo po = new BlockHeaderPo();
    try {
        po.parse(bytes, 0);
    } catch (NulsException e) {
        Log.error(e);
    }
    NulsDigestData hash = new NulsDigestData();
    try {
        hash.parse(hashBytes, 0);
    } catch (NulsException e) {
        Log.error(e);
    }
    po.setHash(hash);
    return po;
}
Also used : NulsException(io.nuls.kernel.exception.NulsException) NulsDigestData(io.nuls.kernel.model.NulsDigestData) BlockHeaderPo(io.nuls.protocol.storage.po.BlockHeaderPo)

Example 14 with NulsException

use of io.nuls.kernel.exception.NulsException in project nuls by nuls-io.

the class TransactionServiceImplTest method initTxList.

private void initTxList() {
    List<Transaction> list = new ArrayList<>();
    ECKey ecKey1 = new ECKey();
    ECKey ecKey2 = new ECKey();
    ECKey ecKey3 = new ECKey();
    ECKey ecKey4 = new ECKey();
    ECKey ecKey5 = new ECKey();
    ECKey ecKey6 = new ECKey();
    Transaction tx = createCoinBaseTransaction(ecKey1, ecKey2, ecKey3, ecKey4, ecKey5, ecKey6);
    list.add(tx);
    Transaction yellowPunishTx = createYellowPunishTx(ecKey1, ecKey2, ecKey3, ecKey4, ecKey5, ecKey6);
    list.add(yellowPunishTx);
    // RedPunishTransaction redPunishTransaction = createRedPunishTx(ecKey1, ecKey4, ecKey5, ecKey6);
    // list.add(redPunishTransaction);
    TransferTransaction transferTransaction1 = createTransferTransaction(ecKey1, null, ecKey2, Na.ZERO);
    TransferTransaction transferTransaction2 = createTransferTransaction(ecKey1, null, ecKey3, Na.ZERO);
    list.add(transferTransaction1);
    list.add(transferTransaction2);
    createSetAliasTransaction(ecKey1, "alias");
    // createSetAliasTransaction(ecKey1, "alias1");
    // createSetAliasTransaction(ecKey2, "alias");
    CreateAgentTransaction tx1 = createRegisterAgentTransaction(ecKey1, ecKey2, "agentName");
    CreateAgentTransaction tx2 = createRegisterAgentTransaction(ecKey2, ecKey3, "agentName");
    CreateAgentTransaction tx3 = createRegisterAgentTransaction(ecKey4, ecKey5, "agentName2");
    CreateAgentTransaction tx4 = createRegisterAgentTransaction(ecKey1, ecKey3, "agentName3");
    list.add(tx1);
    list.add(tx2);
    list.add(tx3);
    list.add(tx4);
    DepositTransaction join1 = createDepositTransaction(ecKey1, tx1.getHash(), Na.parseNuls(200000));
    DepositTransaction join2 = createDepositTransaction(ecKey1, tx2.getHash(), Na.parseNuls(200000));
    DepositTransaction join3 = createDepositTransaction(ecKey1, tx3.getHash(), Na.parseNuls(200000));
    DepositTransaction join4 = createDepositTransaction(ecKey1, tx4.getHash(), Na.parseNuls(200000));
    DepositTransaction join5 = createDepositTransaction(ecKey1, tx3.getHash(), Na.parseNuls(200000));
    DepositTransaction join6 = createDepositTransaction(ecKey1, tx3.getHash(), Na.parseNuls(200000));
    DepositTransaction join7 = createDepositTransaction(ecKey1, tx3.getHash(), Na.parseNuls(200000));
    list.add(join1);
    list.add(join3);
    list.add(join2);
    list.add(join4);
    list.add(join5);
    list.add(join6);
    list.add(join7);
    try {
        createCancelDepositTransaction(ecKey1, NulsDigestData.fromDigestHex("txHash"));
    } catch (NulsException e) {
        Log.error(e);
    }
    StopAgentTransaction stop1 = createStopAgentTransaction(ecKey1, tx1.getHash());
    StopAgentTransaction stop2 = createStopAgentTransaction(ecKey1, tx2.getHash());
    StopAgentTransaction stop3 = createStopAgentTransaction(ecKey4, tx3.getHash());
    StopAgentTransaction stop4 = createStopAgentTransaction(ecKey1, tx4.getHash());
    list.add(stop1);
    list.add(stop2);
    list.add(stop3);
    list.add(stop4);
    this.allList = list;
}
Also used : TransferTransaction(io.nuls.protocol.model.tx.TransferTransaction) CoinBaseTransaction(io.nuls.protocol.model.tx.CoinBaseTransaction) NulsException(io.nuls.kernel.exception.NulsException) ArrayList(java.util.ArrayList) ECKey(io.nuls.core.tools.crypto.ECKey) TransferTransaction(io.nuls.protocol.model.tx.TransferTransaction)

Example 15 with NulsException

use of io.nuls.kernel.exception.NulsException in project nuls by nuls-io.

the class ContractBalanceManager method getCoinListByAddress.

public List<Coin> getCoinListByAddress(byte[] address) {
    List<Coin> coinList = new ArrayList<>();
    List<Entry<byte[], byte[]>> rawList = contractUtxoStorageService.loadAllCoinList();
    for (Entry<byte[], byte[]> coinEntry : rawList) {
        Coin coin = new Coin();
        try {
            coin.parse(coinEntry.getValue(), 0);
        } catch (NulsException e) {
            Log.info("parse coin form db error");
            continue;
        }
        if (Arrays.equals(coin.getAddress(), address)) {
            coin.setOwner(coinEntry.getKey());
            coin.setKey(asString(coinEntry.getKey()));
            coinList.add(coin);
        }
    }
    return coinList;
}
Also used : Coin(io.nuls.kernel.model.Coin) Entry(io.nuls.db.model.Entry) NulsException(io.nuls.kernel.exception.NulsException)

Aggregations

NulsException (io.nuls.kernel.exception.NulsException)109 IOException (java.io.IOException)35 Account (io.nuls.account.model.Account)25 ValidateResult (io.nuls.kernel.validate.ValidateResult)23 ECKey (io.nuls.core.tools.crypto.ECKey)20 CoinDataResult (io.nuls.account.ledger.model.CoinDataResult)18 NulsRuntimeException (io.nuls.kernel.exception.NulsRuntimeException)16 UnsupportedEncodingException (java.io.UnsupportedEncodingException)14 TransferTransaction (io.nuls.protocol.model.tx.TransferTransaction)13 Coin (io.nuls.kernel.model.Coin)12 MultiSigAccount (io.nuls.account.model.MultiSigAccount)11 ContractResult (io.nuls.contract.dto.ContractResult)9 NulsByteBuffer (io.nuls.kernel.utils.NulsByteBuffer)9 ArrayList (java.util.ArrayList)9 TransactionSignature (io.nuls.kernel.script.TransactionSignature)8 BigInteger (java.math.BigInteger)8 TransactionDataResult (io.nuls.account.ledger.model.TransactionDataResult)7 AccountPo (io.nuls.account.storage.po.AccountPo)7 AliasPo (io.nuls.account.storage.po.AliasPo)7 CryptoException (io.nuls.core.tools.crypto.Exception.CryptoException)7