Search in sources :

Example 1 with Message

use of org.tron.common.overlay.message.Message in project java-tron by tronprotocol.

the class Wallet method broadcastTransaction.

/**
 * Broadcast a transaction.
 */
public boolean broadcastTransaction(Transaction signaturedTransaction) {
    TransactionCapsule trx = new TransactionCapsule(signaturedTransaction);
    try {
        if (trx.validateSignature()) {
            Message message = new TransactionMessage(signaturedTransaction);
            dbManager.pushTransactions(trx);
            p2pnode.broadcast(message);
            return true;
        }
    } catch (ValidateSignatureException e) {
        logger.debug(e.getMessage(), e);
    } catch (ContractValidateException e) {
        logger.debug(e.getMessage(), e);
    } catch (ContractExeException e) {
        logger.debug(e.getMessage(), e);
    } catch (Exception e) {
        logger.debug(e.getMessage(), e);
    }
    return false;
}
Also used : TransactionCapsule(org.tron.core.capsule.TransactionCapsule) TransactionMessage(org.tron.core.net.message.TransactionMessage) NumberMessage(org.tron.api.GrpcAPI.NumberMessage) TransactionMessage(org.tron.core.net.message.TransactionMessage) Message(org.tron.common.overlay.message.Message) ValidateSignatureException(org.tron.core.exception.ValidateSignatureException) ContractValidateException(org.tron.core.exception.ContractValidateException) ContractValidateException(org.tron.core.exception.ContractValidateException) ContractExeException(org.tron.core.exception.ContractExeException) ValidateSignatureException(org.tron.core.exception.ValidateSignatureException) ContractExeException(org.tron.core.exception.ContractExeException)

Example 2 with Message

use of org.tron.common.overlay.message.Message in project java-tron by tronprotocol.

the class NodeImpl method processAdvBlock.

private void processAdvBlock(PeerConnection peer, BlockCapsule block) {
    // TODO: lack the complete flow.
    if (!freshBlockId.contains(block.getBlockId())) {
        try {
            LinkedList<Sha256Hash> trxIds = del.handleBlock(block, false);
            freshBlockId.offer(block.getBlockId());
            trxIds.forEach(trxId -> advObjToFetch.remove(trxId));
            // TODO:save message cache again.
            getActivePeer().stream().filter(p -> p.getAdvObjSpreadToUs().containsKey(block.getBlockId())).forEach(p -> {
                p.setHeadBlockWeBothHave(block.getBlockId());
                p.setHeadBlockTimeWeBothHave(block.getTimeStamp());
            });
            getActivePeer().forEach(p -> p.cleanInvGarbage());
            // rebroadcast
            broadcast(new BlockMessage(block));
        } catch (BadBlockException e) {
            badAdvObj.put(block.getBlockId(), System.currentTimeMillis());
        } catch (UnLinkedBlockException e) {
            // reSync
            startSyncWithPeer(peer);
        }
    }
}
Also used : Autowired(org.springframework.beans.factory.annotation.Autowired) BlockCapsule(org.tron.core.capsule.BlockCapsule) ConcurrentSet(io.netty.util.internal.ConcurrentSet) BlockId(org.tron.core.capsule.BlockCapsule.BlockId) NodeHandler(org.tron.common.overlay.discover.NodeHandler) TransactionMessage(org.tron.core.net.message.TransactionMessage) NodeConstant(org.tron.core.config.Parameter.NodeConstant) Pair(javafx.util.Pair) InventoryMessage(org.tron.core.net.message.InventoryMessage) Collection(java.util.Collection) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) Set(java.util.Set) MessageTypes(org.tron.core.net.message.MessageTypes) UnReachBlockException(org.tron.core.exception.UnReachBlockException) ExecutorLoop(org.tron.common.utils.ExecutorLoop) LinkedBlockingQueue(java.util.concurrent.LinkedBlockingQueue) Executors(java.util.concurrent.Executors) List(java.util.List) Slf4j(lombok.extern.slf4j.Slf4j) Entry(java.util.Map.Entry) Queue(java.util.Queue) TronException(org.tron.core.exception.TronException) BlockConstant(org.tron.core.config.Parameter.BlockConstant) BadTransactionException(org.tron.core.exception.BadTransactionException) Iterables(com.google.common.collect.Iterables) SyncBlockChainMessage(org.tron.core.net.message.SyncBlockChainMessage) ItemNotFound(org.tron.core.net.message.ItemNotFound) HashMap(java.util.HashMap) Deque(java.util.Deque) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet) TronState(org.tron.common.overlay.server.Channel.TronState) PeerConnectionDelegate(org.tron.core.net.peer.PeerConnectionDelegate) ScheduledExecutorService(java.util.concurrent.ScheduledExecutorService) BadBlockException(org.tron.core.exception.BadBlockException) LinkedList(java.util.LinkedList) Sha256Hash(org.tron.common.utils.Sha256Hash) BlockMessage(org.tron.core.net.message.BlockMessage) Message(org.tron.common.overlay.message.Message) BlockInventoryMessage(org.tron.core.net.message.BlockInventoryMessage) InventoryType(org.tron.protos.Protocol.Inventory.InventoryType) NetConstants(org.tron.core.config.Parameter.NetConstants) SyncPool(org.tron.common.overlay.server.SyncPool) FetchInvDataMessage(org.tron.core.net.message.FetchInvDataMessage) TraitorPeerException(org.tron.core.exception.TraitorPeerException) ChainInventoryMessage(org.tron.core.net.message.ChainInventoryMessage) TimeUnit(java.util.concurrent.TimeUnit) TronMessage(org.tron.core.net.message.TronMessage) PeerConnection(org.tron.core.net.peer.PeerConnection) Component(org.springframework.stereotype.Component) ReasonCode(org.tron.common.overlay.message.ReasonCode) Time(org.tron.common.utils.Time) UnLinkedBlockException(org.tron.core.exception.UnLinkedBlockException) BadBlockException(org.tron.core.exception.BadBlockException) BlockMessage(org.tron.core.net.message.BlockMessage) Sha256Hash(org.tron.common.utils.Sha256Hash) UnLinkedBlockException(org.tron.core.exception.UnLinkedBlockException)

