aboutsummaryrefslogtreecommitdiffstats
path: root/ethchain
diff options
context:
space:
mode:
authorobscuren <geffobscura@gmail.com>2014-03-27 22:42:39 +0800
committerobscuren <geffobscura@gmail.com>2014-03-27 22:42:39 +0800
commit43cad6901620ca077e43f195cc5ae4d1c8edb2d0 (patch)
tree0976ea78d90ae84b179097b90efeaf87ab74e994 /ethchain
parent308c59320c25845f9668e76559b581e2161fec15 (diff)
downloadgo-tangerine-43cad6901620ca077e43f195cc5ae4d1c8edb2d0.tar.gz
go-tangerine-43cad6901620ca077e43f195cc5ae4d1c8edb2d0.tar.zst
go-tangerine-43cad6901620ca077e43f195cc5ae4d1c8edb2d0.zip
Reworked transaction constructors
Diffstat (limited to 'ethchain')
-rw-r--r--ethchain/keypair.go3
-rw-r--r--ethchain/transaction.go66
-rw-r--r--ethchain/vm.go3
3 files changed, 58 insertions, 14 deletions
diff --git a/ethchain/keypair.go b/ethchain/keypair.go
index 9fdc95972..9daaedbee 100644
--- a/ethchain/keypair.go
+++ b/ethchain/keypair.go
@@ -34,6 +34,7 @@ func (k *KeyPair) Account() *Account {
// Create transaction, creates a new and signed transaction, ready for processing
func (k *KeyPair) CreateTx(receiver []byte, value *big.Int, data []string) *Transaction {
+ /* TODO
tx := NewTransaction(receiver, value, data)
tx.Nonce = k.account.Nonce
@@ -41,6 +42,8 @@ func (k *KeyPair) CreateTx(receiver []byte, value *big.Int, data []string) *Tran
tx.Sign(k.PrivateKey)
return tx
+ */
+ return nil
}
func (k *KeyPair) RlpEncode() []byte {
diff --git a/ethchain/transaction.go b/ethchain/transaction.go
index 3b07c81d4..695071251 100644
--- a/ethchain/transaction.go
+++ b/ethchain/transaction.go
@@ -18,16 +18,21 @@ type Transaction struct {
Data []string
v byte
r, s []byte
+
+ // Indicates whether this tx is a contract creation transaction
+ contractCreation bool
}
+/*
func NewTransaction(to []byte, value *big.Int, data []string) *Transaction {
tx := Transaction{Recipient: to, Value: value, Nonce: 0, Data: data}
return &tx
}
+*/
func NewContractCreationTx(value, gasprice *big.Int, data []string) *Transaction {
- return &Transaction{Value: value, Gasprice: gasprice, Data: data}
+ return &Transaction{Value: value, Gasprice: gasprice, Data: data, contractCreation: true}
}
func NewContractMessageTx(to []byte, value, gasprice, gas *big.Int, data []string) *Transaction {
@@ -38,10 +43,12 @@ func NewTx(to []byte, value *big.Int, data []string) *Transaction {
return &Transaction{Recipient: to, Value: value, Gasprice: big.NewInt(0), Gas: big.NewInt(0), Nonce: 0, Data: data}
}
+/*
// XXX Deprecated
func NewTransactionFromData(data []byte) *Transaction {
return NewTransactionFromBytes(data)
}
+*/
func NewTransactionFromBytes(data []byte) *Transaction {
tx := &Transaction{}
@@ -148,19 +155,52 @@ func (tx *Transaction) RlpDecode(data []byte) {
tx.RlpValueDecode(ethutil.NewValueFromBytes(data))
}
+// [ NONCE, VALUE, GASPRICE, TO, GAS, DATA, V, R, S ]
func (tx *Transaction) RlpValueDecode(decoder *ethutil.Value) {
tx.Nonce = decoder.Get(0).Uint()
- tx.Recipient = decoder.Get(1).Bytes()
- tx.Value = decoder.Get(2).BigInt()
-
- d := decoder.Get(3)
- tx.Data = make([]string, d.Len())
- for i := 0; i < d.Len(); i++ {
- tx.Data[i] = d.Get(i).Str()
+ tx.Value = decoder.Get(1).BigInt()
+ tx.Gasprice = decoder.Get(2).BigInt()
+
+ // If the 4th item is a list(slice) this tx
+ // is a contract creation tx
+ if decoder.Get(3).IsSlice() {
+ d := decoder.Get(3)
+ tx.Data = make([]string, d.Len())
+ for i := 0; i < d.Len(); i++ {
+ tx.Data[i] = d.Get(i).Str()
+ }
+
+ tx.v = byte(decoder.Get(4).Uint())
+ tx.r = decoder.Get(5).Bytes()
+ tx.s = decoder.Get(6).Bytes()
+ tx.contractCreation = true
+ } else {
+ tx.Recipient = decoder.Get(3).Bytes()
+ tx.Gas = decoder.Get(4).BigInt()
+
+ d := decoder.Get(5)
+ tx.Data = make([]string, d.Len())
+ for i := 0; i < d.Len(); i++ {
+ tx.Data[i] = d.Get(i).Str()
+ }
+
+ tx.v = byte(decoder.Get(6).Uint())
+ tx.r = decoder.Get(7).Bytes()
+ tx.s = decoder.Get(8).Bytes()
}
-
- // TODO something going wrong here
- tx.v = byte(decoder.Get(4).Uint())
- tx.r = decoder.Get(5).Bytes()
- tx.s = decoder.Get(6).Bytes()
+ /*
+ tx.Nonce = decoder.Get(0).Uint()
+ tx.Recipient = decoder.Get(1).Bytes()
+ tx.Value = decoder.Get(2).BigInt()
+
+ d := decoder.Get(3)
+ tx.Data = make([]string, d.Len())
+ for i := 0; i < d.Len(); i++ {
+ tx.Data[i] = d.Get(i).Str()
+ }
+
+ tx.v = byte(decoder.Get(4).Uint())
+ tx.r = decoder.Get(5).Bytes()
+ tx.s = decoder.Get(6).Bytes()
+ */
}
diff --git a/ethchain/vm.go b/ethchain/vm.go
index 9b6807925..aefc8ff0c 100644
--- a/ethchain/vm.go
+++ b/ethchain/vm.go
@@ -5,7 +5,6 @@ import (
_ "fmt"
"github.com/ethereum/eth-go/ethutil"
_ "github.com/obscuren/secp256k1-go"
- "log"
_ "math"
"math/big"
)
@@ -359,6 +358,7 @@ func (vm *Vm) RunClosure(closure *Closure) []byte {
}
}
+/*
func makeInlineTx(addr []byte, value, from, length *big.Int, contract *Contract, state *State) {
ethutil.Config.Log.Debugf(" => creating inline tx %x %v %v %v", addr, value, from, length)
j := int64(0)
@@ -395,3 +395,4 @@ func contractMemory(state *State, contractAddr []byte, memAddr *big.Int) *big.In
return decoder.BigInt()
}
+*/