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);
}
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);
}
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);
}
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;
}
}
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;
}
}
Aggregations