Removed old method
This commit is contained in:
parent
bb2433ca1a
commit
00d3935aac
@ -10,7 +10,7 @@ import (
|
|||||||
type ClosureRef interface {
|
type ClosureRef interface {
|
||||||
ReturnGas(*big.Int, *big.Int, *State)
|
ReturnGas(*big.Int, *big.Int, *State)
|
||||||
Address() []byte
|
Address() []byte
|
||||||
GetMem(*big.Int) *ethutil.Value
|
GetStorage(*big.Int) *ethutil.Value
|
||||||
SetStorage(*big.Int, *ethutil.Value)
|
SetStorage(*big.Int, *ethutil.Value)
|
||||||
N() *big.Int
|
N() *big.Int
|
||||||
}
|
}
|
||||||
@ -43,8 +43,8 @@ func NewClosure(caller ClosureRef, object *StateObject, script []byte, state *St
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Retuns the x element in data slice
|
// Retuns the x element in data slice
|
||||||
func (c *Closure) GetMem(x *big.Int) *ethutil.Value {
|
func (c *Closure) GetStorage(x *big.Int) *ethutil.Value {
|
||||||
m := c.object.GetMem(x)
|
m := c.object.GetStorage(x)
|
||||||
if m == nil {
|
if m == nil {
|
||||||
return ethutil.EmptyValue()
|
return ethutil.EmptyValue()
|
||||||
}
|
}
|
||||||
|
@ -66,7 +66,11 @@ func (self *State) Empty() {
|
|||||||
|
|
||||||
func (self *State) Update() {
|
func (self *State) Update() {
|
||||||
for _, stateObject := range self.stateObjects {
|
for _, stateObject := range self.stateObjects {
|
||||||
self.UpdateStateObject(stateObject)
|
if stateObject.remove {
|
||||||
|
self.trie.Delete(string(stateObject.Address()))
|
||||||
|
} else {
|
||||||
|
self.UpdateStateObject(stateObject)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -31,6 +31,11 @@ type StateObject struct {
|
|||||||
// left if this object is the coinbase. Gas is directly
|
// left if this object is the coinbase. Gas is directly
|
||||||
// purchased of the coinbase.
|
// purchased of the coinbase.
|
||||||
gasPool *big.Int
|
gasPool *big.Int
|
||||||
|
|
||||||
|
// Mark for deletion
|
||||||
|
// When an object is marked for deletion it will be delete from the trie
|
||||||
|
// during the "update" phase of the state transition
|
||||||
|
remove bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// Converts an transaction in to a state object
|
// Converts an transaction in to a state object
|
||||||
@ -77,15 +82,11 @@ func NewStateObjectFromBytes(address, data []byte) *StateObject {
|
|||||||
return object
|
return object
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *StateObject) State() *State {
|
func (self *StateObject) MarkForDeletion() {
|
||||||
return c.state
|
self.remove = true
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *StateObject) N() *big.Int {
|
func (c *StateObject) GetAddr(addr []byte) *ethutil.Value {
|
||||||
return big.NewInt(int64(c.Nonce))
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *StateObject) Addr(addr []byte) *ethutil.Value {
|
|
||||||
return ethutil.NewValueFromBytes([]byte(c.state.trie.Get(string(addr))))
|
return ethutil.NewValueFromBytes([]byte(c.state.trie.Get(string(addr))))
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -108,12 +109,7 @@ func (c *StateObject) SetStorage(num *big.Int, val *ethutil.Value) {
|
|||||||
func (c *StateObject) GetStorage(num *big.Int) *ethutil.Value {
|
func (c *StateObject) GetStorage(num *big.Int) *ethutil.Value {
|
||||||
nb := ethutil.BigToBytes(num, 256)
|
nb := ethutil.BigToBytes(num, 256)
|
||||||
|
|
||||||
return c.Addr(nb)
|
return c.GetAddr(nb)
|
||||||
}
|
|
||||||
|
|
||||||
/* DEPRECATED */
|
|
||||||
func (c *StateObject) GetMem(num *big.Int) *ethutil.Value {
|
|
||||||
return c.GetStorage(num)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *StateObject) GetInstr(pc *big.Int) *ethutil.Value {
|
func (c *StateObject) GetInstr(pc *big.Int) *ethutil.Value {
|
||||||
@ -124,14 +120,6 @@ func (c *StateObject) GetInstr(pc *big.Int) *ethutil.Value {
|
|||||||
return ethutil.NewValueFromBytes([]byte{c.script[pc.Int64()]})
|
return ethutil.NewValueFromBytes([]byte{c.script[pc.Int64()]})
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return the gas back to the origin. Used by the Virtual machine or Closures
|
|
||||||
func (c *StateObject) ReturnGas(gas, price *big.Int, state *State) {
|
|
||||||
/*
|
|
||||||
remainder := new(big.Int).Mul(gas, price)
|
|
||||||
c.AddAmount(remainder)
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *StateObject) AddAmount(amount *big.Int) {
|
func (c *StateObject) AddAmount(amount *big.Int) {
|
||||||
c.SetAmount(new(big.Int).Add(c.Amount, amount))
|
c.SetAmount(new(big.Int).Add(c.Amount, amount))
|
||||||
|
|
||||||
@ -148,6 +136,12 @@ func (c *StateObject) SetAmount(amount *big.Int) {
|
|||||||
c.Amount = amount
|
c.Amount = amount
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Gas setters and getters
|
||||||
|
//
|
||||||
|
|
||||||
|
// Return the gas back to the origin. Used by the Virtual machine or Closures
|
||||||
|
func (c *StateObject) ReturnGas(gas, price *big.Int, state *State) {}
|
||||||
func (c *StateObject) ConvertGas(gas, price *big.Int) error {
|
func (c *StateObject) ConvertGas(gas, price *big.Int) error {
|
||||||
total := new(big.Int).Mul(gas, price)
|
total := new(big.Int).Mul(gas, price)
|
||||||
if total.Cmp(c.Amount) > 0 {
|
if total.Cmp(c.Amount) > 0 {
|
||||||
@ -206,26 +200,17 @@ func (self *StateObject) Set(stateObject *StateObject) {
|
|||||||
self = stateObject
|
self = stateObject
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
//
|
||||||
func (self *StateObject) Copy() *StateObject {
|
// Attribute accessors
|
||||||
stCopy := &StateObject{}
|
//
|
||||||
stCopy.address = make([]byte, len(self.address))
|
|
||||||
copy(stCopy.address, self.address)
|
|
||||||
stCopy.Amount = new(big.Int).Set(self.Amount)
|
|
||||||
stCopy.ScriptHash = make([]byte, len(self.ScriptHash))
|
|
||||||
copy(stCopy.ScriptHash, self.ScriptHash)
|
|
||||||
stCopy.Nonce = self.Nonce
|
|
||||||
if self.state != nil {
|
|
||||||
stCopy.state = self.state.Copy()
|
|
||||||
}
|
|
||||||
stCopy.script = make([]byte, len(self.script))
|
|
||||||
copy(stCopy.script, self.script)
|
|
||||||
stCopy.initScript = make([]byte, len(self.initScript))
|
|
||||||
copy(stCopy.initScript, self.initScript)
|
|
||||||
|
|
||||||
return stCopy
|
func (c *StateObject) State() *State {
|
||||||
|
return c.state
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *StateObject) N() *big.Int {
|
||||||
|
return big.NewInt(int64(c.Nonce))
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
|
|
||||||
// Returns the address of the contract/account
|
// Returns the address of the contract/account
|
||||||
func (c *StateObject) Address() []byte {
|
func (c *StateObject) Address() []byte {
|
||||||
@ -242,6 +227,10 @@ func (c *StateObject) Init() Code {
|
|||||||
return c.initScript
|
return c.initScript
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Encoding
|
||||||
|
//
|
||||||
|
|
||||||
// State object encoding methods
|
// State object encoding methods
|
||||||
func (c *StateObject) RlpEncode() []byte {
|
func (c *StateObject) RlpEncode() []byte {
|
||||||
var root interface{}
|
var root interface{}
|
||||||
|
@ -166,7 +166,7 @@ func (lib *PEthereum) Create(key, valueStr, gasStr, gasPriceStr, script string)
|
|||||||
return lib.createTx(key, "", valueStr, gasStr, gasPriceStr, script)
|
return lib.createTx(key, "", valueStr, gasStr, gasPriceStr, script)
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetAddressFromNameReg(stateManager *ethchain.StateManager, name string) []byte {
|
func FindAddressInNameReg(stateManager *ethchain.StateManager, name string) []byte {
|
||||||
nameReg := EthereumConfig(stateManager).NameReg()
|
nameReg := EthereumConfig(stateManager).NameReg()
|
||||||
if nameReg != nil {
|
if nameReg != nil {
|
||||||
addr := ethutil.RightPadBytes([]byte(name), 32)
|
addr := ethutil.RightPadBytes([]byte(name), 32)
|
||||||
@ -186,7 +186,7 @@ func (lib *PEthereum) createTx(key, recipient, valueStr, gasStr, gasPriceStr, sc
|
|||||||
contractCreation = true
|
contractCreation = true
|
||||||
} else {
|
} else {
|
||||||
// Check if an address is stored by this address
|
// Check if an address is stored by this address
|
||||||
addr := GetAddressFromNameReg(lib.stateManager, recipient)
|
addr := FindAddressInNameReg(lib.stateManager, recipient)
|
||||||
if len(addr) > 0 {
|
if len(addr) > 0 {
|
||||||
hash = addr
|
hash = addr
|
||||||
} else {
|
} else {
|
||||||
|
@ -164,7 +164,7 @@ func (c *PStateObject) GetStorage(address string) string {
|
|||||||
// still has some magical object so we can't rely on
|
// still has some magical object so we can't rely on
|
||||||
// undefined or null at the QML side
|
// undefined or null at the QML side
|
||||||
if c.object != nil {
|
if c.object != nil {
|
||||||
val := c.object.GetMem(ethutil.Big("0x" + address))
|
val := c.object.GetStorage(ethutil.Big("0x" + address))
|
||||||
|
|
||||||
return val.BigInt().String()
|
return val.BigInt().String()
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user