Moved methods to messages
This commit is contained in:
parent
db494170dc
commit
5ad473d758
@ -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())
|
||||||
|
@ -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)
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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 {
|
||||||
|
@ -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 {
|
||||||
|
@ -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 {
|
||||||
|
Loading…
Reference in New Issue
Block a user