package chain import ( "bytes" "crypto" "crypto/rand" "crypto/rsa" "crypto/sha256" "encoding/gob" "time" ) type transaction struct { Src string Dst string Amount int Timestamp int64 } func NewTransaction(source string, dst string, amount int) transaction { return transaction{Src: source, Dst: dst, Amount: amount, Timestamp: time.Now().Unix()} } func (ta transaction) SignTransaction(privKey *rsa.PrivateKey, d int) ([]byte, error) { return rsa.SignPKCS1v15(rand.Reader, privKey, crypto.SHA256, ta.HashTransaction()) } func (ta transaction) HashTransaction() []byte { var buf bytes.Buffer gob.NewEncoder(&buf).Encode(ta) hash := sha256.New().Sum(buf.Bytes()) return hash } func (ta transaction) ToBytes() []byte { bytes := []byte(ta.Src) bytes = append(bytes, []byte(ta.Dst)...) bytes = append(bytes, byte(ta.Amount)) //bytes = append(bytes, []byte(ta.Timestamp)) return bytes } func (ta transaction) ToBytesSerialize() []byte { var buf bytes.Buffer gob.NewEncoder(&buf).Encode(ta) return buf.Bytes() }