Search in sources :

Example 16 with ECKey

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

the class ApiAion method estimateNrg.

// TODO: refactor these ad-hoc transaction creations - violates DRY and is messy
public long estimateNrg(ArgTxCall _params) {
    if (_params == null) {
        throw new NullPointerException();
    }
    Address from = _params.getFrom();
    if (from.equals(Address.EMPTY_ADDRESS())) {
        LOG.error("<send-transaction msg=invalid-from-address>");
        return -1L;
    }
    ECKey key = this.getAccountKey(from.toString());
    if (key == null) {
        LOG.error("<send-transaction msg=account-not-found>");
        return -1L;
    }
    try {
        // Transaction is executed as local transaction, no need to retrieve the real nonce.
        byte[] nonce = BigInteger.ZERO.toByteArray();
        AionTransaction tx = new AionTransaction(nonce, _params.getTo(), _params.getValue().toByteArray(), _params.getData(), _params.getNrg(), _params.getNrgPrice());
        tx.sign(key);
        return this.ac.estimateTxNrg(tx, this.ac.getAionHub().getBlockchain().getBestBlock());
    } catch (Exception ex) {
        return -1L;
    }
}
Also used : Address(org.aion.base.type.Address) ECKey(org.aion.crypto.ECKey) AionTransaction(org.aion.zero.types.AionTransaction)

Example 17 with ECKey

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

the class ApiAion method createContract.

public ContractCreateResult createContract(ArgTxCall _params) {
    Address from = _params.getFrom();
    if (from == null || from.equals(Address.EMPTY_ADDRESS())) {
        return null;
    }
    ECKey key = this.getAccountKey(from.toString());
    if (key == null) {
        LOG.debug("ApiAion.createContract - null key");
        return null;
    } else {
        try {
            synchronized (pendingState) {
                byte[] nonce = !(_params.getNonce().equals(BigInteger.ZERO)) ? _params.getNonce().toByteArray() : pendingState.bestNonce(Address.wrap(key.getAddress())).toByteArray();
                AionTransaction tx = new AionTransaction(nonce, from, null, _params.getValue().toByteArray(), _params.getData(), _params.getNrg(), _params.getNrgPrice());
                tx.sign(key);
                pendingState.addPendingTransaction(tx);
                ContractCreateResult c = new ContractCreateResult();
                c.address = tx.getContractAddress();
                c.transId = tx.getHash();
                return c;
            }
        } catch (Exception ex) {
            LOG.error("ApiAion.createContract - exception: [{}]", ex.getMessage());
            return null;
        }
    }
}
Also used : Address(org.aion.base.type.Address) ECKey(org.aion.crypto.ECKey) AionTransaction(org.aion.zero.types.AionTransaction)

Example 18 with ECKey

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

the class KeystoreTest method keyCreateAndRetrieve.

@Test
public void keyCreateAndRetrieve() {
    String password = randomPassword(10);
    String address = Keystore.create(password);
    assertNotNull(address);
    assertEquals(address.length(), 2 + 64);
    System.out.println("new addr: " + address);
    ECKey key = Keystore.getKey(address, password);
    assertNotNull(key);
}
Also used : ECKey(org.aion.crypto.ECKey) Test(org.junit.Test)

Example 19 with ECKey

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

the class AccountManager method unlockAccount.

public boolean unlockAccount(Address _address, String _password, int _timeout) {
    int timeout = UNLOCK_DEFAULT;
    if (_timeout > UNLOCK_MAX) {
        timeout = UNLOCK_MAX;
    } else if (_timeout > 0) {
        timeout = _timeout;
    }
    ECKey key = Keystore.getKey(_address.toString(), _password);
    if (Optional.ofNullable(key).isPresent()) {
        Account acc = inst.accounts.get(_address);
        long t = Instant.now().getEpochSecond() + timeout;
        if (Optional.ofNullable(acc).isPresent()) {
            acc.updateTimeout(t);
        } else {
            Account a = new Account(key, t);
            inst.accounts.put(_address, a);
        }
        LOGGER.debug("<unlock-success addr={}>", _address);
        return true;
    } else {
        LOGGER.debug("<unlock-fail addr={}>", _address);
        return false;
    }
}
Also used : ECKey(org.aion.crypto.ECKey)

Example 20 with ECKey

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

the class Keystore method backupAccount.

public static Map<Address, ByteArrayWrapper> backupAccount(Map<Address, String> account) {
    if (account == null) {
        throw new NullPointerException();
    }
    List<File> files = getFiles();
    if (files == null) {
        if (LOG.isWarnEnabled()) {
            LOG.warn("No key file been stored in the kernel.");
        }
        return new java.util.HashMap<>();
    }
    List<File> matchedFile = files.parallelStream().filter(file -> account.entrySet().parallelStream().filter(ac -> file.getName().contains(ac.getKey().toString())).findFirst().isPresent()).collect(Collectors.toList());
    Map<Address, ByteArrayWrapper> res = new HashMap<>();
    for (File file : matchedFile) {
        try {
            String[] frags = file.getName().split("--");
            if (frags.length == 3) {
                Address addr = Address.wrap(frags[2]);
                byte[] content = Files.readAllBytes(file.toPath());
                String pw = account.get(addr);
                if (pw != null) {
                    ECKey key = KeystoreFormat.fromKeystore(content, pw);
                    if (key != null) {
                        res.put(addr, ByteArrayWrapper.wrap(content));
                    }
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    return res;
}
Also used : AionLoggerFactory(org.aion.log.AionLoggerFactory) java.util(java.util) PosixFilePermission(java.nio.file.attribute.PosixFilePermission) ECKeyFac(org.aion.crypto.ECKeyFac) Logger(org.slf4j.Logger) Files(java.nio.file.Files) FileOutputStream(java.io.FileOutputStream) SimpleDateFormat(java.text.SimpleDateFormat) IOException(java.io.IOException) FileAttribute(java.nio.file.attribute.FileAttribute) HashMap(java.util.HashMap) Collectors(java.util.stream.Collectors) File(java.io.File) Address(org.aion.base.type.Address) PosixFilePermissions(java.nio.file.attribute.PosixFilePermissions) LogEnum(org.aion.log.LogEnum) org.aion.base.util(org.aion.base.util) Paths(java.nio.file.Paths) Path(java.nio.file.Path) ECKey(org.aion.crypto.ECKey) DateFormat(java.text.DateFormat) Address(org.aion.base.type.Address) HashMap(java.util.HashMap) ECKey(org.aion.crypto.ECKey) IOException(java.io.IOException) File(java.io.File)

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