diff --git a/transaction.go b/transaction.go
index f5c848a31af0af7f130f1a74d69a7ff6ce67771a..f38f0fed36608c94271fe67a070569938cfeb554 100644
--- a/transaction.go
+++ b/transaction.go
@@ -3,6 +3,7 @@ package main
 import (
   "math/big"
   "fmt"
+  "github.com/obscuren/secp256k1-go"
   _"encoding/hex"
   _"crypto/sha256"
   _ "bytes"
@@ -73,6 +74,28 @@ func (tx *Transaction) Hash() []byte {
   return Sha256Bin(tx.MarshalRlp())
 }
 
+func (tx *Transaction) IsContract() bool {
+  return tx.recipient == ""
+}
+
+func (tx *Transaction) Signature() []byte {
+  hash := Sha256Bin(tx.MarshalRlp())
+  sec  := Sha256Bin([]byte("myprivkey"))
+
+  sig, _ := secp256k1.Sign(hash, sec)
+
+  return sig
+}
+
+func (tx *Transaction) PublicKey() []byte {
+  hash := Sha256Bin(tx.MarshalRlp())
+  sig  := tx.Signature()
+
+  pubkey, _ := secp256k1.RecoverPubkey(hash, sig)
+
+  return pubkey
+}
+
 func (tx *Transaction) MarshalRlp() []byte {
   // Prepare the transaction for serialization
   preEnc := []interface{}{