mirror of
https://gitlab.com/pulsechaincom/erigon-pulse.git
synced 2024-12-25 04:57:17 +00:00
8a877c227a
* Expose C Handle of lmdbTx * LoadExecutionFunctionPointer * silkworm ExecuteBlocks * linter * CLI flag for SilkwormExecutionFunc * linter * Call SilkwormExecutionFunc in SpawnExecuteBlocksStage * Commit transaction after Silkworm execution * Fix batch initialization * Make batch_size uint64_t instead of size_t * max_block in silkworm_execute_blocks * More accurate logProgress * Use CHandle exposed by lmdb-go * Enable Silkworm on Linux only * Update lmdb-go * Error when attempting to use Silkworm not on Linux * Move SilkwormFlag from cmd/utils/flags.go to turbo/cli/flags.go * Integrate Silkworm into cmd/integration * Check against ReaderBuilder/WriterBuilder/ChangeSetHook in Silkworm execution * Refactor SpawnExecuteBlocksStage * linters * Small clean-ups * Move ChangeSetHook inside executeBlockWithGo * No need to tamper with batch size in executeBlocksWithSilkworm * fix * Fix * Fixup Co-authored-by: Alexey Sharp <alexeysharp@Alexeys-iMac.local>
36 lines
756 B
Go
36 lines
756 B
Go
package silkworm
|
|
|
|
/*
|
|
#cgo LDFLAGS: -ldl
|
|
#include <dlfcn.h>
|
|
#include <stdlib.h>
|
|
*/
|
|
import "C"
|
|
|
|
import (
|
|
"fmt"
|
|
"unsafe"
|
|
)
|
|
|
|
const funcName = "silkworm_execute_blocks"
|
|
|
|
func LoadExecutionFunctionPointer(dllPath string) (unsafe.Pointer, error) {
|
|
cPath := C.CString(dllPath)
|
|
defer C.free(unsafe.Pointer(cPath))
|
|
dllHandle := C.dlopen(cPath, C.RTLD_LAZY)
|
|
if dllHandle == nil {
|
|
err := C.GoString(C.dlerror())
|
|
return nil, fmt.Errorf("failed to load dynamic library %s: %s", dllPath, err)
|
|
}
|
|
|
|
cName := C.CString(funcName)
|
|
defer C.free(unsafe.Pointer(cName))
|
|
funcPtr := C.dlsym(dllHandle, cName)
|
|
if funcPtr == nil {
|
|
err := C.GoString(C.dlerror())
|
|
return nil, fmt.Errorf("failed to find the %s function: %s", funcName, err)
|
|
}
|
|
|
|
return funcPtr, nil
|
|
}
|