Add sign function to Transaction
This commit is contained in:
parent
f57bb68e06
commit
b7d827a87a
|
@ -29,7 +29,7 @@ public class TransactionsMessage extends Message {
|
|||
public void parseRLP() {
|
||||
RLPList paramsList = (RLPList) rawData.getElement(0);
|
||||
|
||||
if ( Command.fromInt(((RLPItem)(paramsList).getElement(0)).getData()[0] & 0xFF) != TRANSACTIONS){
|
||||
if (Command.fromInt(((RLPItem)(paramsList).getElement(0)).getData()[0] & 0xFF) != TRANSACTIONS) {
|
||||
throw new Error("TransactionMessage: parsing for mal data");
|
||||
}
|
||||
|
||||
|
@ -53,10 +53,10 @@ public class TransactionsMessage extends Message {
|
|||
return null;
|
||||
}
|
||||
|
||||
public String toString(){
|
||||
public String toString() {
|
||||
if(!parsed) parseRLP();
|
||||
StringBuffer sb = new StringBuffer();
|
||||
for (Transaction transactionData : transactions){
|
||||
for (Transaction transactionData : transactions) {
|
||||
sb.append(" ").append(transactionData).append("\n");
|
||||
}
|
||||
return "Transactions Message [\n" + sb.toString() + " ]";
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package org.ethereum.net.vo;
|
||||
|
||||
import org.ethereum.crypto.ECKey.ECDSASignature;
|
||||
import org.ethereum.crypto.ECKey;
|
||||
import org.ethereum.crypto.HashUtil;
|
||||
import org.ethereum.net.rlp.RLPItem;
|
||||
import org.ethereum.net.rlp.RLPList;
|
||||
|
@ -19,10 +20,10 @@ public class Transaction {
|
|||
private RLPList rawData;
|
||||
private boolean parsed = false;
|
||||
|
||||
/* creation contract tx or simple send tx
|
||||
* [ nonce, value, receiveAddress, gasPrice, gasDeposit, data, signatureV, signatureR, signatureS ]
|
||||
* or
|
||||
* [ nonce, endowment, 0, gasPrice, gasDeposit (for init), body, init, signatureV, signatureR, signatureS ]
|
||||
/* creation contract tx
|
||||
* [ nonce, endowment, 0, gasPrice, gasDeposit (for init), body, init, signature(v, r, s) ]
|
||||
* or simple send tx
|
||||
* [ nonce, value, receiveAddress, gasPrice, gasDeposit, data, signature(v, r, s) ]
|
||||
*/
|
||||
|
||||
/* SHA3 hash of the rlpEncoded transaction */
|
||||
|
@ -146,7 +147,32 @@ public class Transaction {
|
|||
if (!parsed) rlpParse();
|
||||
return signature;
|
||||
}
|
||||
|
||||
/*********
|
||||
* Crypto
|
||||
*/
|
||||
|
||||
public ECKey getKey() {
|
||||
byte[] hash = this.getHash();
|
||||
return ECKey.recoverFromSignature(signature.v, signature, hash, true);
|
||||
}
|
||||
|
||||
public byte[] sender() {
|
||||
ECKey eckey = this.getKey();
|
||||
// Validate the returned key.
|
||||
// Return null if public key isn't in a correct format
|
||||
if (!eckey.isPubKeyCanonical()) {
|
||||
return null;
|
||||
}
|
||||
return eckey.getAddress();
|
||||
}
|
||||
|
||||
public void sign(byte[] privKeyBytes) throws Exception {
|
||||
byte[] hash = this.getHash();
|
||||
ECKey key = ECKey.fromPrivate(privKeyBytes);
|
||||
this.signature = key.sign(hash);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
if (!parsed) rlpParse();
|
||||
|
|
Loading…
Reference in New Issue