Example 3 with Message

use of org.tron.common.overlay.message.Message in project java-tron by tronprotocol.

the class NodeImpl method onHandleFetchDataMessage.

private void onHandleFetchDataMessage(PeerConnection peer, FetchInvDataMessage fetchInvDataMsg) {
    logger.info("on handle fetch block message");
    MessageTypes type = fetchInvDataMsg.getInvMessageType();
    // TODO:maybe can use message cache here
    final BlockCapsule[] blocks = { del.getGenesisBlock() };
    // get data and send it one by one
    fetchInvDataMsg.getHashList().forEach(hash -> {
        if (del.contain(hash, type)) {
            Message msg = del.getData(hash, type);
            if (type.equals(MessageTypes.BLOCK)) {
                blocks[0] = ((BlockMessage) msg).getBlockCapsule();
            }
            peer.sendMessage(msg);
        } else {
            peer.sendMessage(new ItemNotFound());
        }
    });
    if (blocks[0] != null) {
        peer.setHeadBlockWeBothHave(blocks[0].getBlockId());
        peer.setHeadBlockTimeWeBothHave(blocks[0].getTimeStamp());
    }
}
Also used : TransactionMessage(org.tron.core.net.message.TransactionMessage) InventoryMessage(org.tron.core.net.message.InventoryMessage) SyncBlockChainMessage(org.tron.core.net.message.SyncBlockChainMessage) BlockMessage(org.tron.core.net.message.BlockMessage) Message(org.tron.common.overlay.message.Message) BlockInventoryMessage(org.tron.core.net.message.BlockInventoryMessage) FetchInvDataMessage(org.tron.core.net.message.FetchInvDataMessage) ChainInventoryMessage(org.tron.core.net.message.ChainInventoryMessage) TronMessage(org.tron.core.net.message.TronMessage) ItemNotFound(org.tron.core.net.message.ItemNotFound) MessageTypes(org.tron.core.net.message.MessageTypes) BlockCapsule(org.tron.core.capsule.BlockCapsule)

Aggregations

Message (org.tron.common.overlay.message.Message)3 TransactionMessage (org.tron.core.net.message.TransactionMessage)3 BlockCapsule (org.tron.core.capsule.BlockCapsule)2 BlockInventoryMessage (org.tron.core.net.message.BlockInventoryMessage)2 BlockMessage (org.tron.core.net.message.BlockMessage)2 ChainInventoryMessage (org.tron.core.net.message.ChainInventoryMessage)2 FetchInvDataMessage (org.tron.core.net.message.FetchInvDataMessage)2 InventoryMessage (org.tron.core.net.message.InventoryMessage)2 ItemNotFound (org.tron.core.net.message.ItemNotFound)2 MessageTypes (org.tron.core.net.message.MessageTypes)2 SyncBlockChainMessage (org.tron.core.net.message.SyncBlockChainMessage)2 TronMessage (org.tron.core.net.message.TronMessage)2 Iterables (com.google.common.collect.Iterables)1 ConcurrentSet (io.netty.util.internal.ConcurrentSet)1 ArrayList (java.util.ArrayList)1 Collection (java.util.Collection)1 Deque (java.util.Deque)1 HashMap (java.util.HashMap)1 HashSet (java.util.HashSet)1 LinkedList (java.util.LinkedList)1