浏览代码

Moved methods to messages

obscuren 11 年之前
父节点
当前提交
5ad473d758
共有 6 个文件被更改,包括 14 次插入37 次删除
  1. 2 2
      cmd/mist/gui.go
  2. 6 4
      core/state_transition.go
  3. 0 6
      core/transaction_pool.go
  4. 2 21
      core/types/transaction.go
  5. 1 1
      xeth/hexface.go
  6. 3 3
      xeth/js_types.go

+ 2 - 2
cmd/mist/gui.go

@@ -310,7 +310,7 @@ func (gui *Gui) insertTransaction(window string, tx *types.Transaction) {
 		s, r string
 		s, r string
 	)
 	)
 
 
-	if tx.CreatesContract() {
+	if core.MessageCreatesContract(tx) {
 		rec = nameReg.Storage(core.AddressFromMessage(tx))
 		rec = nameReg.Storage(core.AddressFromMessage(tx))
 	}
 	}
 
 
@@ -322,7 +322,7 @@ func (gui *Gui) insertTransaction(window string, tx *types.Transaction) {
 	if rec.Len() != 0 {
 	if rec.Len() != 0 {
 		r = strings.Trim(rec.Str(), "\x00")
 		r = strings.Trim(rec.Str(), "\x00")
 	} else {
 	} else {
-		if tx.CreatesContract() {
+		if core.MessageCreatesContract(tx) {
 			r = ethutil.Bytes2Hex(core.AddressFromMessage(tx))
 			r = ethutil.Bytes2Hex(core.AddressFromMessage(tx))
 		} else {
 		} else {
 			r = ethutil.Bytes2Hex(tx.To())
 			r = ethutil.Bytes2Hex(tx.To())

+ 6 - 4
core/state_transition.go

@@ -44,8 +44,6 @@ type StateTransition struct {
 type Message interface {
 type Message interface {
 	Hash() []byte
 	Hash() []byte
 
 
-	CreatesContract() bool
-
 	From() []byte
 	From() []byte
 	To() []byte
 	To() []byte
 
 
@@ -63,6 +61,10 @@ func AddressFromMessage(msg Message) []byte {
 	return crypto.Sha3(ethutil.NewValue([]interface{}{msg.From(), msg.Nonce()}).Encode())[12:]
 	return crypto.Sha3(ethutil.NewValue([]interface{}{msg.From(), msg.Nonce()}).Encode())[12:]
 }
 }
 
 
+func MessageCreatesContract(msg Message) bool {
+	return len(msg.To()) == 0
+}
+
 func NewStateTransition(coinbase *state.StateObject, msg Message, state *state.StateDB, block *types.Block) *StateTransition {
 func NewStateTransition(coinbase *state.StateObject, msg Message, state *state.StateDB, block *types.Block) *StateTransition {
 	return &StateTransition{coinbase.Address(), msg.To(), msg, new(big.Int), new(big.Int).Set(msg.GasPrice()), msg.Value(), msg.Data(), state, block, coinbase, nil, nil, nil}
 	return &StateTransition{coinbase.Address(), msg.To(), msg, new(big.Int), new(big.Int).Set(msg.GasPrice()), msg.Value(), msg.Data(), state, block, coinbase, nil, nil, nil}
 }
 }
@@ -93,7 +95,7 @@ func (self *StateTransition) From() *state.StateObject {
 	return self.sen
 	return self.sen
 }
 }
 func (self *StateTransition) To() *state.StateObject {
 func (self *StateTransition) To() *state.StateObject {
-	if self.msg != nil && self.msg.CreatesContract() {
+	if self.msg != nil && MessageCreatesContract(self.msg) {
 		return nil
 		return nil
 	}
 	}
 
 
@@ -205,7 +207,7 @@ func (self *StateTransition) TransitionState() (err error) {
 	var ret []byte
 	var ret []byte
 	vmenv := self.VmEnv()
 	vmenv := self.VmEnv()
 	var ref vm.ClosureRef
 	var ref vm.ClosureRef
-	if msg.CreatesContract() {
+	if MessageCreatesContract(msg) {
 		self.rec = MakeContract(msg, self.state)
 		self.rec = MakeContract(msg, self.state)
 
 
 		ret, err, ref = vmenv.Create(sender, self.rec.Address(), self.msg.Data(), self.gas, self.gasPrice, self.value)
 		ret, err, ref = vmenv.Create(sender, self.rec.Address(), self.msg.Data(), self.gas, self.gasPrice, self.value)

+ 0 - 6
core/transaction_pool.go

@@ -131,12 +131,6 @@ func (pool *TxPool) ValidateTransaction(tx *types.Transaction) error {
 		return fmt.Errorf("Insufficient amount in sender's (%x) account", tx.From())
 		return fmt.Errorf("Insufficient amount in sender's (%x) account", tx.From())
 	}
 	}
 
 
-	if tx.IsContract() {
-		if tx.GasPrice().Cmp(big.NewInt(minGasPrice)) < 0 {
-			return fmt.Errorf("Gasprice too low, %s given should be at least %d.", tx.GasPrice, minGasPrice)
-		}
-	}
-
 	// Increment the nonce making each tx valid only once to prevent replay
 	// Increment the nonce making each tx valid only once to prevent replay
 	// attacks
 	// attacks
 
 

+ 2 - 21
core/types/transaction.go

@@ -9,11 +9,8 @@ import (
 	"github.com/obscuren/secp256k1-go"
 	"github.com/obscuren/secp256k1-go"
 )
 )
 
 
-var ContractAddr = []byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
-
 func IsContractAddr(addr []byte) bool {
 func IsContractAddr(addr []byte) bool {
 	return len(addr) == 0
 	return len(addr) == 0
-	//return bytes.Compare(addr, ContractAddr) == 0
 }
 }
 
 
 type Transaction struct {
 type Transaction struct {
@@ -25,17 +22,14 @@ type Transaction struct {
 	data      []byte
 	data      []byte
 	v         byte
 	v         byte
 	r, s      []byte
 	r, s      []byte
-
-	// Indicates whether this tx is a contract creation transaction
-	contractCreation bool
 }
 }
 
 
 func NewContractCreationTx(value, gas, gasPrice *big.Int, script []byte) *Transaction {
 func NewContractCreationTx(value, gas, gasPrice *big.Int, script []byte) *Transaction {
-	return &Transaction{recipient: nil, value: value, gas: gas, gasPrice: gasPrice, data: script, contractCreation: true}
+	return &Transaction{recipient: nil, value: value, gas: gas, gasPrice: gasPrice, data: script}
 }
 }
 
 
 func NewTransactionMessage(to []byte, value, gas, gasPrice *big.Int, data []byte) *Transaction {
 func NewTransactionMessage(to []byte, value, gas, gasPrice *big.Int, data []byte) *Transaction {
-	return &Transaction{recipient: to, value: value, gasPrice: gasPrice, gas: gas, data: data, contractCreation: IsContractAddr(to)}
+	return &Transaction{recipient: to, value: value, gasPrice: gasPrice, gas: gas, data: data}
 }
 }
 
 
 func NewTransactionFromBytes(data []byte) *Transaction {
 func NewTransactionFromBytes(data []byte) *Transaction {
@@ -99,15 +93,6 @@ func (self *Transaction) To() []byte {
 	return self.recipient
 	return self.recipient
 }
 }
 
 
-func (tx *Transaction) CreatesContract() bool {
-	return tx.contractCreation
-}
-
-/* Deprecated */
-func (tx *Transaction) IsContract() bool {
-	return tx.CreatesContract()
-}
-
 func (tx *Transaction) Curve() (v byte, r []byte, s []byte) {
 func (tx *Transaction) Curve() (v byte, r []byte, s []byte) {
 	v = tx.v
 	v = tx.v
 	r = ethutil.LeftPadBytes(tx.r, 32)
 	r = ethutil.LeftPadBytes(tx.r, 32)
@@ -192,10 +177,6 @@ func (tx *Transaction) RlpValueDecode(decoder *ethutil.Value) {
 
 
 	tx.r = decoder.Get(7).Bytes()
 	tx.r = decoder.Get(7).Bytes()
 	tx.s = decoder.Get(8).Bytes()
 	tx.s = decoder.Get(8).Bytes()
-
-	if IsContractAddr(tx.recipient) {
-		tx.contractCreation = true
-	}
 }
 }
 
 
 func (tx *Transaction) String() string {
 func (tx *Transaction) String() string {

+ 1 - 1
xeth/hexface.go

@@ -229,7 +229,7 @@ func (self *JSXEth) PushTx(txStr string) (*JSReceipt, error) {
 		return nil, err
 		return nil, err
 	}
 	}
 
 
-	return NewJSReciept(tx.CreatesContract(), core.AddressFromMessage(tx), tx.Hash(), tx.From()), nil
+	return NewJSReciept(core.MessageCreatesContract(tx), core.AddressFromMessage(tx), tx.Hash(), tx.From()), nil
 }
 }
 
 
 func (self *JSXEth) CompileMutan(code string) string {
 func (self *JSXEth) CompileMutan(code string) string {

+ 3 - 3
xeth/js_types.go

@@ -102,16 +102,16 @@ func NewJSTx(tx *types.Transaction, state *state.StateDB) *JSTransaction {
 		receiver = ethutil.Bytes2Hex(core.AddressFromMessage(tx))
 		receiver = ethutil.Bytes2Hex(core.AddressFromMessage(tx))
 	}
 	}
 	sender := ethutil.Bytes2Hex(tx.Sender())
 	sender := ethutil.Bytes2Hex(tx.Sender())
-	createsContract := tx.CreatesContract()
+	createsContract := core.MessageCreatesContract(tx)
 
 
 	var data string
 	var data string
-	if tx.CreatesContract() {
+	if createsContract {
 		data = strings.Join(core.Disassemble(tx.Data()), "\n")
 		data = strings.Join(core.Disassemble(tx.Data()), "\n")
 	} else {
 	} else {
 		data = ethutil.Bytes2Hex(tx.Data())
 		data = ethutil.Bytes2Hex(tx.Data())
 	}
 	}
 
 
-	return &JSTransaction{ref: tx, Hash: hash, Value: ethutil.CurrencyToString(tx.Value()), Address: receiver, Contract: tx.CreatesContract(), Gas: tx.Gas().String(), GasPrice: tx.GasPrice().String(), Data: data, Sender: sender, CreatesContract: createsContract, RawData: ethutil.Bytes2Hex(tx.Data())}
+	return &JSTransaction{ref: tx, Hash: hash, Value: ethutil.CurrencyToString(tx.Value()), Address: receiver, Contract: createsContract, Gas: tx.Gas().String(), GasPrice: tx.GasPrice().String(), Data: data, Sender: sender, CreatesContract: createsContract, RawData: ethutil.Bytes2Hex(tx.Data())}
 }
 }
 
 
 func (self *JSTransaction) ToString() string {
 func (self *JSTransaction) ToString() string {