balance & blockhash callback functions

This commit is contained in:
Paweł Bylica 2015-01-14 17:13:55 +01:00
parent 3c12a436ad
commit 7d4f5d77f1

View file

@ -144,13 +144,8 @@ func (self *JitVm) Env() Environment {
//export env_sha3 //export env_sha3
func env_sha3(dataPtr *byte, length uint64, hashPtr unsafe.Pointer) { 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) data := llvm2bytes(dataPtr, length)
fmt.Printf("\tdata: %x\n", data)
hash := crypto.Sha3(data); hash := crypto.Sha3(data);
fmt.Printf("\thash: %x\n", hash)
hashHdr := reflect.SliceHeader{ hashHdr := reflect.SliceHeader{
Data: uintptr(hashPtr), Data: uintptr(hashPtr),
@ -158,10 +153,8 @@ func env_sha3(dataPtr *byte, length uint64, hashPtr unsafe.Pointer) {
Cap: 32, Cap: 32,
} }
oHash := *(*[]byte)(unsafe.Pointer(&hashHdr)) oHash := *(*[]byte)(unsafe.Pointer(&hashHdr))
fmt.Printf("\tout0: %x\n", oHash)
copy(oHash, hash) copy(oHash, hash)
fmt.Printf("\tout1: %x\n", oHash)
} }
//export env_sstore //export env_sstore
@ -181,6 +174,24 @@ func env_sload(vmPtr unsafe.Pointer, indexPtr unsafe.Pointer, resultPtr unsafe.P
*result = hash2llvm(value) *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 //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 { 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) vm := (*JitVm)(_vm)