Search in sources :

Example 11 with ECKey

use of org.aion.crypto.ECKey in project aion by aionnetwork.

the class BlockPropagationTest method testBlockPropagationReceiver.

/**
 * Test that we don't propagate back to the sender
 */
@Test
public void testBlockPropagationReceiver() {
    List<ECKey> accounts = generateDefaultAccounts();
    StandaloneBlockchain.Bundle bundle = new StandaloneBlockchain.Builder().withValidatorConfiguration("simple").withDefaultAccounts(accounts).build();
    AionBlock block = bundle.bc.createNewBlock(bundle.bc.getGenesis(), Collections.EMPTY_LIST, true);
    assertThat(block.getNumber()).isEqualTo(1);
    byte[] sender = HashUtil.h256("node1".getBytes());
    NodeMock senderMock = new NodeMock(sender, 1);
    Map<Integer, INode> node = new HashMap<>();
    node.put(1, senderMock);
    P2pMock p2pMock = new P2pMock(node) {

        @Override
        public void send(int _nodeId, Msg _msg) {
            throw new RuntimeException("should not have called send");
        }
    };
    StandaloneBlockchain.Bundle anotherBundle = new StandaloneBlockchain.Builder().withValidatorConfiguration("simple").withDefaultAccounts(accounts).build();
    BlockPropagationHandler handler = new BlockPropagationHandler(1024, // NOTE: not the same blockchain that generated the block
    anotherBundle.bc, p2pMock, anotherBundle.bc.getBlockHeaderValidator());
    assertThat(handler.processIncomingBlock(senderMock.getIdHash(), block)).isEqualTo(BlockPropagationHandler.PropStatus.CONNECTED);
}
Also used : BlockPropagationHandler(org.aion.zero.impl.sync.handler.BlockPropagationHandler) ECKey(org.aion.crypto.ECKey) StandaloneBlockchain(org.aion.zero.impl.StandaloneBlockchain) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) BigInteger(java.math.BigInteger) AionBlock(org.aion.zero.impl.types.AionBlock) Test(org.junit.Test)

Example 12 with ECKey

use of org.aion.crypto.ECKey in project aion by aionnetwork.

the class BlockPropagationTest method testPropagateBlockToPeer.

// given two peers, and one sends you a new block, propagate to the other
@Test
public void testPropagateBlockToPeer() {
    List<ECKey> accounts = generateDefaultAccounts();
    StandaloneBlockchain.Bundle bundle = new StandaloneBlockchain.Builder().withValidatorConfiguration("simple").withDefaultAccounts(accounts).build();
    AionBlock block = bundle.bc.createNewBlock(bundle.bc.getGenesis(), Collections.EMPTY_LIST, true);
    assertThat(block.getNumber()).isEqualTo(1);
    byte[] sender = HashUtil.h256("node1".getBytes());
    byte[] receiver = HashUtil.h256("receiver".getBytes());
    NodeMock senderMock = new NodeMock(sender, 1);
    NodeMock receiverMock = new NodeMock(receiver, 0);
    Map<Integer, INode> node = new HashMap<>();
    node.put(1, senderMock);
    node.put(2, receiverMock);
    AtomicInteger times = new AtomicInteger();
    P2pMock p2pMock = new P2pMock(node) {

        @Override
        public void send(int _nodeId, Msg _msg) {
            if (_nodeId != receiverMock.getIdHash())
                throw new RuntimeException("should only send to receiver");
            times.getAndIncrement();
        }
    };
    StandaloneBlockchain.Bundle anotherBundle = new StandaloneBlockchain.Builder().withValidatorConfiguration("simple").withDefaultAccounts(accounts).build();
    assertThat(bundle.bc.genesis.getHash()).isEqualTo(anotherBundle.bc.genesis.getHash());
    assertThat(block.getParentHash()).isEqualTo(bundle.bc.genesis.getHash());
    assertThat(block.getParentHash()).isEqualTo(anotherBundle.bc.genesis.getHash());
    AionBlock bestBlock = bundle.bc.getBestBlock();
    assertThat(bestBlock.getHash()).isEqualTo(anotherBundle.bc.genesis.getHash());
    BlockPropagationHandler handler = new BlockPropagationHandler(1024, // NOTE: not the same blockchain that generated the block
    anotherBundle.bc, p2pMock, anotherBundle.bc.getBlockHeaderValidator());
    // block is processed
    assertThat(handler.processIncomingBlock(senderMock.getIdHash(), block)).isEqualTo(BlockPropagationHandler.PropStatus.PROP_CONNECTED);
    assertThat(times.get()).isEqualTo(1);
}
Also used : BlockPropagationHandler(org.aion.zero.impl.sync.handler.BlockPropagationHandler) ECKey(org.aion.crypto.ECKey) StandaloneBlockchain(org.aion.zero.impl.StandaloneBlockchain) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) BigInteger(java.math.BigInteger) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) AionBlock(org.aion.zero.impl.types.AionBlock) Test(org.junit.Test)

Example 13 with ECKey

use of org.aion.crypto.ECKey in project aion by aionnetwork.

the class BlockPropagationTest method testIgnoreSelfBlock.

