public void setGasUsed(long gasUsed) { this.gasUsed = BigIntegers.asUnsignedByteArray(BigInteger.valueOf(gasUsed)); rlpEncoded = null; }
public void setCumulativeGas(long cumulativeGas) { this.cumulativeGas = BigIntegers.asUnsignedByteArray(BigInteger.valueOf(cumulativeGas)); rlpEncoded = null; }
public static Transaction create(String to, BigInteger amount, BigInteger nonce, BigInteger gasPrice, BigInteger gasLimit, Integer chainId){ return new Transaction(BigIntegers.asUnsignedByteArray(nonce), BigIntegers.asUnsignedByteArray(gasPrice), BigIntegers.asUnsignedByteArray(gasLimit), Hex.decode(to), BigIntegers.asUnsignedByteArray(amount), null, chainId); }
/** * @deprecated use {@link Transaction#create(String, BigInteger, BigInteger, BigInteger, BigInteger, Integer)} instead */ public static Transaction create(String to, BigInteger amount, BigInteger nonce, BigInteger gasPrice, BigInteger gasLimit){ return new Transaction(BigIntegers.asUnsignedByteArray(nonce), BigIntegers.asUnsignedByteArray(gasPrice), BigIntegers.asUnsignedByteArray(gasLimit), Hex.decode(to), BigIntegers.asUnsignedByteArray(amount), null); }
public byte[] getPowBoundary() { return BigIntegers.asUnsignedByteArray(32, BigInteger.ONE.shiftLeft(256).divide(getDifficultyBI())); }
private static byte[] toBytes(Object input) { if (input instanceof byte[]) { return (byte[]) input; } else if (input instanceof String) { String inputString = (String) input; return inputString.getBytes(); } else if (input instanceof Long) { Long inputLong = (Long) input; return (inputLong == 0) ? ByteUtil.EMPTY_BYTE_ARRAY : asUnsignedByteArray(BigInteger.valueOf(inputLong)); } else if (input instanceof Integer) { Integer inputInt = (Integer) input; return (inputInt == 0) ? ByteUtil.EMPTY_BYTE_ARRAY : asUnsignedByteArray(BigInteger.valueOf(inputInt)); } else if (input instanceof BigInteger) { BigInteger inputBigInt = (BigInteger) input; return (inputBigInt.equals(BigInteger.ZERO)) ? ByteUtil.EMPTY_BYTE_ARRAY : asUnsignedByteArray(inputBigInt); } else if (input instanceof Value) { Value val = (Value) input; return toBytes(val.asObj()); } throw new RuntimeException("Unsupported type: Only accepting String, Integer and BigInteger for now"); }
private void sign() { flags |= SIGNATURE_FLAG; byte[] forSig = hash(); ECKey.ECDSASignature signature = from.sign(forSig); byte v; if (signature.v == 27) v = 0; else if (signature.v == 28) v = 1; else throw new RuntimeException("Invalid signature: " + signature); this.signature = merge(BigIntegers.asUnsignedByteArray(32, signature.r), BigIntegers.asUnsignedByteArray(32, signature.s), new byte[]{v}); }
public static byte[] encodeBigInteger(BigInteger srcBigInteger) { if (srcBigInteger.compareTo(BigInteger.ZERO) < 0) throw new RuntimeException("negative numbers are not allowed"); if (srcBigInteger.equals(BigInteger.ZERO)) return encodeByte((byte) 0); else return encodeElement(asUnsignedByteArray(srcBigInteger)); }
private void validate() { if (getNonce().length > HASH_LENGTH) throw new RuntimeException("Nonce is not valid"); if (receiveAddress != null && receiveAddress.length != 0 && receiveAddress.length != ADDRESS_LENGTH) throw new RuntimeException("Receive address is not valid"); if (gasLimit.length > HASH_LENGTH) throw new RuntimeException("Gas Limit is not valid"); if (gasPrice != null && gasPrice.length > HASH_LENGTH) throw new RuntimeException("Gas Price is not valid"); if (value != null && value.length > HASH_LENGTH) throw new RuntimeException("Value is not valid"); if (getSignature() != null) { if (BigIntegers.asUnsignedByteArray(signature.r).length > HASH_LENGTH) throw new RuntimeException("Signature R is not valid"); if (BigIntegers.asUnsignedByteArray(signature.s).length > HASH_LENGTH) throw new RuntimeException("Signature S is not valid"); if (getSender() != null && getSender().length != ADDRESS_LENGTH) throw new RuntimeException("Sender is not valid"); } }
public byte[] calcDistance(Peer toPeer) { BigInteger aPeer = new BigInteger(getId()); BigInteger bPeer = new BigInteger(toPeer.getId()); BigInteger distance = aPeer.xor(bPeer); return BigIntegers.asUnsignedByteArray(distance); }
public byte[] encode() { byte[] rsigPad = new byte[32]; byte[] rsig = asUnsignedByteArray(signature.r); System.arraycopy(rsig, 0, rsigPad, rsigPad.length - rsig.length, rsig.length); byte[] ssigPad = new byte[32]; byte[] ssig = asUnsignedByteArray(signature.s); System.arraycopy(ssig, 0, ssigPad, ssigPad.length - ssig.length, ssig.length); byte[] sigBytes = merge(rsigPad, ssigPad, new byte[]{EncryptionHandshake.recIdFromSignatureV(signature.v)}); byte[] buffer = new byte[getLength()]; int offset = 0; System.arraycopy(sigBytes, 0, buffer, offset, sigBytes.length); offset += sigBytes.length; System.arraycopy(ephemeralPublicHash, 0, buffer, offset, ephemeralPublicHash.length); offset += ephemeralPublicHash.length; byte[] publicBytes = publicKey.getEncoded(false); System.arraycopy(publicBytes, 1, buffer, offset, publicBytes.length - 1); offset += publicBytes.length - 1; System.arraycopy(nonce, 0, buffer, offset, nonce.length); offset += nonce.length; buffer[offset] = (byte)(isTokenUsed ? 0x01 : 0x00); offset += 1; return buffer; }
@Override public String toString() { byte[] sigBytes = merge(asUnsignedByteArray(signature.r), asUnsignedByteArray(signature.s), new byte[]{EncryptionHandshake.recIdFromSignatureV(signature.v)}); return "AuthInitiateMessage{" + "\n sigBytes=" + toHexString(sigBytes) + "\n publicKey=" + toHexString(publicKey.getEncoded(false)) + "\n nonce=" + toHexString(nonce) + "\n version=" + version + "\n}"; } }
public byte[] encode() { byte[] rsigPad = new byte[32]; byte[] rsig = asUnsignedByteArray(signature.r); System.arraycopy(rsig, 0, rsigPad, rsigPad.length - rsig.length, rsig.length); byte[] ssigPad = new byte[32]; byte[] ssig = asUnsignedByteArray(signature.s); System.arraycopy(ssig, 0, ssigPad, ssigPad.length - ssig.length, ssig.length); byte[] publicKey = new byte[64]; System.arraycopy(this.publicKey.getEncoded(false), 1, publicKey, 0, publicKey.length); byte[] sigBytes = RLP.encode(merge(rsigPad, ssigPad, new byte[]{EncryptionHandshake.recIdFromSignatureV(signature.v)})); byte[] publicBytes = RLP.encode(publicKey); byte[] nonceBytes = RLP.encode(nonce); byte[] versionBytes = RLP.encodeInt(version); return RLP.encodeList(sigBytes, publicBytes, nonceBytes, versionBytes); }
@Override public String toString() { byte[] sigBytes = merge(asUnsignedByteArray(signature.r), asUnsignedByteArray(signature.s), new byte[]{EncryptionHandshake.recIdFromSignatureV(signature.v)}); return "AuthInitiateMessage{" + "\n sigBytes=" + toHexString(sigBytes) + "\n ephemeralPublicHash=" + toHexString(ephemeralPublicHash) + "\n publicKey=" + toHexString(publicKey.getEncoded(false)) + "\n nonce=" + toHexString(nonce) + "\n}"; } }
public Message encode(byte[] type, byte[] data, ECKey privKey) { /* [1] Calc keccak - prepare for sig */ byte[] payload = new byte[type.length + data.length]; payload[0] = type[0]; System.arraycopy(data, 0, payload, 1, data.length); byte[] forSig = sha3(payload); /* [2] Crate signature*/ ECKey.ECDSASignature signature = privKey.sign(forSig); signature.v -= 27; byte[] sigBytes = merge(BigIntegers.asUnsignedByteArray(32, signature.r), BigIntegers.asUnsignedByteArray(32, signature.s), new byte[]{signature.v}); // [3] calculate MDC byte[] forSha = merge(sigBytes, type, data); byte[] mdc = sha3(forSha); // wrap all the data in to the packet this.mdc = mdc; this.signature = sigBytes; this.type = type; this.data = data; this.wire = merge(this.mdc, this.signature, this.type, this.data); return this; }
public Env(JSONObject env) { String coinbase = env.get("currentCoinbase").toString(); String difficulty = env.get("currentDifficulty").toString(); String timestamp = env.get("currentTimestamp").toString(); String number = env.get("currentNumber").toString(); String gasLimit = Utils.parseUnidentifiedBase(env.get("currentGasLimit").toString()); Object previousHash = env.get("previousHash"); String prevHash = previousHash == null ? "" : previousHash.toString(); this.currentCoinbase = Utils.parseData(coinbase); this.currentDifficulty = BigIntegers.asUnsignedByteArray(TestCase.toBigInt(difficulty) ); this.currentGasLimit = BigIntegers.asUnsignedByteArray(TestCase.toBigInt(gasLimit)); this.currentNumber = TestCase.toBigInt(number).toByteArray(); this.currentTimestamp = TestCase.toBigInt(timestamp).toByteArray(); this.previousHash = Utils.parseData(prevHash); }
public static List<Block> getRandomChain(byte[] startParentHash, long startNumber, long length){ List<Block> result = new ArrayList<>(); byte[] lastHash = startParentHash; long lastIndex = startNumber; for (int i = 0; i < length; ++i){ byte[] difficulty = BigIntegers.asUnsignedByteArray(new BigInteger(8, new Random())); byte[] newHash = randomHash(); Block block = new Block(lastHash, newHash, null, null, difficulty, lastIndex, new byte[] {0}, 0, 0, null, null, null, null, EMPTY_TRIE_HASH, randomHash(), null, null); ++lastIndex; lastHash = block.getHash(); result.add(block); } return result; }
@Ignore @Test public void testTransactionFromSignedRLP() throws Exception { Transaction txSigned = new Transaction(Hex.decode(RLP_ENCODED_SIGNED_TX)); assertEquals(HASH_TX, Hex.toHexString(txSigned.getHash())); assertEquals(RLP_ENCODED_SIGNED_TX, Hex.toHexString(txSigned.getEncoded())); assertEquals(BigInteger.ZERO, new BigInteger(1, txSigned.getNonce())); assertEquals(new BigInteger(1, testGasPrice), new BigInteger(1, txSigned.getGasPrice())); assertEquals(new BigInteger(1, testGasLimit), new BigInteger(1, txSigned.getGasLimit())); assertEquals(Hex.toHexString(testReceiveAddress), Hex.toHexString(txSigned.getReceiveAddress())); assertEquals(new BigInteger(1, testValue), new BigInteger(1, txSigned.getValue())); assertNull(txSigned.getData()); assertEquals(27, txSigned.getSignature().v); assertEquals("eab47c1a49bf2fe5d40e01d313900e19ca485867d462fe06e139e3a536c6d4f4", Hex.toHexString(BigIntegers.asUnsignedByteArray(txSigned.getSignature().r))); assertEquals("14a569d327dcda4b29f74f93c0e9729d2f49ad726e703f9cd90dbb0fbf6649f1", Hex.toHexString(BigIntegers.asUnsignedByteArray(txSigned.getSignature().s))); }
@Ignore @Test public void testTransactionFromUnsignedRLP() throws Exception { Transaction txUnsigned = new Transaction(Hex.decode(RLP_ENCODED_UNSIGNED_TX)); assertEquals(HASH_TX, Hex.toHexString(txUnsigned.getHash())); assertEquals(RLP_ENCODED_UNSIGNED_TX, Hex.toHexString(txUnsigned.getEncoded())); txUnsigned.sign(ECKey.fromPrivate(Hex.decode(KEY))); assertEquals(RLP_ENCODED_SIGNED_TX, Hex.toHexString(txUnsigned.getEncoded())); assertEquals(BigInteger.ZERO, new BigInteger(1, txUnsigned.getNonce())); assertEquals(new BigInteger(1, testGasPrice), new BigInteger(1, txUnsigned.getGasPrice())); assertEquals(new BigInteger(1, testGasLimit), new BigInteger(1, txUnsigned.getGasLimit())); assertEquals(Hex.toHexString(testReceiveAddress), Hex.toHexString(txUnsigned.getReceiveAddress())); assertEquals(new BigInteger(1, testValue), new BigInteger(1, txUnsigned.getValue())); assertNull(txUnsigned.getData()); assertEquals(27, txUnsigned.getSignature().v); assertEquals("eab47c1a49bf2fe5d40e01d313900e19ca485867d462fe06e139e3a536c6d4f4", Hex.toHexString(BigIntegers.asUnsignedByteArray(txUnsigned.getSignature().r))); assertEquals("14a569d327dcda4b29f74f93c0e9729d2f49ad726e703f9cd90dbb0fbf6649f1", Hex.toHexString(BigIntegers.asUnsignedByteArray(txUnsigned.getSignature().s))); }
@Ignore @Test public void testTransactionFromNew1() throws MissingPrivateKeyException { Transaction txNew = new Transaction(testNonce, testGasPrice, testGasLimit, testReceiveAddress, testValue, testData); assertEquals("", Hex.toHexString(txNew.getNonce())); assertEquals(new BigInteger(1, testGasPrice), new BigInteger(1, txNew.getGasPrice())); assertEquals(new BigInteger(1, testGasLimit), new BigInteger(1, txNew.getGasLimit())); assertEquals(Hex.toHexString(testReceiveAddress), Hex.toHexString(txNew.getReceiveAddress())); assertEquals(new BigInteger(1, testValue), new BigInteger(1, txNew.getValue())); assertEquals("", Hex.toHexString(txNew.getData())); assertNull(txNew.getSignature()); assertEquals(RLP_ENCODED_RAW_TX, Hex.toHexString(txNew.getEncodedRaw())); assertEquals(HASH_TX, Hex.toHexString(txNew.getHash())); assertEquals(RLP_ENCODED_UNSIGNED_TX, Hex.toHexString(txNew.getEncoded())); txNew.sign(ECKey.fromPrivate(Hex.decode(KEY))); assertEquals(RLP_ENCODED_SIGNED_TX, Hex.toHexString(txNew.getEncoded())); assertEquals(27, txNew.getSignature().v); assertEquals("eab47c1a49bf2fe5d40e01d313900e19ca485867d462fe06e139e3a536c6d4f4", Hex.toHexString(BigIntegers.asUnsignedByteArray(txNew.getSignature().r))); assertEquals("14a569d327dcda4b29f74f93c0e9729d2f49ad726e703f9cd90dbb0fbf6649f1", Hex.toHexString(BigIntegers.asUnsignedByteArray(txNew.getSignature().s))); }