aboutsummaryrefslogtreecommitdiffstats
path: root/ethchain/transaction.go
diff options
context:
space:
mode:
authorobscuren <geffobscura@gmail.com>2014-05-26 06:42:07 +0800
committerobscuren <geffobscura@gmail.com>2014-05-26 06:42:07 +0800
commitb1463b2dc23ebd072f5e1e2c9a74842fc7ff51db (patch)
tree96e360fc19b7c0a37172d6d27d1221bf175228e6 /ethchain/transaction.go
parent4e1c6a8a22924d06a2a972c024891cebcf8ea054 (diff)
parent1f3f76cb092e84bd2e90950f0d43d7657eae878e (diff)
downloadgo-tangerine-b1463b2dc23ebd072f5e1e2c9a74842fc7ff51db.tar
go-tangerine-b1463b2dc23ebd072f5e1e2c9a74842fc7ff51db.tar.gz
go-tangerine-b1463b2dc23ebd072f5e1e2c9a74842fc7ff51db.tar.bz2
go-tangerine-b1463b2dc23ebd072f5e1e2c9a74842fc7ff51db.tar.lz
go-tangerine-b1463b2dc23ebd072f5e1e2c9a74842fc7ff51db.tar.xz
go-tangerine-b1463b2dc23ebd072f5e1e2c9a74842fc7ff51db.tar.zst
go-tangerine-b1463b2dc23ebd072f5e1e2c9a74842fc7ff51db.zip
Merge branch 'release/poc5-rc9'
Diffstat (limited to 'ethchain/transaction.go')
-rw-r--r--ethchain/transaction.go123
1 files changed, 99 insertions, 24 deletions
diff --git a/ethchain/transaction.go b/ethchain/transaction.go
index bd7a0e424..2c5615f99 100644
--- a/ethchain/transaction.go
+++ b/ethchain/transaction.go
@@ -1,6 +1,7 @@
package ethchain
import (
+ "fmt"
"github.com/ethereum/eth-go/ethutil"
"github.com/obscuren/secp256k1-go"
"math/big"
@@ -15,7 +16,6 @@ type Transaction struct {
Gas *big.Int
GasPrice *big.Int
Data []byte
- Init []byte
v byte
r, s []byte
@@ -23,8 +23,8 @@ type Transaction struct {
contractCreation bool
}
-func NewContractCreationTx(value, gas, gasPrice *big.Int, script []byte, init []byte) *Transaction {
- return &Transaction{Value: value, Gas: gas, GasPrice: gasPrice, Data: script, Init: init, contractCreation: true}
+func NewContractCreationTx(value, gas, gasPrice *big.Int, script []byte) *Transaction {
+ return &Transaction{Value: value, Gas: gas, GasPrice: gasPrice, Data: script, contractCreation: true}
}
func NewTransactionMessage(to []byte, value, gas, gasPrice *big.Int, data []byte) *Transaction {
@@ -46,19 +46,26 @@ func NewTransactionFromValue(val *ethutil.Value) *Transaction {
}
func (tx *Transaction) Hash() []byte {
- data := []interface{}{tx.Nonce, tx.Value, tx.GasPrice, tx.Gas, tx.Recipient, tx.Data}
+ data := []interface{}{tx.Nonce, tx.GasPrice, tx.Gas, tx.Recipient, tx.Value, tx.Data}
- if tx.contractCreation {
- data = append(data, tx.Init)
- }
+ /*
+ if tx.contractCreation {
+ data = append(data, tx.Init)
+ }
+ */
return ethutil.Sha3Bin(ethutil.NewValue(data).Encode())
}
-func (tx *Transaction) IsContract() bool {
+func (tx *Transaction) CreatesContract() bool {
return tx.contractCreation
}
+/* Depricated */
+func (tx *Transaction) IsContract() bool {
+ return tx.CreatesContract()
+}
+
func (tx *Transaction) CreationAddress() []byte {
return ethutil.Sha3Bin(ethutil.NewValue([]interface{}{tx.Sender(), tx.Nonce}).Encode())[12:]
}
@@ -112,10 +119,6 @@ func (tx *Transaction) Sign(privk []byte) error {
func (tx *Transaction) RlpData() interface{} {
data := []interface{}{tx.Nonce, tx.GasPrice, tx.Gas, tx.Recipient, tx.Value, tx.Data}
- if tx.contractCreation {
- data = append(data, tx.Init)
- }
-
return append(data, tx.v, tx.r, tx.s)
}
@@ -138,18 +141,90 @@ func (tx *Transaction) RlpValueDecode(decoder *ethutil.Value) {
tx.Recipient = decoder.Get(3).Bytes()
tx.Value = decoder.Get(4).BigInt()
tx.Data = decoder.Get(5).Bytes()
-
- // If the list is of length 10 it's a contract creation tx
- if decoder.Len() == 10 {
+ tx.v = byte(decoder.Get(6).Uint())
+ tx.r = decoder.Get(7).Bytes()
+ tx.s = decoder.Get(8).Bytes()
+ if len(tx.Recipient) == 0 {
tx.contractCreation = true
- tx.Init = decoder.Get(6).Bytes()
-
- tx.v = byte(decoder.Get(7).Uint())
- tx.r = decoder.Get(8).Bytes()
- tx.s = decoder.Get(9).Bytes()
- } else {
- tx.v = byte(decoder.Get(6).Uint())
- tx.r = decoder.Get(7).Bytes()
- tx.s = decoder.Get(8).Bytes()
}
+
+ /*
+ // If the list is of length 10 it's a contract creation tx
+ if decoder.Len() == 10 {
+ tx.contractCreation = true
+ tx.Init = decoder.Get(6).Bytes()
+
+ tx.v = byte(decoder.Get(7).Uint())
+ tx.r = decoder.Get(8).Bytes()
+ tx.s = decoder.Get(9).Bytes()
+ } else {
+ tx.v = byte(decoder.Get(6).Uint())
+ tx.r = decoder.Get(7).Bytes()
+ tx.s = decoder.Get(8).Bytes()
+ }
+ */
+}
+
+func (tx *Transaction) String() string {
+ return fmt.Sprintf(`
+ TX(%x)
+ Contract: %v
+ From: %x
+ To: %x
+ Nonce: %v
+ GasPrice: %v
+ Gas: %v
+ Value: %v
+ Data: 0x%x
+ V: 0x%x
+ R: 0x%x
+ S: 0x%x
+ `,
+ tx.Hash(),
+ len(tx.Recipient) == 0,
+ tx.Sender(),
+ tx.Recipient,
+ tx.Nonce,
+ tx.GasPrice,
+ tx.Gas,
+ tx.Value,
+ tx.Data,
+ tx.v,
+ tx.r,
+ tx.s)
+}
+
+type Receipt struct {
+ Tx *Transaction
+ PostState []byte
+ CumulativeGasUsed *big.Int
+}
+
+func NewRecieptFromValue(val *ethutil.Value) *Receipt {
+ r := &Receipt{}
+ r.RlpValueDecode(val)
+
+ return r
+}
+
+func (self *Receipt) RlpValueDecode(decoder *ethutil.Value) {
+ self.Tx = NewTransactionFromValue(decoder.Get(0))
+ self.PostState = decoder.Get(1).Bytes()
+ self.CumulativeGasUsed = decoder.Get(2).BigInt()
+}
+
+func (self *Receipt) RlpData() interface{} {
+ return []interface{}{self.Tx.RlpData(), self.PostState, self.CumulativeGasUsed}
+}
+
+func (self *Receipt) String() string {
+ return fmt.Sprintf(`
+ R
+ Tx:[ %v]
+ PostState: 0x%x
+ CumulativeGasUsed: %v
+ `,
+ self.Tx,
+ self.PostState,
+ self.CumulativeGasUsed)
}