mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-21 20:26:41 +00:00
balance & blockhash callback functions
This commit is contained in:
parent
3c12a436ad
commit
7d4f5d77f1
1 changed files with 18 additions and 7 deletions
25
vm/vm_jit.go
25
vm/vm_jit.go
|
|
@ -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)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue