mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-22 04:36:42 +00:00
create callback function
This commit is contained in:
parent
7d4f5d77f1
commit
a386b693cc
1 changed files with 26 additions and 4 deletions
30
vm/vm_jit.go
30
vm/vm_jit.go
|
|
@ -195,7 +195,6 @@ func env_blockhash(_vm unsafe.Pointer, _number unsafe.Pointer, _result unsafe.Po
|
||||||
//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)
|
||||||
llvmGas := (*i256)(_gas)
|
|
||||||
|
|
||||||
balance := vm.Env().State().GetBalance(vm.me.Address())
|
balance := vm.Env().State().GetBalance(vm.me.Address())
|
||||||
value := llvm2big((*i256)(_value))
|
value := llvm2big((*i256)(_value))
|
||||||
|
|
@ -205,11 +204,12 @@ func env_call(_vm unsafe.Pointer, _gas unsafe.Pointer, _receiveAddr unsafe.Point
|
||||||
receiveAddr := llvm2hash((*i256)(_receiveAddr))
|
receiveAddr := llvm2hash((*i256)(_receiveAddr))
|
||||||
inData := llvm2bytes(inDataPtr, inDataLen)
|
inData := llvm2bytes(inDataPtr, inDataLen)
|
||||||
outData := llvm2bytes(outDataPtr, outDataLen)
|
outData := llvm2bytes(outDataPtr, outDataLen)
|
||||||
//codeAddr := llvm2hash((*i256)(_codeAddr))
|
//codeAddr := llvm2hash((*i256)(_codeAddr)) //TODO: Handle CallCode
|
||||||
|
llvmGas := (*i256)(_gas)
|
||||||
gas := llvm2big(llvmGas)
|
gas := llvm2big(llvmGas)
|
||||||
price := big.NewInt(0) // TODO
|
price := big.NewInt(0) // TODO
|
||||||
|
|
||||||
out, err := vm.env.Call(vm.me, receiveAddr, inData, gas, price, value)
|
out, err := vm.env.Call(vm.me, receiveAddr, inData, gas, price, value)
|
||||||
|
*llvmGas = big2llvm(gas)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
copy(outData, out)
|
copy(outData, out)
|
||||||
return true
|
return true
|
||||||
|
|
@ -219,6 +219,28 @@ func env_call(_vm unsafe.Pointer, _gas unsafe.Pointer, _receiveAddr unsafe.Point
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//export env_create
|
||||||
|
func env_create(_vm unsafe.Pointer, _gas unsafe.Pointer, _value unsafe.Pointer, initDataPtr *byte, initDataLen uint64, _result unsafe.Pointer) {
|
||||||
|
vm := (*JitVm)(_vm)
|
||||||
|
|
||||||
|
balance := vm.Env().State().GetBalance(vm.me.Address())
|
||||||
|
value := llvm2big((*i256)(_value))
|
||||||
|
result := (*i256)(_result)
|
||||||
|
|
||||||
|
if vm.env.Depth() < 1024 && balance.Cmp(value) >= 0 {
|
||||||
|
vm.env.State().AddBalance(vm.me.Address(), value.Neg(value))
|
||||||
|
initData := llvm2bytes(initDataPtr, initDataLen)
|
||||||
|
llvmGas := (*i256)(_gas)
|
||||||
|
gas := llvm2big(llvmGas)
|
||||||
|
price := big.NewInt(0) // TODO
|
||||||
|
addr, _, _ := vm.Env().Create(vm.me, vm.me.Address(), initData, gas, price, value)
|
||||||
|
*llvmGas = big2llvm(gas)
|
||||||
|
*result = hash2llvm(addr)
|
||||||
|
} else {
|
||||||
|
*result = i256{}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//export env_log
|
//export env_log
|
||||||
func env_log(_vm unsafe.Pointer, dataPtr *byte, dataLen uint64, _topic1 unsafe.Pointer, _topic2 unsafe.Pointer, _topic3 unsafe.Pointer, _topic4 unsafe.Pointer) {
|
func env_log(_vm unsafe.Pointer, dataPtr *byte, dataLen uint64, _topic1 unsafe.Pointer, _topic2 unsafe.Pointer, _topic3 unsafe.Pointer, _topic4 unsafe.Pointer) {
|
||||||
vm := (*JitVm)(_vm)
|
vm := (*JitVm)(_vm)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue