good morning!!!!

Skip to content
Snippets Groups Projects
Commit b608a80e authored by Jeffrey Wilcke's avatar Jeffrey Wilcke
Browse files

More opcodes

parent 489576b6
Branches
Tags
No related merge requests found
......@@ -524,7 +524,16 @@ out:
case oIND:
bm.stack.Push(big.NewInt(int64(pc)))
case oEXTRO:
memAddr := bm.stack.Pop()
contractAddr := bm.stack.Pop().Bytes()
// Push the contract's memory on to the stack
bm.stack.Push(getContractMemory(block, contractAddr, memAddr))
case oBALANCE:
// Pushes the balance of the popped value on to the stack
d := block.State().Get(bm.stack.Pop().String())
ether := ethutil.NewEtherFromData([]byte(d))
bm.stack.Push(ether.Amount)
case oMKTX:
case oSUICIDE:
}
......@@ -533,3 +542,20 @@ out:
bm.stack.Print()
}
// Returns an address from the specified contract's address
func getContractMemory(block *ethutil.Block, contractAddr []byte, memAddr *big.Int) *big.Int {
contract := block.GetContract(contractAddr)
if contract == nil {
log.Panicf("invalid contract addr %x", contractAddr)
}
val := contract.State().Get(memAddr.String())
// decode the object as a big integer
decoder := ethutil.NewRlpDecoder([]byte(val))
if decoder.IsNil() {
return ethutil.BigFalse
}
return decoder.AsBigInt()
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment