From 7d4f5d77f187afe18c15715bfb52090743eb73a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Bylica?= Date: Wed, 14 Jan 2015 17:13:55 +0100 Subject: [PATCH] balance & blockhash callback functions --- vm/vm_jit.go | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/vm/vm_jit.go b/vm/vm_jit.go index be68d6c515..d37f30a02c 100644 --- a/vm/vm_jit.go +++ b/vm/vm_jit.go @@ -144,13 +144,8 @@ func (self *JitVm) Env() Environment { //export env_sha3 func env_sha3(dataPtr *byte, length uint64, hashPtr unsafe.Pointer) { - fmt.Printf("env_sha3(%p, %d, %p)\n", dataPtr, length, hashPtr); - data := llvm2bytes(dataPtr, length) - fmt.Printf("\tdata: %x\n", data) - hash := crypto.Sha3(data); - fmt.Printf("\thash: %x\n", hash) hashHdr := reflect.SliceHeader{ Data: uintptr(hashPtr), @@ -158,10 +153,8 @@ func env_sha3(dataPtr *byte, length uint64, hashPtr unsafe.Pointer) { Cap: 32, } oHash := *(*[]byte)(unsafe.Pointer(&hashHdr)) - fmt.Printf("\tout0: %x\n", oHash) copy(oHash, hash) - fmt.Printf("\tout1: %x\n", oHash) } //export env_sstore @@ -181,6 +174,24 @@ func env_sload(vmPtr unsafe.Pointer, indexPtr unsafe.Pointer, resultPtr unsafe.P *result = hash2llvm(value) } +//export env_balance +func env_balance(_vm unsafe.Pointer, _addr unsafe.Pointer, _result unsafe.Pointer) { + vm := (*JitVm)(_vm) + addr := llvm2hash((*i256)(_addr)) + balance := vm.Env().State().GetBalance(addr) + result := (*i256)(_result) + *result = big2llvm(balance) +} + +//export env_blockhash +func env_blockhash(_vm unsafe.Pointer, _number unsafe.Pointer, _result unsafe.Pointer) { + vm := (*JitVm)(_vm) + number := llvm2big((*i256)(_number)) + hash := vm.Env().GetHash(uint64(number.Int64())) + result := (*i256)(_result) + *result = hash2llvm(hash) +} + //export env_call func env_call(_vm unsafe.Pointer, _gas unsafe.Pointer, _receiveAddr unsafe.Pointer, _value unsafe.Pointer, inDataPtr *byte, inDataLen uint64, outDataPtr *byte, outDataLen uint64, _codeAddr unsafe.Pointer) bool { vm := (*JitVm)(_vm)