// this test scenario: we propagate a block out, and someone propagates back
@Test
public void testIgnoreSelfBlock() {
    List<ECKey> accounts = generateDefaultAccounts();
    StandaloneBlockchain.Bundle bundle = new StandaloneBlockchain.Builder().withValidatorConfiguration("simple").withDefaultAccounts(accounts).build();
    AionBlock block = bundle.bc.createNewBlock(bundle.bc.getGenesis(), Collections.EMPTY_LIST, true);
    assertThat(block.getNumber()).isEqualTo(1);
    byte[] sender = HashUtil.h256("node1".getBytes());
    NodeMock senderMock = new NodeMock(sender, 1);
    Map<Integer, INode> node = new HashMap<>();
    node.put(1, senderMock);
    AtomicInteger sendCount = new AtomicInteger();
    P2pMock p2pMock = new P2pMock(node) {

        @Override
        public void send(int _nodeId, Msg _msg) {
            sendCount.getAndIncrement();
        }
    };
    StandaloneBlockchain.Bundle anotherBundle = new StandaloneBlockchain.Builder().withValidatorConfiguration("simple").withDefaultAccounts(accounts).build();
    BlockPropagationHandler handler = new BlockPropagationHandler(1024, // NOTE: not the same blockchain that generated the block
    anotherBundle.bc, p2pMock, anotherBundle.bc.getBlockHeaderValidator());
    // pretend that we propagate the new block
    // send counter incremented
    handler.propagateNewBlock(block);
    // recall that we're using another blockchain and faked the propagation
    // so our blockchain should view this block as a new block
    // therefore if the filter fails, this block will actually be CONNECTED
    assertThat(handler.processIncomingBlock(senderMock.getIdHash(), block)).isEqualTo(BlockPropagationHandler.PropStatus.DROPPED);
    // we expect the counter to be incremented once (on propagation)
    assertThat(sendCount.get()).isEqualTo(1);
}
Also used : BlockPropagationHandler(org.aion.zero.impl.sync.handler.BlockPropagationHandler) ECKey(org.aion.crypto.ECKey) StandaloneBlockchain(org.aion.zero.impl.StandaloneBlockchain) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) BigInteger(java.math.BigInteger) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) AionBlock(org.aion.zero.impl.types.AionBlock) Test(org.junit.Test)

Example 14 with ECKey

use of org.aion.crypto.ECKey in project aion by aionnetwork.

the class Cli method exportPrivateKey.

/**
 * Dumps the private of the given account.
 *
 * @param address
 *            address of the account
 * @return boolean
 */
private boolean exportPrivateKey(String address) {
    if (!Keystore.exist(address)) {
        System.out.println("The account does not exist!");
        return false;
    }
    String password = readPassword("Please enter your password: ");
    ECKey key = Keystore.getKey(address, password);
    if (key != null) {
        System.out.println("Your private key is: 0x" + Hex.toHexString(key.getPrivKeyBytes()));
        return true;
    } else {
        System.out.println("Failed to unlock the account");
        return false;
    }
}
Also used : ECKey(org.aion.crypto.ECKey)

Example 15 with ECKey

use of org.aion.crypto.ECKey in project aion by aionnetwork.

the class Cli method importPrivateKey.

/**
 * Imports a private key.
 *
 * @param privateKey
 *            private key in hex string
 * @return boolean
 */
private boolean importPrivateKey(String privateKey) {
    // TODO: the Hex.decode() method catches all exceptions which may cause
    // issues for other components
    byte[] raw = Hex.decode(privateKey.startsWith("0x") ? privateKey.substring(2) : privateKey);
    if (raw == null) {
        System.out.println("Invalid private key");
        return false;
    }
    ECKey key = ECKeyFac.inst().fromPrivate(raw);
    String password = readPassword("Please enter a password: ");
    String password2 = readPassword("Please re-enter your password: ");
    if (!password2.equals(password)) {
        System.out.println("Passwords do not match!");
        return false;
    }
    String address = Keystore.create(password, key);
    if (!address.equals("0x")) {
        System.out.println("The private key was imported, the address is: " + address);
        return true;
    } else {
        System.out.println("Failed to import the private key. Already exists?");
        return false;
    }
}
Also used : ECKey(org.aion.crypto.ECKey)

Aggregations

ECKey (org.aion.crypto.ECKey)29 Test (org.junit.Test)17 Address (org.aion.base.type.Address)13 AionTransaction (org.aion.zero.types.AionTransaction)12 BigInteger (java.math.BigInteger)10 TxPoolA0 (org.aion.txpool.zero.TxPoolA0)7 AionBlock (org.aion.zero.impl.types.AionBlock)6 ITransaction (org.aion.base.type.ITransaction)5 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)4 StandaloneBlockchain (org.aion.zero.impl.StandaloneBlockchain)4 BlockPropagationHandler (org.aion.zero.impl.sync.handler.BlockPropagationHandler)4 File (java.io.File)2 IOException (java.io.IOException)2 HashMap (java.util.HashMap)2 ImportResult (org.aion.mcf.core.ImportResult)2 FileOutputStream (java.io.FileOutputStream)1 Files (java.nio.file.Files)1 Path (java.nio.file.Path)1 Paths (java.nio.file.Paths)1 FileAttribute (java.nio.file.attribute.FileAttribute)1