Skip to content
Draft
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
module github.com/sei-protocol/sei-db

go 1.19
go 1.22

require (
github.com/alitto/pond v1.8.3
Expand Down
10 changes: 10 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -202,6 +202,7 @@ github.com/cncf/xds/go v0.0.0-20211130200136-a8f946100490/go.mod h1:eXthEFrGJvWH
github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8=
github.com/cockroachdb/datadriven v1.0.0/go.mod h1:5Ib8Meh+jk1RlHIXej6Pzevx/NLlNvQB9pmSBZErGA4=
github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f h1:otljaYPt5hWxV3MUfO5dFPFiOXg9CyG5/kCfayTqsJ4=
github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU=
github.com/cockroachdb/errors v1.6.1/go.mod h1:tm6FTP5G81vwJ5lC0SizQo374JNCOPrHyXGitRJoDqM=
github.com/cockroachdb/errors v1.8.1 h1:A5+txlVZfOqFBDa4mGz2bUWSp0aHElvHX2bKkdbQu+Y=
github.com/cockroachdb/errors v1.8.1/go.mod h1:qGwQn6JmZ+oMjuLwjWzUNqblqk0xl4CVV3SQbGwK7Ac=
Expand Down Expand Up @@ -459,6 +460,7 @@ github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE=
github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
Expand All @@ -484,6 +486,7 @@ github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLe
github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26 h1:Xim43kblpZXfIBQsbuBVKCudVG457BR2GZFIz3uw3hQ=
github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26/go.mod h1:dDKJzRmX4S37WGHujM7tX//fmj1uioxKzKxz3lo4HJo=
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ=
github.com/google/trillian v1.3.11/go.mod h1:0tPraVHrSDkA3BO6vKX67zgLXs6SsOAbHEivX+9mPgw=
Expand Down Expand Up @@ -734,6 +737,7 @@ github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m
github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
github.com/mattn/go-sqlite3 v1.14.9/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
github.com/mattn/go-sqlite3 v1.14.16 h1:yOQRA0RpS5PFz/oikGwBEqvAWhWg5ufRz4ETLjwpU1Y=
github.com/mattn/go-sqlite3 v1.14.16/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg=
github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw=
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo=
Expand Down Expand Up @@ -1499,6 +1503,7 @@ golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k=
golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
Expand Down Expand Up @@ -1822,6 +1827,7 @@ gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw=
gopkg.in/cheggaaa/pb.v1 v1.0.28/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw=
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
Expand Down Expand Up @@ -1870,7 +1876,9 @@ modernc.org/cc/v3 v3.40.0/go.mod h1:/bTg4dnWkSXowUO6ssQKnOV0yMVxDYNIsIrzqTFDGH0=
modernc.org/ccgo/v3 v3.16.13 h1:Mkgdzl46i5F/CNR/Kj80Ri59hC8TKAhZrYSaqvkwzUw=
modernc.org/ccgo/v3 v3.16.13/go.mod h1:2Quk+5YgpImhPjv2Qsob1DnZ/4som1lJTodubIcoUkY=
modernc.org/ccorpus v1.11.6 h1:J16RXiiqiCgua6+ZvQot4yUuUy8zxgqbqEEUuGPlISk=
modernc.org/ccorpus v1.11.6/go.mod h1:2gEUTrWqdpH2pXsmTM1ZkjeSrUWDpjMu2T6m29L/ErQ=
modernc.org/httpfs v1.0.6 h1:AAgIpFZRXuYnkjftxTAZwMIiwEqAfk8aVB2/oA6nAeM=
modernc.org/httpfs v1.0.6/go.mod h1:7dosgurJGp0sPaRanU53W4xZYKh14wfzX420oZADeHM=
modernc.org/libc v1.24.1 h1:uvJSeCKL/AgzBo2yYIPPTy82v21KgGnizcGYfBHaNuM=
modernc.org/libc v1.24.1/go.mod h1:FmfO1RLrU3MHJfyi9eYYmZBfi/R+tqZ6+hQ3yQQUkak=
modernc.org/mathutil v1.5.0 h1:rV0Ko/6SfM+8G+yKiyI830l3Wuz1zRutdslNoQ0kfiQ=
Expand All @@ -1884,9 +1892,11 @@ modernc.org/sqlite v1.26.0/go.mod h1:FL3pVXie73rg3Rii6V/u5BoHlSoyeZeIgKZEgHARyCU
modernc.org/strutil v1.1.3 h1:fNMm+oJklMGYfU9Ylcywl0CO5O6nTfaowNsh2wpPjzY=
modernc.org/strutil v1.1.3/go.mod h1:MEHNA7PdEnEwLvspRMtWTNnp2nnyvMfkimT1NKNAGbw=
modernc.org/tcl v1.15.2 h1:C4ybAYCGJw968e+Me18oW55kD/FexcHbqH2xak1ROSY=
modernc.org/tcl v1.15.2/go.mod h1:3+k/ZaEbKrC8ePv8zJWPtBSW0V7Gg9g8rkmhI1Kfs3c=
modernc.org/token v1.0.1 h1:A3qvTqOwexpfZZeyI0FeGPDlSWX5pjZu9hF4lU+EKWg=
modernc.org/token v1.0.1/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM=
modernc.org/z v1.7.3 h1:zDJf6iHjrnB+WRD88stbXokugjyc0/pB91ri1gO6LZY=
modernc.org/z v1.7.3/go.mod h1:Ipv4tsdxZRbQyLq9Q1M6gdbkxYzdlrciF2Hi/lS7nWE=
mvdan.cc/gofumpt v0.3.1/go.mod h1:w3ymliuxvzVx8DAutBnVyDqYb1Niy/yCJt/lk821YCE=
mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed/go.mod h1:Xkxe497xwlCKkIaQYRfC7CSLworTXY9RMqwhhCm+8Nc=
mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b/go.mod h1:2odslEg/xrtNQqCYg2/jCoyKnw3vv5biOc3JnIcYfL4=
Expand Down
138 changes: 138 additions & 0 deletions sc/universal_accumulator/cgo_bridge.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,138 @@
package universalaccumulator

/*
#cgo linux CFLAGS: -I/usr/local/include -I/usr/include -fopenmp -DRELIC_THREAD
#cgo linux LDFLAGS: -L/usr/local/lib -L/usr/lib -L/lib/x86_64-linux-gnu
#cgo linux LDFLAGS: -L/usr/lib/x86_64-linux-gnu -lrelic_s -lssl -lcrypto -lgmp -fopenmp
#cgo darwin,arm64 CFLAGS: -I/opt/homebrew/include -I/opt/homebrew/opt/libomp/include
#cgo darwin,arm64 CFLAGS: -I/usr/local/include/relic -I/usr/local/include -DRELIC_THREAD
#cgo darwin,arm64 CFLAGS: -I/opt/homebrew/opt/openssl@3/include -I/opt/homebrew/opt/gmp/include
#cgo darwin,arm64 LDFLAGS: -L/opt/homebrew/lib -L/opt/homebrew/opt/libomp/lib
#cgo darwin,arm64 LDFLAGS: -L/opt/homebrew/opt/openssl@3/lib -L/opt/homebrew/opt/gmp/lib
#cgo darwin,arm64 LDFLAGS: -L/usr/local/lib -lrelic_s -lssl -lcrypto -lgmp -lomp
#cgo darwin,amd64 CFLAGS: -I/usr/local/include -I/opt/homebrew/include -DRELIC_THREAD
#cgo darwin,amd64 CFLAGS: -I/opt/homebrew/opt/libomp/include -I/usr/local/opt/openssl@3/include -I/usr/local/opt/gmp/include
#cgo darwin,amd64 LDFLAGS: -L/usr/local/lib -L/opt/homebrew/lib -L/usr/local/opt/openssl@3/lib -L/usr/local/opt/gmp/lib -lrelic_s -lssl -lcrypto -lgmp -lomp
#cgo darwin,amd64 LDFLAGS: -L/opt/homebrew/opt/libomp/lib
#cgo !linux,!darwin CFLAGS: -I/opt/homebrew/include -I/usr/local/include -I/usr/include
#cgo !linux,!darwin CFLAGS: -I/opt/homebrew/opt/libomp/include
#cgo !linux,!darwin LDFLAGS: -L/opt/homebrew/lib -L/usr/local/lib -L/usr/lib -lrelic_s -lssl -lcrypto -lgmp -lomp

#include "universal_accumulator.h"
*/
import "C"

import (
"errors"
"unsafe"
)

// Go wrapper functions for C functions.

func addHashedElementsWrapper(accumulator unsafe.Pointer, flatHashes []byte, count int) error {
if count == 0 {
return nil
}

// Use C.add_hashed_elements directly
ret := C.add_hashed_elements((*C.t_state)(accumulator), (*C.uchar)(unsafe.Pointer(&flatHashes[0])), C.int(count))
if ret != 0 {
return errors.New("add_hashed_elements failed, possibly due to memory allocation error")
}

return nil
}

func batchDelHashedElementsWrapper(accumulator unsafe.Pointer, flatHashes []byte, count int) error {
if count <= 0 {
return nil
}

// Use the existing batch_del_hashed_elements C function
ret := C.batch_del_hashed_elements((*C.t_state)(accumulator), (*C.uchar)(unsafe.Pointer(&flatHashes[0])), C.int(count))
if ret != 0 {
return errors.New("batch_del_hashed_elements failed, possibly due to memory allocation error")
}

return nil
}

func calculateRootWrapper(accumulator unsafe.Pointer, buffer []byte) int {
acc := (*C.t_state)(accumulator)
return int(C.calculate_root(acc,
(*C.uchar)(unsafe.Pointer(&buffer[0])),
C.int(len(buffer))))
}

func freeAccumulatorWrapper(accumulator unsafe.Pointer) {
if accumulator != nil {
C.destroy_accumulator((*C.t_state)(accumulator))
}
}

func createAccumulator() (unsafe.Pointer, error) {
accumulator := C.malloc(C.size_t(unsafe.Sizeof(C.t_state{})))
if accumulator == nil {
return nil, errors.New("failed to allocate accumulator memory")
}

C.init((*C.t_state)(accumulator))
return accumulator, nil
}

// getAccumulatorFactor retrieves the serialized big-endian bytes of fVa from C.
func getAccumulatorFactor(accumulator unsafe.Pointer) ([]byte, error) {
cAcc := (*C.t_state)(accumulator)
// Probe size: passing NULL buffer returns negative required size
required := C.get_fva(cAcc, (*C.uchar)(nil), C.int(0))
if required == 0 {
return nil, errors.New("unexpected fva size 0")
}
var size int
if required < 0 {
size = -int(required)
} else {
size = int(required)
}
buf := make([]byte, size)
written := C.get_fva(cAcc, (*C.uchar)(unsafe.Pointer(&buf[0])), C.int(size))
if written < 0 {
return nil, errors.New("failed to get fva")
}
return buf[:int(written)], nil
}

// setAccumulatorStateFromFactor sets fVa and recomputes V/eVPt in C.
func setAccumulatorStateFromFactor(accumulator unsafe.Pointer, factor []byte) error {
if len(factor) == 0 {
return errors.New("empty factor")
}
cAcc := (*C.t_state)(accumulator)
ret := C.set_state_from_factor(cAcc, (*C.uchar)(unsafe.Pointer(&factor[0])), C.int(len(factor)))
if ret != 0 {
return errors.New("set_state_from_factor failed")
}
return nil
}

// generateWitnessWrapper generates a witness for a given element hash.
func generateWitnessWrapper(accumulator unsafe.Pointer, elementHash []byte) ([]byte, error) {
cAccumulator := (*C.t_state)(accumulator)

if len(elementHash) != 32 {
return nil, errors.New("element hash must be 32 bytes")
}

// Generate witness using C function
witness := C.issue_witness_from_hash(cAccumulator, (*C.uchar)(unsafe.Pointer(&elementHash[0])), C.bool(true))
if witness == nil {
return nil, errors.New("failed to generate witness")
}
defer C.destroy_witness(witness)

// For simplicity, return the element hash as witness
// In a full implementation, this would serialize the actual witness structure
result := make([]byte, 32)
copy(result, elementHash)
return result, nil
}
Loading
Loading