sonr/Makefile

346 lines
12 KiB
Makefile
Raw Normal View History

2024-07-05 22:20:13 -04:00
#!/usr/bin/make -f
PACKAGES_SIMTEST=$(shell go list ./... | grep '/simulation')
VERSION := $(shell echo $(shell git describe --tags) | sed 's/^v//')
COMMIT := $(shell git log -1 --format='%H')
LEDGER_ENABLED ?= true
SDK_PACK := $(shell go list -m github.com/cosmos/cosmos-sdk | sed 's/ /\@/g')
BINDIR ?= $(GOPATH)/bin
SIMAPP = ./app
# for dockerized protobuf tools
DOCKER := $(shell which docker)
Feature/update dockerfile (#6) * chore: remove unused new.Dockerfile * feat: add DID model definitions * fix: Fix EncodePublicKey method in KeyInfo struct * feat: Update `EncodePublicKey` to be the inverse of `DecodePublicKey` * refactor: update AssetInfo protobuf definition * fix: update default assets with correct asset types * fix: Initialize IPFS client and check for mounted directories * feat: Improve IPFS client initialization and mount checking * feat: Add local filesystem check for IPFS and IPNS * fix: Use Unixfs().Get() instead of Cat() for IPFS and IPNS content retrieval * feat: Update GetCID and GetIPNS functions to read data from IPFS node * fix: Ensure IPFS client is initialized before pinning CID * feat: Add AddFile and AddFolder methods * feat: add IPFS file system abstraction * feat: Implement IPFS file, location, and filesystem abstractions * refactor: remove unused functions and types * refactor: remove unused FileSystem interface * feat: add initial wasm entrypoint * feat: add basic vault command operations * docs: add vault module features * test: remove test for MsgUpdateParams * refactor: Replace PrimaryKey with Property struct in zkprop.go * feat: Update the `CreateWitness` and `CreateAccumulator` and `VerifyWitness` and `UpdateAccumulator` to Use the new `Accumulator` and `Witness` types. Then Clean up the code in the file and refactor the marshalling methods * <no value> * feat: add KeyCurve and KeyType to KeyInfo in genesis * feat: add WASM build step to devbox.json * feat: Add zkgate.go file * feat: Uncomment and modify zkgate code to work with Property struct * feat: Merge zkgate.go and zkprop.go logic * feat: implement API endpoints for profile management * refactor: remove unused template file * feat(orm): remove unused ORM models * feat: add persistent SQLite database support in WASM * fix: Update module names in protobuf files * feat: Add method to initialize SQLite database * fix: update go-sqlite3 dependency to version 1.14.23 * feat: introduce database layer * feat: Implement database layer for Vault node * feature/update-dockerfile * feat: Add keyshares table * fix: Reorder the SQL statements in the tables.go file * feat: Update the `createCredentialsTable` method to match the proper Credential struct * feat: Update createProfilesTable and add createPropertiesTable * feat: Add constant SQL queries to queries.go and use prepared statements in db.go * feat: Add createKeysharesTable to internal/db/db.go * feat: Update `createPermissionsTable` to match Permissions struct * feat: Add database enum types * feat: Add DIDNamespace and PermissionScope enums * feat: Add DBConfig and DBOption types * feat: Update the db implementation to use the provided go library * fix: update db implementation to use go-sqlite3 v0.18.2 * fix: Refactor database connection and statement handling * feat: Simplify db.go implementation * feat: Convert constant SQL queries to functions in queries.go and update db.go to use prepared statements * feat: Add models.go file with database table structs * fix: Remove unused statement map and prepare statements diff --git a/internal/db/db.go b/internal/db/db.go index 201d09b..d4d4d4e 100644 --- a/internal/db/db.go +++ b/internal/db/db.go @@ -32,11 +32,6 @@ func Open(config *DBConfig) (*DB, error) { Conn: conn, } - if err := createTables(db); err != nil { - conn.Close() - return nil, fmt.Errorf("failed to create tables: %w", err) - } - return db, nil } @@ -61,114 +56,3 @@ func createTables(db *DB) error { return nil } -// AddAccount adds a new account to the database -func (db *DB) AddAccount(name, address string) error { - return db.Exec(insertAccountQuery(name, address)) -} - -// AddAsset adds a new asset to the database -func (db *DB) AddAsset(name, symbol string, decimals int, chainID int64) error { - return db.Exec(insertAssetQuery(name, symbol, decimals, chainID)) -} - -// AddChain adds a new chain to the database -func (db *DB) AddChain(name, networkID string) error { - return db.Exec(insertChainQuery(name, networkID)) -} - -// AddCredential adds a new credential to the database -func (db *DB) AddCredential( - handle, controller, attestationType, origin string, - credentialID, publicKey []byte, - transport string, - signCount uint32, - userPresent, userVerified, backupEligible, backupState, cloneWarning bool, -) error { - return db.Exec(insertCredentialQuery( - handle, - controller, - attestationType, - origin, - credentialID, - publicKey, - transport, - signCount, - userPresent, - userVerified, - backupEligible, - backupState, - cloneWarning, - )) -} - -// AddProfile adds a new profile to the database -func (db *DB) AddProfile( - id, subject, controller, originURI, publicMetadata, privateMetadata string, -) error { - return db.statements["insertProfile"].Exec( - id, subject, controller, originURI, publicMetadata, privateMetadata, - ) -} - -// AddProperty adds a new property to the database -func (db *DB) AddProperty( - profileID, key, accumulator, propertyKey string, -) error { - return db.statements["insertProperty"].Exec( - profileID, key, accumulator, propertyKey, - ) -} - -// AddPermission adds a new permission to the database -func (db *DB) AddPermission( - serviceID string, - grants []DIDNamespace, - scopes []PermissionScope, -) error { - grantsJSON, err := json.Marshal(grants) - if err != nil { - return fmt.Errorf("failed to marshal grants: %w", err) - } - - scopesJSON, err := json.Marshal(scopes) - if err != nil { - return fmt.Errorf("failed to marshal scopes: %w", err) - } - - return db.statements["insertPermission"].Exec( - serviceID, string(grantsJSON), string(scopesJSON), - ) -} - -// GetPermission retrieves the permission for the given service ID -func (db *DB) GetPermission(serviceID string) ([]DIDNamespace, []PermissionScope, error) { - row := db.statements["getPermission"].QueryRow(serviceID) - - var grantsJSON, scopesJSON string - if err := row.Scan(&grantsJSON, &scopesJSON); err != nil { - return nil, nil, fmt.Errorf("failed to get permission: %w", err) - } - - var grants []DIDNamespace - if err := json.Unmarshal([]byte(grantsJSON), &grants); err != nil { - return nil, nil, fmt.Errorf("failed to unmarshal grants: %w", err) - } - - var scopes []PermissionScope - if err := json.Unmarshal([]byte(scopesJSON), &scopes); err != nil { - return nil, nil, fmt.Errorf("failed to unmarshal scopes: %w", err) - } - - return grants, scopes, nil -} - -// Close closes the database connection and finalizes all prepared statements -func (db *DB) Close() error { - for _, stmt := range db.statements { - stmt.Finalize() - } - return db.Conn.Close() -} diff --git a/internal/db/queries.go b/internal/db/queries.go index 807d701..e69de29 100644 --- a/internal/db/queries.go +++ b/internal/db/queries.go @@ -1,79 +0,0 @@ -package db - -import "fmt" - -// Account queries -func insertAccountQuery(name, address string) string { - return fmt.Sprintf(`INSERT INTO accounts (name, address) VALUES (%s, %s)`, name, address) -} - -// Asset queries -func insertAssetQuery(name, symbol string, decimals int, chainID int64) string { - return fmt.Sprintf( - `INSERT INTO assets (name, symbol, decimals, chain_id) VALUES (%s, %s, %d, %d)`, - name, - symbol, - decimals, - chainID, - ) -} - -// Chain queries -func insertChainQuery(name string, networkID string) string { - return fmt.Sprintf(`INSERT INTO chains (name, network_id) VALUES (%s, %d)`, name, networkID) -} - -// Credential queries -func insertCredentialQuery( - handle, controller, attestationType, origin string, - credentialID, publicKey []byte, - transport string, - signCount uint32, - userPresent, userVerified, backupEligible, backupState, cloneWarning bool, -) string { - return fmt.Sprintf(`INSERT INTO credentials ( - handle, controller, attestation_type, origin, - credential_id, public_key, transport, sign_count, - user_present, user_verified, backup_eligible, - backup_state, clone_warning - ) VALUES (%s, %s, %s, %s, %s, %s, %s, %d, %t, %t, %t, %t, %t)`, - handle, controller, attestationType, origin, - credentialID, publicKey, transport, signCount, - userPresent, userVerified, backupEligible, - backupState, cloneWarning) -} - -// Profile queries -func insertProfileQuery( - id, subject, controller, originURI, publicMetadata, privateMetadata string, -) string { - return fmt.Sprintf(`INSERT INTO profiles ( - id, subject, controller, origin_uri, - public_metadata, private_metadata - ) VALUES (%s, %s, %s, %s, %s, %s)`, - id, subject, controller, originURI, - publicMetadata, privateMetadata) -} - -// Property queries -func insertPropertyQuery(profileID, key, accumulator, propertyKey string) string { - return fmt.Sprintf(`INSERT INTO properties ( - profile_id, key, accumulator, property_key - ) VALUES (%s, %s, %s, %s)`, - profileID, key, accumulator, propertyKey) -} - -// Permission queries -func insertPermissionQuery(serviceID, grants, scopes string) string { - return fmt.Sprintf( - `INSERT INTO permissions (service_id, grants, scopes) VALUES (%s, %s, %s)`, - serviceID, - grants, - scopes, - ) -} - -// GetPermission query -func getPermissionQuery(serviceID string) string { - return fmt.Sprintf(`SELECT grants, scopes FROM permissions WHERE service_id = %s`, serviceID) -} * fix: update Makefile to use sonrd instead of wasmd * feat: Add targets for templ and vault in Makefile and use only make in devbox.json * feat: add SQLite database support * bump: version 0.6.0 → 0.7.0 * refactor: upgrade actions to latest versions
2024-09-05 01:24:57 -04:00
HTTPS_GIT := github.com/onsonr/sonr.git
2024-07-05 22:20:13 -04:00
export GO111MODULE = on
# process build tags
build_tags = netgo
ifeq ($(LEDGER_ENABLED),true)
ifeq ($(OS),Windows_NT)
GCCEXE = $(shell where gcc.exe 2> NUL)
ifeq ($(GCCEXE),)
$(error gcc.exe not installed for ledger support, please install or set LEDGER_ENABLED=false)
else
build_tags += ledger
endif
else
UNAME_S = $(shell uname -s)
ifeq ($(UNAME_S),OpenBSD)
$(warning OpenBSD detected, disabling ledger support (https://github.com/cosmos/cosmos-sdk/issues/1988))
else
GCC = $(shell command -v gcc 2> /dev/null)
ifeq ($(GCC),)
$(error gcc not installed for ledger support, please install or set LEDGER_ENABLED=false)
else
build_tags += ledger
endif
endif
endif
endif
ifeq ($(WITH_CLEVELDB),yes)
build_tags += gcc
endif
build_tags += $(BUILD_TAGS)
build_tags := $(strip $(build_tags))
whitespace :=
empty = $(whitespace) $(whitespace)
comma := ,
build_tags_comma_sep := $(subst $(empty),$(comma),$(build_tags))
# process linker flags
2024-07-06 03:17:04 -04:00
ldflags = -X github.com/cosmos/cosmos-sdk/version.Name=sonr \
2024-07-05 22:20:13 -04:00
-X github.com/cosmos/cosmos-sdk/version.AppName=sonrd \
-X github.com/cosmos/cosmos-sdk/version.Version=$(VERSION) \
-X github.com/cosmos/cosmos-sdk/version.Commit=$(COMMIT) \
-X "github.com/cosmos/cosmos-sdk/version.BuildTags=$(build_tags_comma_sep)"
ifeq ($(WITH_CLEVELDB),yes)
ldflags += -X github.com/cosmos/cosmos-sdk/types.DBBackend=cleveldb
endif
ifeq ($(LINK_STATICALLY),true)
ldflags += -linkmode=external -extldflags "-Wl,-z,muldefs -static"
endif
ldflags += $(LDFLAGS)
ldflags := $(strip $(ldflags))
BUILD_FLAGS := -tags "$(build_tags_comma_sep)" -ldflags '$(ldflags)' -trimpath
# The below include contains the tools and runsim targets.
include contrib/devtools/Makefile
all: install lint test
build: go.sum
ifeq ($(OS),Windows_NT)
$(error wasmd server not supported. Use "make build-windows-client" for client)
exit 1
else
go build -mod=readonly $(BUILD_FLAGS) -o build/sonrd ./cmd/sonrd
endif
build-windows-client: go.sum
GOOS=windows GOARCH=amd64 go build -mod=readonly $(BUILD_FLAGS) -o build/sonrd.exe ./cmd/sonrd
build-contract-tests-hooks:
ifeq ($(OS),Windows_NT)
go build -mod=readonly $(BUILD_FLAGS) -o build/contract_tests.exe ./cmd/contract_tests
else
go build -mod=readonly $(BUILD_FLAGS) -o build/contract_tests ./cmd/contract_tests
endif
install: go.sum
go install -mod=readonly $(BUILD_FLAGS) ./cmd/sonrd
########################################
### Tools & dependencies
go-mod-cache: go.sum
@echo "--> Download go modules to local cache"
@go mod download
go.sum: go.mod
@echo "--> Ensure dependencies have not been modified"
@go mod verify
draw-deps:
@# requires brew install graphviz or apt-get install graphviz
go install github.com/RobotsAndPencils/goviz@latest
@goviz -i ./cmd/sonrd -d 2 | dot -Tpng -o dependency-graph.png
clean:
rm -rf snapcraft-local.yaml build/
distclean: clean
rm -rf vendor/
########################################
### Testing
test: test-unit
test-all: test-race test-cover test-system
test-unit:
@VERSION=$(VERSION) go test -mod=readonly -tags='ledger test_ledger_mock' ./...
test-race:
@VERSION=$(VERSION) go test -mod=readonly -race -tags='ledger test_ledger_mock' ./...
test-cover:
@go test -mod=readonly -timeout 30m -race -coverprofile=coverage.txt -covermode=atomic -tags='ledger test_ledger_mock' ./...
benchmark:
@go test -mod=readonly -bench=. ./...
test-sim-import-export: runsim
@echo "Running application import/export simulation. This may take several minutes..."
@$(BINDIR)/runsim -Jobs=4 -SimAppPkg=$(SIMAPP) -ExitOnFail 50 5 TestAppImportExport
test-sim-multi-seed-short: runsim
@echo "Running short multi-seed application simulation. This may take awhile!"
@$(BINDIR)/runsim -Jobs=4 -SimAppPkg=$(SIMAPP) -ExitOnFail 50 5 TestFullAppSimulation
test-sim-deterministic: runsim
@echo "Running application deterministic simulation. This may take awhile!"
@$(BINDIR)/runsim -Jobs=4 -SimAppPkg=$(SIMAPP) -ExitOnFail 1 1 TestAppStateDeterminism
test-system: install
$(MAKE) -C tests/system/ test
###############################################################################
### Linting ###
###############################################################################
format-tools:
go install mvdan.cc/gofumpt@v0.4.0
go install github.com/client9/misspell/cmd/misspell@v0.3.4
go install github.com/daixiang0/gci@v0.11.2
lint: format-tools
golangci-lint run --tests=false
find . -name '*.go' -type f -not -path "./vendor*" -not -path "./tests/system/vendor*" -not -path "*.git*" -not -path "*_test.go" | xargs gofumpt -d
format: format-tools
find . -name '*.go' -type f -not -path "./vendor*" -not -path "./tests/system/vendor*" -not -path "*.git*" -not -path "./client/lcd/statik/statik.go" | xargs gofumpt -w
find . -name '*.go' -type f -not -path "./vendor*" -not -path "./tests/system/vendor*" -not -path "*.git*" -not -path "./client/lcd/statik/statik.go" | xargs misspell -w
find . -name '*.go' -type f -not -path "./vendor*" -not -path "./tests/system/vendor*" -not -path "*.git*" -not -path "./client/lcd/statik/statik.go" | xargs gci write --skip-generated -s standard -s default -s "prefix(cosmossdk.io)" -s "prefix(github.com/cosmos/cosmos-sdk)" -s "prefix(github.com/CosmWasm/wasmd)" --custom-order
mod-tidy:
go mod tidy
cd interchaintest && go mod tidy
.PHONY: format-tools lint format mod-tidy
###############################################################################
### Protobuf ###
###############################################################################
protoVer=0.13.2
protoImageName=ghcr.io/cosmos/proto-builder:$(protoVer)
protoImage=$(DOCKER) run --rm -v $(CURDIR):/workspace --workdir /workspace $(protoImageName)
proto-all: proto-format proto-lint proto-gen format
proto-gen:
@echo "Generating Protobuf files"
@go install cosmossdk.io/orm/cmd/protoc-gen-go-cosmos-orm@latest
@$(protoImage) sh ./scripts/protocgen.sh
# generate the stubs for the proto files from the proto directory
spawn stub-gen
proto-format:
@echo "Formatting Protobuf files"
@$(protoImage) find ./ -name "*.proto" -exec clang-format -i {} \;
proto-swagger-gen:
@./scripts/protoc-swagger-gen.sh
proto-lint:
@$(protoImage) buf lint --error-format=json
proto-check-breaking:
@$(protoImage) buf breaking --against $(HTTPS_GIT)#branch=main
.PHONY: all install install-debug \
go-mod-cache draw-deps clean build format \
test test-all test-build test-cover test-unit test-race \
test-sim-import-export build-windows-client \
test-system
## --- Testnet Utilities ---
get-localic:
@echo "Installing local-interchain"
Feature/update dockerfile (#6) * chore: remove unused new.Dockerfile * feat: add DID model definitions * fix: Fix EncodePublicKey method in KeyInfo struct * feat: Update `EncodePublicKey` to be the inverse of `DecodePublicKey` * refactor: update AssetInfo protobuf definition * fix: update default assets with correct asset types * fix: Initialize IPFS client and check for mounted directories * feat: Improve IPFS client initialization and mount checking * feat: Add local filesystem check for IPFS and IPNS * fix: Use Unixfs().Get() instead of Cat() for IPFS and IPNS content retrieval * feat: Update GetCID and GetIPNS functions to read data from IPFS node * fix: Ensure IPFS client is initialized before pinning CID * feat: Add AddFile and AddFolder methods * feat: add IPFS file system abstraction * feat: Implement IPFS file, location, and filesystem abstractions * refactor: remove unused functions and types * refactor: remove unused FileSystem interface * feat: add initial wasm entrypoint * feat: add basic vault command operations * docs: add vault module features * test: remove test for MsgUpdateParams * refactor: Replace PrimaryKey with Property struct in zkprop.go * feat: Update the `CreateWitness` and `CreateAccumulator` and `VerifyWitness` and `UpdateAccumulator` to Use the new `Accumulator` and `Witness` types. Then Clean up the code in the file and refactor the marshalling methods * <no value> * feat: add KeyCurve and KeyType to KeyInfo in genesis * feat: add WASM build step to devbox.json * feat: Add zkgate.go file * feat: Uncomment and modify zkgate code to work with Property struct * feat: Merge zkgate.go and zkprop.go logic * feat: implement API endpoints for profile management * refactor: remove unused template file * feat(orm): remove unused ORM models * feat: add persistent SQLite database support in WASM * fix: Update module names in protobuf files * feat: Add method to initialize SQLite database * fix: update go-sqlite3 dependency to version 1.14.23 * feat: introduce database layer * feat: Implement database layer for Vault node * feature/update-dockerfile * feat: Add keyshares table * fix: Reorder the SQL statements in the tables.go file * feat: Update the `createCredentialsTable` method to match the proper Credential struct * feat: Update createProfilesTable and add createPropertiesTable * feat: Add constant SQL queries to queries.go and use prepared statements in db.go * feat: Add createKeysharesTable to internal/db/db.go * feat: Update `createPermissionsTable` to match Permissions struct * feat: Add database enum types * feat: Add DIDNamespace and PermissionScope enums * feat: Add DBConfig and DBOption types * feat: Update the db implementation to use the provided go library * fix: update db implementation to use go-sqlite3 v0.18.2 * fix: Refactor database connection and statement handling * feat: Simplify db.go implementation * feat: Convert constant SQL queries to functions in queries.go and update db.go to use prepared statements * feat: Add models.go file with database table structs * fix: Remove unused statement map and prepare statements diff --git a/internal/db/db.go b/internal/db/db.go index 201d09b..d4d4d4e 100644 --- a/internal/db/db.go +++ b/internal/db/db.go @@ -32,11 +32,6 @@ func Open(config *DBConfig) (*DB, error) { Conn: conn, } - if err := createTables(db); err != nil { - conn.Close() - return nil, fmt.Errorf("failed to create tables: %w", err) - } - return db, nil } @@ -61,114 +56,3 @@ func createTables(db *DB) error { return nil } -// AddAccount adds a new account to the database -func (db *DB) AddAccount(name, address string) error { - return db.Exec(insertAccountQuery(name, address)) -} - -// AddAsset adds a new asset to the database -func (db *DB) AddAsset(name, symbol string, decimals int, chainID int64) error { - return db.Exec(insertAssetQuery(name, symbol, decimals, chainID)) -} - -// AddChain adds a new chain to the database -func (db *DB) AddChain(name, networkID string) error { - return db.Exec(insertChainQuery(name, networkID)) -} - -// AddCredential adds a new credential to the database -func (db *DB) AddCredential( - handle, controller, attestationType, origin string, - credentialID, publicKey []byte, - transport string, - signCount uint32, - userPresent, userVerified, backupEligible, backupState, cloneWarning bool, -) error { - return db.Exec(insertCredentialQuery( - handle, - controller, - attestationType, - origin, - credentialID, - publicKey, - transport, - signCount, - userPresent, - userVerified, - backupEligible, - backupState, - cloneWarning, - )) -} - -// AddProfile adds a new profile to the database -func (db *DB) AddProfile( - id, subject, controller, originURI, publicMetadata, privateMetadata string, -) error { - return db.statements["insertProfile"].Exec( - id, subject, controller, originURI, publicMetadata, privateMetadata, - ) -} - -// AddProperty adds a new property to the database -func (db *DB) AddProperty( - profileID, key, accumulator, propertyKey string, -) error { - return db.statements["insertProperty"].Exec( - profileID, key, accumulator, propertyKey, - ) -} - -// AddPermission adds a new permission to the database -func (db *DB) AddPermission( - serviceID string, - grants []DIDNamespace, - scopes []PermissionScope, -) error { - grantsJSON, err := json.Marshal(grants) - if err != nil { - return fmt.Errorf("failed to marshal grants: %w", err) - } - - scopesJSON, err := json.Marshal(scopes) - if err != nil { - return fmt.Errorf("failed to marshal scopes: %w", err) - } - - return db.statements["insertPermission"].Exec( - serviceID, string(grantsJSON), string(scopesJSON), - ) -} - -// GetPermission retrieves the permission for the given service ID -func (db *DB) GetPermission(serviceID string) ([]DIDNamespace, []PermissionScope, error) { - row := db.statements["getPermission"].QueryRow(serviceID) - - var grantsJSON, scopesJSON string - if err := row.Scan(&grantsJSON, &scopesJSON); err != nil { - return nil, nil, fmt.Errorf("failed to get permission: %w", err) - } - - var grants []DIDNamespace - if err := json.Unmarshal([]byte(grantsJSON), &grants); err != nil { - return nil, nil, fmt.Errorf("failed to unmarshal grants: %w", err) - } - - var scopes []PermissionScope - if err := json.Unmarshal([]byte(scopesJSON), &scopes); err != nil { - return nil, nil, fmt.Errorf("failed to unmarshal scopes: %w", err) - } - - return grants, scopes, nil -} - -// Close closes the database connection and finalizes all prepared statements -func (db *DB) Close() error { - for _, stmt := range db.statements { - stmt.Finalize() - } - return db.Conn.Close() -} diff --git a/internal/db/queries.go b/internal/db/queries.go index 807d701..e69de29 100644 --- a/internal/db/queries.go +++ b/internal/db/queries.go @@ -1,79 +0,0 @@ -package db - -import "fmt" - -// Account queries -func insertAccountQuery(name, address string) string { - return fmt.Sprintf(`INSERT INTO accounts (name, address) VALUES (%s, %s)`, name, address) -} - -// Asset queries -func insertAssetQuery(name, symbol string, decimals int, chainID int64) string { - return fmt.Sprintf( - `INSERT INTO assets (name, symbol, decimals, chain_id) VALUES (%s, %s, %d, %d)`, - name, - symbol, - decimals, - chainID, - ) -} - -// Chain queries -func insertChainQuery(name string, networkID string) string { - return fmt.Sprintf(`INSERT INTO chains (name, network_id) VALUES (%s, %d)`, name, networkID) -} - -// Credential queries -func insertCredentialQuery( - handle, controller, attestationType, origin string, - credentialID, publicKey []byte, - transport string, - signCount uint32, - userPresent, userVerified, backupEligible, backupState, cloneWarning bool, -) string { - return fmt.Sprintf(`INSERT INTO credentials ( - handle, controller, attestation_type, origin, - credential_id, public_key, transport, sign_count, - user_present, user_verified, backup_eligible, - backup_state, clone_warning - ) VALUES (%s, %s, %s, %s, %s, %s, %s, %d, %t, %t, %t, %t, %t)`, - handle, controller, attestationType, origin, - credentialID, publicKey, transport, signCount, - userPresent, userVerified, backupEligible, - backupState, cloneWarning) -} - -// Profile queries -func insertProfileQuery( - id, subject, controller, originURI, publicMetadata, privateMetadata string, -) string { - return fmt.Sprintf(`INSERT INTO profiles ( - id, subject, controller, origin_uri, - public_metadata, private_metadata - ) VALUES (%s, %s, %s, %s, %s, %s)`, - id, subject, controller, originURI, - publicMetadata, privateMetadata) -} - -// Property queries -func insertPropertyQuery(profileID, key, accumulator, propertyKey string) string { - return fmt.Sprintf(`INSERT INTO properties ( - profile_id, key, accumulator, property_key - ) VALUES (%s, %s, %s, %s)`, - profileID, key, accumulator, propertyKey) -} - -// Permission queries -func insertPermissionQuery(serviceID, grants, scopes string) string { - return fmt.Sprintf( - `INSERT INTO permissions (service_id, grants, scopes) VALUES (%s, %s, %s)`, - serviceID, - grants, - scopes, - ) -} - -// GetPermission query -func getPermissionQuery(serviceID string) string { - return fmt.Sprintf(`SELECT grants, scopes FROM permissions WHERE service_id = %s`, serviceID) -} * fix: update Makefile to use sonrd instead of wasmd * feat: Add targets for templ and vault in Makefile and use only make in devbox.json * feat: add SQLite database support * bump: version 0.6.0 → 0.7.0 * refactor: upgrade actions to latest versions
2024-09-05 01:24:57 -04:00
git clone --branch v8.7.0 https://github.com/strangelove-ventures/interchaintest.git interchaintest-downloader
2024-07-05 22:20:13 -04:00
cd interchaintest-downloader/local-interchain && make install
@echo ✅ local-interchain installed $(shell which local-ic)
is-localic-installed:
ifeq (,$(shell which local-ic))
make get-localic
endif
get-heighliner:
git clone https://github.com/strangelove-ventures/heighliner.git
cd heighliner && go install
local-image:
ifeq (,$(shell which heighliner))
echo 'heighliner' binary not found. Consider running `make get-heighliner`
else
Feature/update dockerfile (#6) * chore: remove unused new.Dockerfile * feat: add DID model definitions * fix: Fix EncodePublicKey method in KeyInfo struct * feat: Update `EncodePublicKey` to be the inverse of `DecodePublicKey` * refactor: update AssetInfo protobuf definition * fix: update default assets with correct asset types * fix: Initialize IPFS client and check for mounted directories * feat: Improve IPFS client initialization and mount checking * feat: Add local filesystem check for IPFS and IPNS * fix: Use Unixfs().Get() instead of Cat() for IPFS and IPNS content retrieval * feat: Update GetCID and GetIPNS functions to read data from IPFS node * fix: Ensure IPFS client is initialized before pinning CID * feat: Add AddFile and AddFolder methods * feat: add IPFS file system abstraction * feat: Implement IPFS file, location, and filesystem abstractions * refactor: remove unused functions and types * refactor: remove unused FileSystem interface * feat: add initial wasm entrypoint * feat: add basic vault command operations * docs: add vault module features * test: remove test for MsgUpdateParams * refactor: Replace PrimaryKey with Property struct in zkprop.go * feat: Update the `CreateWitness` and `CreateAccumulator` and `VerifyWitness` and `UpdateAccumulator` to Use the new `Accumulator` and `Witness` types. Then Clean up the code in the file and refactor the marshalling methods * <no value> * feat: add KeyCurve and KeyType to KeyInfo in genesis * feat: add WASM build step to devbox.json * feat: Add zkgate.go file * feat: Uncomment and modify zkgate code to work with Property struct * feat: Merge zkgate.go and zkprop.go logic * feat: implement API endpoints for profile management * refactor: remove unused template file * feat(orm): remove unused ORM models * feat: add persistent SQLite database support in WASM * fix: Update module names in protobuf files * feat: Add method to initialize SQLite database * fix: update go-sqlite3 dependency to version 1.14.23 * feat: introduce database layer * feat: Implement database layer for Vault node * feature/update-dockerfile * feat: Add keyshares table * fix: Reorder the SQL statements in the tables.go file * feat: Update the `createCredentialsTable` method to match the proper Credential struct * feat: Update createProfilesTable and add createPropertiesTable * feat: Add constant SQL queries to queries.go and use prepared statements in db.go * feat: Add createKeysharesTable to internal/db/db.go * feat: Update `createPermissionsTable` to match Permissions struct * feat: Add database enum types * feat: Add DIDNamespace and PermissionScope enums * feat: Add DBConfig and DBOption types * feat: Update the db implementation to use the provided go library * fix: update db implementation to use go-sqlite3 v0.18.2 * fix: Refactor database connection and statement handling * feat: Simplify db.go implementation * feat: Convert constant SQL queries to functions in queries.go and update db.go to use prepared statements * feat: Add models.go file with database table structs * fix: Remove unused statement map and prepare statements diff --git a/internal/db/db.go b/internal/db/db.go index 201d09b..d4d4d4e 100644 --- a/internal/db/db.go +++ b/internal/db/db.go @@ -32,11 +32,6 @@ func Open(config *DBConfig) (*DB, error) { Conn: conn, } - if err := createTables(db); err != nil { - conn.Close() - return nil, fmt.Errorf("failed to create tables: %w", err) - } - return db, nil } @@ -61,114 +56,3 @@ func createTables(db *DB) error { return nil } -// AddAccount adds a new account to the database -func (db *DB) AddAccount(name, address string) error { - return db.Exec(insertAccountQuery(name, address)) -} - -// AddAsset adds a new asset to the database -func (db *DB) AddAsset(name, symbol string, decimals int, chainID int64) error { - return db.Exec(insertAssetQuery(name, symbol, decimals, chainID)) -} - -// AddChain adds a new chain to the database -func (db *DB) AddChain(name, networkID string) error { - return db.Exec(insertChainQuery(name, networkID)) -} - -// AddCredential adds a new credential to the database -func (db *DB) AddCredential( - handle, controller, attestationType, origin string, - credentialID, publicKey []byte, - transport string, - signCount uint32, - userPresent, userVerified, backupEligible, backupState, cloneWarning bool, -) error { - return db.Exec(insertCredentialQuery( - handle, - controller, - attestationType, - origin, - credentialID, - publicKey, - transport, - signCount, - userPresent, - userVerified, - backupEligible, - backupState, - cloneWarning, - )) -} - -// AddProfile adds a new profile to the database -func (db *DB) AddProfile( - id, subject, controller, originURI, publicMetadata, privateMetadata string, -) error { - return db.statements["insertProfile"].Exec( - id, subject, controller, originURI, publicMetadata, privateMetadata, - ) -} - -// AddProperty adds a new property to the database -func (db *DB) AddProperty( - profileID, key, accumulator, propertyKey string, -) error { - return db.statements["insertProperty"].Exec( - profileID, key, accumulator, propertyKey, - ) -} - -// AddPermission adds a new permission to the database -func (db *DB) AddPermission( - serviceID string, - grants []DIDNamespace, - scopes []PermissionScope, -) error { - grantsJSON, err := json.Marshal(grants) - if err != nil { - return fmt.Errorf("failed to marshal grants: %w", err) - } - - scopesJSON, err := json.Marshal(scopes) - if err != nil { - return fmt.Errorf("failed to marshal scopes: %w", err) - } - - return db.statements["insertPermission"].Exec( - serviceID, string(grantsJSON), string(scopesJSON), - ) -} - -// GetPermission retrieves the permission for the given service ID -func (db *DB) GetPermission(serviceID string) ([]DIDNamespace, []PermissionScope, error) { - row := db.statements["getPermission"].QueryRow(serviceID) - - var grantsJSON, scopesJSON string - if err := row.Scan(&grantsJSON, &scopesJSON); err != nil { - return nil, nil, fmt.Errorf("failed to get permission: %w", err) - } - - var grants []DIDNamespace - if err := json.Unmarshal([]byte(grantsJSON), &grants); err != nil { - return nil, nil, fmt.Errorf("failed to unmarshal grants: %w", err) - } - - var scopes []PermissionScope - if err := json.Unmarshal([]byte(scopesJSON), &scopes); err != nil { - return nil, nil, fmt.Errorf("failed to unmarshal scopes: %w", err) - } - - return grants, scopes, nil -} - -// Close closes the database connection and finalizes all prepared statements -func (db *DB) Close() error { - for _, stmt := range db.statements { - stmt.Finalize() - } - return db.Conn.Close() -} diff --git a/internal/db/queries.go b/internal/db/queries.go index 807d701..e69de29 100644 --- a/internal/db/queries.go +++ b/internal/db/queries.go @@ -1,79 +0,0 @@ -package db - -import "fmt" - -// Account queries -func insertAccountQuery(name, address string) string { - return fmt.Sprintf(`INSERT INTO accounts (name, address) VALUES (%s, %s)`, name, address) -} - -// Asset queries -func insertAssetQuery(name, symbol string, decimals int, chainID int64) string { - return fmt.Sprintf( - `INSERT INTO assets (name, symbol, decimals, chain_id) VALUES (%s, %s, %d, %d)`, - name, - symbol, - decimals, - chainID, - ) -} - -// Chain queries -func insertChainQuery(name string, networkID string) string { - return fmt.Sprintf(`INSERT INTO chains (name, network_id) VALUES (%s, %d)`, name, networkID) -} - -// Credential queries -func insertCredentialQuery( - handle, controller, attestationType, origin string, - credentialID, publicKey []byte, - transport string, - signCount uint32, - userPresent, userVerified, backupEligible, backupState, cloneWarning bool, -) string { - return fmt.Sprintf(`INSERT INTO credentials ( - handle, controller, attestation_type, origin, - credential_id, public_key, transport, sign_count, - user_present, user_verified, backup_eligible, - backup_state, clone_warning - ) VALUES (%s, %s, %s, %s, %s, %s, %s, %d, %t, %t, %t, %t, %t)`, - handle, controller, attestationType, origin, - credentialID, publicKey, transport, signCount, - userPresent, userVerified, backupEligible, - backupState, cloneWarning) -} - -// Profile queries -func insertProfileQuery( - id, subject, controller, originURI, publicMetadata, privateMetadata string, -) string { - return fmt.Sprintf(`INSERT INTO profiles ( - id, subject, controller, origin_uri, - public_metadata, private_metadata - ) VALUES (%s, %s, %s, %s, %s, %s)`, - id, subject, controller, originURI, - publicMetadata, privateMetadata) -} - -// Property queries -func insertPropertyQuery(profileID, key, accumulator, propertyKey string) string { - return fmt.Sprintf(`INSERT INTO properties ( - profile_id, key, accumulator, property_key - ) VALUES (%s, %s, %s, %s)`, - profileID, key, accumulator, propertyKey) -} - -// Permission queries -func insertPermissionQuery(serviceID, grants, scopes string) string { - return fmt.Sprintf( - `INSERT INTO permissions (service_id, grants, scopes) VALUES (%s, %s, %s)`, - serviceID, - grants, - scopes, - ) -} - -// GetPermission query -func getPermissionQuery(serviceID string) string { - return fmt.Sprintf(`SELECT grants, scopes FROM permissions WHERE service_id = %s`, serviceID) -} * fix: update Makefile to use sonrd instead of wasmd * feat: Add targets for templ and vault in Makefile and use only make in devbox.json * feat: add SQLite database support * bump: version 0.6.0 → 0.7.0 * refactor: upgrade actions to latest versions
2024-09-05 01:24:57 -04:00
heighliner build -c sonrd --local -f chains.yaml
2024-07-05 22:20:13 -04:00
endif
.PHONY: get-heighliner local-image is-localic-installed
###############################################################################
### e2e ###
###############################################################################
ictest-basic:
@echo "Running basic interchain tests"
@cd interchaintest && go test -race -v -run TestBasicChain .
ictest-ibc:
@echo "Running IBC interchain tests"
@cd interchaintest && go test -race -v -run TestIBC .
ictest-wasm:
@echo "Running cosmwasm interchain tests"
@cd interchaintest && go test -race -v -run TestCosmWasmIntegration .
ictest-packetforward:
@echo "Running packet forward middleware interchain tests"
@cd interchaintest && go test -race -v -run TestPacketForwardMiddleware .
ictest-poa:
@echo "Running proof of authority interchain tests"
@cd interchaintest && go test -race -v -run TestPOA .
ictest-tokenfactory:
@echo "Running token factory interchain tests"
@cd interchaintest && go test -race -v -run TestTokenFactory .
###############################################################################
### testnet ###
###############################################################################
setup-testnet: mod-tidy is-localic-installed install local-image set-testnet-configs setup-testnet-keys
# Run this before testnet keys are added
# chainid-1 is used in the testnet.json
set-testnet-configs:
2024-07-06 03:17:04 -04:00
sonrd config set client chain-id sonr-testnet-1
2024-07-05 22:20:13 -04:00
sonrd config set client keyring-backend test
sonrd config set client output text
# import keys from testnet.json into test keyring
setup-testnet-keys:
-`echo "decorate bright ozone fork gallery riot bus exhaust worth way bone indoor calm squirrel merry zero scheme cotton until shop any excess stage laundry" | sonrd keys add acc0 --recover`
-`echo "wealth flavor believe regret funny network recall kiss grape useless pepper cram hint member few certain unveil rather brick bargain curious require crowd raise" | sonrd keys add acc1 --recover`
# default testnet is with IBC
testnet: setup-testnet
spawn local-ic start ibc-testnet
testnet-basic: setup-testnet
spawn local-ic start testnet
sh-testnet: mod-tidy
2024-07-06 03:17:04 -04:00
CHAIN_ID="sonr-testnet-1" BLOCK_TIME="1000ms" CLEAN=true sh scripts/test_node.sh
2024-07-05 22:20:13 -04:00
.PHONY: setup-testnet set-testnet-configs testnet testnet-basic sh-testnet
Feature/update dockerfile (#6) * chore: remove unused new.Dockerfile * feat: add DID model definitions * fix: Fix EncodePublicKey method in KeyInfo struct * feat: Update `EncodePublicKey` to be the inverse of `DecodePublicKey` * refactor: update AssetInfo protobuf definition * fix: update default assets with correct asset types * fix: Initialize IPFS client and check for mounted directories * feat: Improve IPFS client initialization and mount checking * feat: Add local filesystem check for IPFS and IPNS * fix: Use Unixfs().Get() instead of Cat() for IPFS and IPNS content retrieval * feat: Update GetCID and GetIPNS functions to read data from IPFS node * fix: Ensure IPFS client is initialized before pinning CID * feat: Add AddFile and AddFolder methods * feat: add IPFS file system abstraction * feat: Implement IPFS file, location, and filesystem abstractions * refactor: remove unused functions and types * refactor: remove unused FileSystem interface * feat: add initial wasm entrypoint * feat: add basic vault command operations * docs: add vault module features * test: remove test for MsgUpdateParams * refactor: Replace PrimaryKey with Property struct in zkprop.go * feat: Update the `CreateWitness` and `CreateAccumulator` and `VerifyWitness` and `UpdateAccumulator` to Use the new `Accumulator` and `Witness` types. Then Clean up the code in the file and refactor the marshalling methods * <no value> * feat: add KeyCurve and KeyType to KeyInfo in genesis * feat: add WASM build step to devbox.json * feat: Add zkgate.go file * feat: Uncomment and modify zkgate code to work with Property struct * feat: Merge zkgate.go and zkprop.go logic * feat: implement API endpoints for profile management * refactor: remove unused template file * feat(orm): remove unused ORM models * feat: add persistent SQLite database support in WASM * fix: Update module names in protobuf files * feat: Add method to initialize SQLite database * fix: update go-sqlite3 dependency to version 1.14.23 * feat: introduce database layer * feat: Implement database layer for Vault node * feature/update-dockerfile * feat: Add keyshares table * fix: Reorder the SQL statements in the tables.go file * feat: Update the `createCredentialsTable` method to match the proper Credential struct * feat: Update createProfilesTable and add createPropertiesTable * feat: Add constant SQL queries to queries.go and use prepared statements in db.go * feat: Add createKeysharesTable to internal/db/db.go * feat: Update `createPermissionsTable` to match Permissions struct * feat: Add database enum types * feat: Add DIDNamespace and PermissionScope enums * feat: Add DBConfig and DBOption types * feat: Update the db implementation to use the provided go library * fix: update db implementation to use go-sqlite3 v0.18.2 * fix: Refactor database connection and statement handling * feat: Simplify db.go implementation * feat: Convert constant SQL queries to functions in queries.go and update db.go to use prepared statements * feat: Add models.go file with database table structs * fix: Remove unused statement map and prepare statements diff --git a/internal/db/db.go b/internal/db/db.go index 201d09b..d4d4d4e 100644 --- a/internal/db/db.go +++ b/internal/db/db.go @@ -32,11 +32,6 @@ func Open(config *DBConfig) (*DB, error) { Conn: conn, } - if err := createTables(db); err != nil { - conn.Close() - return nil, fmt.Errorf("failed to create tables: %w", err) - } - return db, nil } @@ -61,114 +56,3 @@ func createTables(db *DB) error { return nil } -// AddAccount adds a new account to the database -func (db *DB) AddAccount(name, address string) error { - return db.Exec(insertAccountQuery(name, address)) -} - -// AddAsset adds a new asset to the database -func (db *DB) AddAsset(name, symbol string, decimals int, chainID int64) error { - return db.Exec(insertAssetQuery(name, symbol, decimals, chainID)) -} - -// AddChain adds a new chain to the database -func (db *DB) AddChain(name, networkID string) error { - return db.Exec(insertChainQuery(name, networkID)) -} - -// AddCredential adds a new credential to the database -func (db *DB) AddCredential( - handle, controller, attestationType, origin string, - credentialID, publicKey []byte, - transport string, - signCount uint32, - userPresent, userVerified, backupEligible, backupState, cloneWarning bool, -) error { - return db.Exec(insertCredentialQuery( - handle, - controller, - attestationType, - origin, - credentialID, - publicKey, - transport, - signCount, - userPresent, - userVerified, - backupEligible, - backupState, - cloneWarning, - )) -} - -// AddProfile adds a new profile to the database -func (db *DB) AddProfile( - id, subject, controller, originURI, publicMetadata, privateMetadata string, -) error { - return db.statements["insertProfile"].Exec( - id, subject, controller, originURI, publicMetadata, privateMetadata, - ) -} - -// AddProperty adds a new property to the database -func (db *DB) AddProperty( - profileID, key, accumulator, propertyKey string, -) error { - return db.statements["insertProperty"].Exec( - profileID, key, accumulator, propertyKey, - ) -} - -// AddPermission adds a new permission to the database -func (db *DB) AddPermission( - serviceID string, - grants []DIDNamespace, - scopes []PermissionScope, -) error { - grantsJSON, err := json.Marshal(grants) - if err != nil { - return fmt.Errorf("failed to marshal grants: %w", err) - } - - scopesJSON, err := json.Marshal(scopes) - if err != nil { - return fmt.Errorf("failed to marshal scopes: %w", err) - } - - return db.statements["insertPermission"].Exec( - serviceID, string(grantsJSON), string(scopesJSON), - ) -} - -// GetPermission retrieves the permission for the given service ID -func (db *DB) GetPermission(serviceID string) ([]DIDNamespace, []PermissionScope, error) { - row := db.statements["getPermission"].QueryRow(serviceID) - - var grantsJSON, scopesJSON string - if err := row.Scan(&grantsJSON, &scopesJSON); err != nil { - return nil, nil, fmt.Errorf("failed to get permission: %w", err) - } - - var grants []DIDNamespace - if err := json.Unmarshal([]byte(grantsJSON), &grants); err != nil { - return nil, nil, fmt.Errorf("failed to unmarshal grants: %w", err) - } - - var scopes []PermissionScope - if err := json.Unmarshal([]byte(scopesJSON), &scopes); err != nil { - return nil, nil, fmt.Errorf("failed to unmarshal scopes: %w", err) - } - - return grants, scopes, nil -} - -// Close closes the database connection and finalizes all prepared statements -func (db *DB) Close() error { - for _, stmt := range db.statements { - stmt.Finalize() - } - return db.Conn.Close() -} diff --git a/internal/db/queries.go b/internal/db/queries.go index 807d701..e69de29 100644 --- a/internal/db/queries.go +++ b/internal/db/queries.go @@ -1,79 +0,0 @@ -package db - -import "fmt" - -// Account queries -func insertAccountQuery(name, address string) string { - return fmt.Sprintf(`INSERT INTO accounts (name, address) VALUES (%s, %s)`, name, address) -} - -// Asset queries -func insertAssetQuery(name, symbol string, decimals int, chainID int64) string { - return fmt.Sprintf( - `INSERT INTO assets (name, symbol, decimals, chain_id) VALUES (%s, %s, %d, %d)`, - name, - symbol, - decimals, - chainID, - ) -} - -// Chain queries -func insertChainQuery(name string, networkID string) string { - return fmt.Sprintf(`INSERT INTO chains (name, network_id) VALUES (%s, %d)`, name, networkID) -} - -// Credential queries -func insertCredentialQuery( - handle, controller, attestationType, origin string, - credentialID, publicKey []byte, - transport string, - signCount uint32, - userPresent, userVerified, backupEligible, backupState, cloneWarning bool, -) string { - return fmt.Sprintf(`INSERT INTO credentials ( - handle, controller, attestation_type, origin, - credential_id, public_key, transport, sign_count, - user_present, user_verified, backup_eligible, - backup_state, clone_warning - ) VALUES (%s, %s, %s, %s, %s, %s, %s, %d, %t, %t, %t, %t, %t)`, - handle, controller, attestationType, origin, - credentialID, publicKey, transport, signCount, - userPresent, userVerified, backupEligible, - backupState, cloneWarning) -} - -// Profile queries -func insertProfileQuery( - id, subject, controller, originURI, publicMetadata, privateMetadata string, -) string { - return fmt.Sprintf(`INSERT INTO profiles ( - id, subject, controller, origin_uri, - public_metadata, private_metadata - ) VALUES (%s, %s, %s, %s, %s, %s)`, - id, subject, controller, originURI, - publicMetadata, privateMetadata) -} - -// Property queries -func insertPropertyQuery(profileID, key, accumulator, propertyKey string) string { - return fmt.Sprintf(`INSERT INTO properties ( - profile_id, key, accumulator, property_key - ) VALUES (%s, %s, %s, %s)`, - profileID, key, accumulator, propertyKey) -} - -// Permission queries -func insertPermissionQuery(serviceID, grants, scopes string) string { - return fmt.Sprintf( - `INSERT INTO permissions (service_id, grants, scopes) VALUES (%s, %s, %s)`, - serviceID, - grants, - scopes, - ) -} - -// GetPermission query -func getPermissionQuery(serviceID string) string { - return fmt.Sprintf(`SELECT grants, scopes FROM permissions WHERE service_id = %s`, serviceID) -} * fix: update Makefile to use sonrd instead of wasmd * feat: Add targets for templ and vault in Makefile and use only make in devbox.json * feat: add SQLite database support * bump: version 0.6.0 → 0.7.0 * refactor: upgrade actions to latest versions
2024-09-05 01:24:57 -04:00
###############################################################################
### templ & vault ###
###############################################################################
.PHONY: dwn motr xcaddy ipfs-cluster-start
Feature/update dockerfile (#6) * chore: remove unused new.Dockerfile * feat: add DID model definitions * fix: Fix EncodePublicKey method in KeyInfo struct * feat: Update `EncodePublicKey` to be the inverse of `DecodePublicKey` * refactor: update AssetInfo protobuf definition * fix: update default assets with correct asset types * fix: Initialize IPFS client and check for mounted directories * feat: Improve IPFS client initialization and mount checking * feat: Add local filesystem check for IPFS and IPNS * fix: Use Unixfs().Get() instead of Cat() for IPFS and IPNS content retrieval * feat: Update GetCID and GetIPNS functions to read data from IPFS node * fix: Ensure IPFS client is initialized before pinning CID * feat: Add AddFile and AddFolder methods * feat: add IPFS file system abstraction * feat: Implement IPFS file, location, and filesystem abstractions * refactor: remove unused functions and types * refactor: remove unused FileSystem interface * feat: add initial wasm entrypoint * feat: add basic vault command operations * docs: add vault module features * test: remove test for MsgUpdateParams * refactor: Replace PrimaryKey with Property struct in zkprop.go * feat: Update the `CreateWitness` and `CreateAccumulator` and `VerifyWitness` and `UpdateAccumulator` to Use the new `Accumulator` and `Witness` types. Then Clean up the code in the file and refactor the marshalling methods * <no value> * feat: add KeyCurve and KeyType to KeyInfo in genesis * feat: add WASM build step to devbox.json * feat: Add zkgate.go file * feat: Uncomment and modify zkgate code to work with Property struct * feat: Merge zkgate.go and zkprop.go logic * feat: implement API endpoints for profile management * refactor: remove unused template file * feat(orm): remove unused ORM models * feat: add persistent SQLite database support in WASM * fix: Update module names in protobuf files * feat: Add method to initialize SQLite database * fix: update go-sqlite3 dependency to version 1.14.23 * feat: introduce database layer * feat: Implement database layer for Vault node * feature/update-dockerfile * feat: Add keyshares table * fix: Reorder the SQL statements in the tables.go file * feat: Update the `createCredentialsTable` method to match the proper Credential struct * feat: Update createProfilesTable and add createPropertiesTable * feat: Add constant SQL queries to queries.go and use prepared statements in db.go * feat: Add createKeysharesTable to internal/db/db.go * feat: Update `createPermissionsTable` to match Permissions struct * feat: Add database enum types * feat: Add DIDNamespace and PermissionScope enums * feat: Add DBConfig and DBOption types * feat: Update the db implementation to use the provided go library * fix: update db implementation to use go-sqlite3 v0.18.2 * fix: Refactor database connection and statement handling * feat: Simplify db.go implementation * feat: Convert constant SQL queries to functions in queries.go and update db.go to use prepared statements * feat: Add models.go file with database table structs * fix: Remove unused statement map and prepare statements diff --git a/internal/db/db.go b/internal/db/db.go index 201d09b..d4d4d4e 100644 --- a/internal/db/db.go +++ b/internal/db/db.go @@ -32,11 +32,6 @@ func Open(config *DBConfig) (*DB, error) { Conn: conn, } - if err := createTables(db); err != nil { - conn.Close() - return nil, fmt.Errorf("failed to create tables: %w", err) - } - return db, nil } @@ -61,114 +56,3 @@ func createTables(db *DB) error { return nil } -// AddAccount adds a new account to the database -func (db *DB) AddAccount(name, address string) error { - return db.Exec(insertAccountQuery(name, address)) -} - -// AddAsset adds a new asset to the database -func (db *DB) AddAsset(name, symbol string, decimals int, chainID int64) error { - return db.Exec(insertAssetQuery(name, symbol, decimals, chainID)) -} - -// AddChain adds a new chain to the database -func (db *DB) AddChain(name, networkID string) error { - return db.Exec(insertChainQuery(name, networkID)) -} - -// AddCredential adds a new credential to the database -func (db *DB) AddCredential( - handle, controller, attestationType, origin string, - credentialID, publicKey []byte, - transport string, - signCount uint32, - userPresent, userVerified, backupEligible, backupState, cloneWarning bool, -) error { - return db.Exec(insertCredentialQuery( - handle, - controller, - attestationType, - origin, - credentialID, - publicKey, - transport, - signCount, - userPresent, - userVerified, - backupEligible, - backupState, - cloneWarning, - )) -} - -// AddProfile adds a new profile to the database -func (db *DB) AddProfile( - id, subject, controller, originURI, publicMetadata, privateMetadata string, -) error { - return db.statements["insertProfile"].Exec( - id, subject, controller, originURI, publicMetadata, privateMetadata, - ) -} - -// AddProperty adds a new property to the database -func (db *DB) AddProperty( - profileID, key, accumulator, propertyKey string, -) error { - return db.statements["insertProperty"].Exec( - profileID, key, accumulator, propertyKey, - ) -} - -// AddPermission adds a new permission to the database -func (db *DB) AddPermission( - serviceID string, - grants []DIDNamespace, - scopes []PermissionScope, -) error { - grantsJSON, err := json.Marshal(grants) - if err != nil { - return fmt.Errorf("failed to marshal grants: %w", err) - } - - scopesJSON, err := json.Marshal(scopes) - if err != nil { - return fmt.Errorf("failed to marshal scopes: %w", err) - } - - return db.statements["insertPermission"].Exec( - serviceID, string(grantsJSON), string(scopesJSON), - ) -} - -// GetPermission retrieves the permission for the given service ID -func (db *DB) GetPermission(serviceID string) ([]DIDNamespace, []PermissionScope, error) { - row := db.statements["getPermission"].QueryRow(serviceID) - - var grantsJSON, scopesJSON string - if err := row.Scan(&grantsJSON, &scopesJSON); err != nil { - return nil, nil, fmt.Errorf("failed to get permission: %w", err) - } - - var grants []DIDNamespace - if err := json.Unmarshal([]byte(grantsJSON), &grants); err != nil { - return nil, nil, fmt.Errorf("failed to unmarshal grants: %w", err) - } - - var scopes []PermissionScope - if err := json.Unmarshal([]byte(scopesJSON), &scopes); err != nil { - return nil, nil, fmt.Errorf("failed to unmarshal scopes: %w", err) - } - - return grants, scopes, nil -} - -// Close closes the database connection and finalizes all prepared statements -func (db *DB) Close() error { - for _, stmt := range db.statements { - stmt.Finalize() - } - return db.Conn.Close() -} diff --git a/internal/db/queries.go b/internal/db/queries.go index 807d701..e69de29 100644 --- a/internal/db/queries.go +++ b/internal/db/queries.go @@ -1,79 +0,0 @@ -package db - -import "fmt" - -// Account queries -func insertAccountQuery(name, address string) string { - return fmt.Sprintf(`INSERT INTO accounts (name, address) VALUES (%s, %s)`, name, address) -} - -// Asset queries -func insertAssetQuery(name, symbol string, decimals int, chainID int64) string { - return fmt.Sprintf( - `INSERT INTO assets (name, symbol, decimals, chain_id) VALUES (%s, %s, %d, %d)`, - name, - symbol, - decimals, - chainID, - ) -} - -// Chain queries -func insertChainQuery(name string, networkID string) string { - return fmt.Sprintf(`INSERT INTO chains (name, network_id) VALUES (%s, %d)`, name, networkID) -} - -// Credential queries -func insertCredentialQuery( - handle, controller, attestationType, origin string, - credentialID, publicKey []byte, - transport string, - signCount uint32, - userPresent, userVerified, backupEligible, backupState, cloneWarning bool, -) string { - return fmt.Sprintf(`INSERT INTO credentials ( - handle, controller, attestation_type, origin, - credential_id, public_key, transport, sign_count, - user_present, user_verified, backup_eligible, - backup_state, clone_warning - ) VALUES (%s, %s, %s, %s, %s, %s, %s, %d, %t, %t, %t, %t, %t)`, - handle, controller, attestationType, origin, - credentialID, publicKey, transport, signCount, - userPresent, userVerified, backupEligible, - backupState, cloneWarning) -} - -// Profile queries -func insertProfileQuery( - id, subject, controller, originURI, publicMetadata, privateMetadata string, -) string { - return fmt.Sprintf(`INSERT INTO profiles ( - id, subject, controller, origin_uri, - public_metadata, private_metadata - ) VALUES (%s, %s, %s, %s, %s, %s)`, - id, subject, controller, originURI, - publicMetadata, privateMetadata) -} - -// Property queries -func insertPropertyQuery(profileID, key, accumulator, propertyKey string) string { - return fmt.Sprintf(`INSERT INTO properties ( - profile_id, key, accumulator, property_key - ) VALUES (%s, %s, %s, %s)`, - profileID, key, accumulator, propertyKey) -} - -// Permission queries -func insertPermissionQuery(serviceID, grants, scopes string) string { - return fmt.Sprintf( - `INSERT INTO permissions (service_id, grants, scopes) VALUES (%s, %s, %s)`, - serviceID, - grants, - scopes, - ) -} - -// GetPermission query -func getPermissionQuery(serviceID string) string { - return fmt.Sprintf(`SELECT grants, scopes FROM permissions WHERE service_id = %s`, serviceID) -} * fix: update Makefile to use sonrd instead of wasmd * feat: Add targets for templ and vault in Makefile and use only make in devbox.json * feat: add SQLite database support * bump: version 0.6.0 → 0.7.0 * refactor: upgrade actions to latest versions
2024-09-05 01:24:57 -04:00
feature/ipfs vault allocation (#8) * refactor: move constants to genesis.proto * feat: add ipfs_active flag to genesis state * feat: add IPFS connection initialization to keeper * feat: add testnet process-compose * refactor: rename sonr-testnet docker image to sonr-runner * refactor: update docker-vm-release workflow to use 'latest' tag * feat: add permission to workflows * feat: add new service chain execution * feat: add abstract vault class to pkl * feat: use jetpackio/devbox image for runner * feat: introduce dwn for local service worker * refactor: remove unnecessary dockerfile layers * refactor(deploy): Update Dockerfile to copy go.mod and go.sum from the parent directory * build: move Dockerfile to root directory * build: Add Dockerfile for deployment * feat: Update Dockerfile to work with Go project in parent directory * build: Update docker-compose.yaml to use relative paths * feat: Update docker-compose to work with new image and parent git directory * refactor: remove unnecessary test script * <no value> * feat: add test_node script for running node tests * feat: add IPFS cluster to testnet * feat: add docker image for sonr-runner * fix: typo in export path * feat(did): Add Localhost Registration Enabled Genesis Option * feat: add support for Sqlite DB in vault * feat: improve vault model JSON serialization * feat: support querying HTMX endpoint for DID * feat: Add primary key, unique, default, not null, auto increment, and foreign key field types * feat: Add PublicKey model in pkl/vault.pkl * feat: add frontend server * refactor: move dwn.wasm to vfs directory * feat(frontend): remove frontend server implementation * feat: Add a frontend server and web auth protocol * feat: implement new key types for MPC and ZK proofs * fix: Update enum types and DefaultKeyInfos * fix: correct typo in KeyAlgorithm enum * feat(did): add attestation format validation * feat: Add x/did/builder/extractor.go * feat: Update JWK parsing in x/did/builder/extractor.go * feat: Use github.com/onsonr/sonr/x/did/types package * feat: Extract and format public keys from WebAuthn credentials * feat: Introduce a new `mapToJWK` function to convert a map to a `types.JWK` struct * feat: add support for extracting JWK public keys * feat: remove VerificationMethod struct * refactor: extract public key extraction logic * feat: add helper functions to map COSECurveID to JWK curve names * feat: pin initial vault
2024-09-07 18:12:58 -04:00
dwn:
feature/refactor did state (#10) * feat(did): remove account types * feat: Refactor Property to Proof in zkprop.go * feat: add ZKP proof mechanism for verifications * fix: return bool and error from pinInitialVault * feat: implement KeyshareSet for managing user and validator keyshares * feat: Update Credential type in protobuf * feat: update credential schema with sign count * feat: migrate and modules to middleware * refactor: rename vault module to ORM * chore(dwn): add service worker registration to index template * feat: integrate service worker for offline functionality * refactor(did): use DIDNamespace enum for verification method in proto reflection * refactor: update protobuf definitions to support Keyshare * feat: expose did keeper in app keepers * Add Motr Web App * refactor: rename motr/handlers/discovery.go to motr/handlers/openid.go * refactor: move session related code to middleware * feat: add database operations for managing assets, chains, and credentials * feat: add htmx support for UI updates * refactor: extract common helper scripts * chore: remove unused storage GUI components * refactor: Move frontend rendering to dedicated handlers * refactor: rename to * refactor: move alert implementation to templ * feat: add alert component with icon, title, and message * feat: add new RequestHeaders struct to store request headers * Feature/create home view (#9) * refactor: move view logic to new htmx handler * refactor: remove unnecessary dependencies * refactor: remove unused dependencies * feat(devbox): integrate air for local development * feat: implement openid connect discovery document * refactor: rename to * refactor(did): update service handling to support DNS discovery * feat: add support for user and validator keyshares * refactor: move keyshare signing logic to signer
2024-09-11 15:10:54 -04:00
@echo "(dwn) Building dwn.wasm -> IPFS Vault"
GOOS=js GOARCH=wasm go build -o ./x/vault/types/internal/app.wasm ./x/vault/client/dwn/dwn.go
templ:
@echo "(templ) Generating templ files"
2024-09-22 01:26:15 -04:00
go install github.com/a-h/templ/cmd/templ@latest
templ generate
pkl:
@echo "(pkl) Building PKL"
go run github.com/apple/pkl-go/cmd/pkl-gen-go ./config/pkl/dwn.pkl
go run github.com/apple/pkl-go/cmd/pkl-gen-go ./config/pkl/orm.pkl
2024-09-22 01:26:15 -04:00
air:
@echo "(air) Building air"
go install github.com/air-verse/air@latest
air -c ./deploy/air.toml
ipfs:
@echo "(ipfs) Starting ipfs-cluster"
ipfs-cluster-service init --consensus crdt
ipfs-cluster-service daemon
Feature/update dockerfile (#6) * chore: remove unused new.Dockerfile * feat: add DID model definitions * fix: Fix EncodePublicKey method in KeyInfo struct * feat: Update `EncodePublicKey` to be the inverse of `DecodePublicKey` * refactor: update AssetInfo protobuf definition * fix: update default assets with correct asset types * fix: Initialize IPFS client and check for mounted directories * feat: Improve IPFS client initialization and mount checking * feat: Add local filesystem check for IPFS and IPNS * fix: Use Unixfs().Get() instead of Cat() for IPFS and IPNS content retrieval * feat: Update GetCID and GetIPNS functions to read data from IPFS node * fix: Ensure IPFS client is initialized before pinning CID * feat: Add AddFile and AddFolder methods * feat: add IPFS file system abstraction * feat: Implement IPFS file, location, and filesystem abstractions * refactor: remove unused functions and types * refactor: remove unused FileSystem interface * feat: add initial wasm entrypoint * feat: add basic vault command operations * docs: add vault module features * test: remove test for MsgUpdateParams * refactor: Replace PrimaryKey with Property struct in zkprop.go * feat: Update the `CreateWitness` and `CreateAccumulator` and `VerifyWitness` and `UpdateAccumulator` to Use the new `Accumulator` and `Witness` types. Then Clean up the code in the file and refactor the marshalling methods * <no value> * feat: add KeyCurve and KeyType to KeyInfo in genesis * feat: add WASM build step to devbox.json * feat: Add zkgate.go file * feat: Uncomment and modify zkgate code to work with Property struct * feat: Merge zkgate.go and zkprop.go logic * feat: implement API endpoints for profile management * refactor: remove unused template file * feat(orm): remove unused ORM models * feat: add persistent SQLite database support in WASM * fix: Update module names in protobuf files * feat: Add method to initialize SQLite database * fix: update go-sqlite3 dependency to version 1.14.23 * feat: introduce database layer * feat: Implement database layer for Vault node * feature/update-dockerfile * feat: Add keyshares table * fix: Reorder the SQL statements in the tables.go file * feat: Update the `createCredentialsTable` method to match the proper Credential struct * feat: Update createProfilesTable and add createPropertiesTable * feat: Add constant SQL queries to queries.go and use prepared statements in db.go * feat: Add createKeysharesTable to internal/db/db.go * feat: Update `createPermissionsTable` to match Permissions struct * feat: Add database enum types * feat: Add DIDNamespace and PermissionScope enums * feat: Add DBConfig and DBOption types * feat: Update the db implementation to use the provided go library * fix: update db implementation to use go-sqlite3 v0.18.2 * fix: Refactor database connection and statement handling * feat: Simplify db.go implementation * feat: Convert constant SQL queries to functions in queries.go and update db.go to use prepared statements * feat: Add models.go file with database table structs * fix: Remove unused statement map and prepare statements diff --git a/internal/db/db.go b/internal/db/db.go index 201d09b..d4d4d4e 100644 --- a/internal/db/db.go +++ b/internal/db/db.go @@ -32,11 +32,6 @@ func Open(config *DBConfig) (*DB, error) { Conn: conn, } - if err := createTables(db); err != nil { - conn.Close() - return nil, fmt.Errorf("failed to create tables: %w", err) - } - return db, nil } @@ -61,114 +56,3 @@ func createTables(db *DB) error { return nil } -// AddAccount adds a new account to the database -func (db *DB) AddAccount(name, address string) error { - return db.Exec(insertAccountQuery(name, address)) -} - -// AddAsset adds a new asset to the database -func (db *DB) AddAsset(name, symbol string, decimals int, chainID int64) error { - return db.Exec(insertAssetQuery(name, symbol, decimals, chainID)) -} - -// AddChain adds a new chain to the database -func (db *DB) AddChain(name, networkID string) error { - return db.Exec(insertChainQuery(name, networkID)) -} - -// AddCredential adds a new credential to the database -func (db *DB) AddCredential( - handle, controller, attestationType, origin string, - credentialID, publicKey []byte, - transport string, - signCount uint32, - userPresent, userVerified, backupEligible, backupState, cloneWarning bool, -) error { - return db.Exec(insertCredentialQuery( - handle, - controller, - attestationType, - origin, - credentialID, - publicKey, - transport, - signCount, - userPresent, - userVerified, - backupEligible, - backupState, - cloneWarning, - )) -} - -// AddProfile adds a new profile to the database -func (db *DB) AddProfile( - id, subject, controller, originURI, publicMetadata, privateMetadata string, -) error { - return db.statements["insertProfile"].Exec( - id, subject, controller, originURI, publicMetadata, privateMetadata, - ) -} - -// AddProperty adds a new property to the database -func (db *DB) AddProperty( - profileID, key, accumulator, propertyKey string, -) error { - return db.statements["insertProperty"].Exec( - profileID, key, accumulator, propertyKey, - ) -} - -// AddPermission adds a new permission to the database -func (db *DB) AddPermission( - serviceID string, - grants []DIDNamespace, - scopes []PermissionScope, -) error { - grantsJSON, err := json.Marshal(grants) - if err != nil { - return fmt.Errorf("failed to marshal grants: %w", err) - } - - scopesJSON, err := json.Marshal(scopes) - if err != nil { - return fmt.Errorf("failed to marshal scopes: %w", err) - } - - return db.statements["insertPermission"].Exec( - serviceID, string(grantsJSON), string(scopesJSON), - ) -} - -// GetPermission retrieves the permission for the given service ID -func (db *DB) GetPermission(serviceID string) ([]DIDNamespace, []PermissionScope, error) { - row := db.statements["getPermission"].QueryRow(serviceID) - - var grantsJSON, scopesJSON string - if err := row.Scan(&grantsJSON, &scopesJSON); err != nil { - return nil, nil, fmt.Errorf("failed to get permission: %w", err) - } - - var grants []DIDNamespace - if err := json.Unmarshal([]byte(grantsJSON), &grants); err != nil { - return nil, nil, fmt.Errorf("failed to unmarshal grants: %w", err) - } - - var scopes []PermissionScope - if err := json.Unmarshal([]byte(scopesJSON), &scopes); err != nil { - return nil, nil, fmt.Errorf("failed to unmarshal scopes: %w", err) - } - - return grants, scopes, nil -} - -// Close closes the database connection and finalizes all prepared statements -func (db *DB) Close() error { - for _, stmt := range db.statements { - stmt.Finalize() - } - return db.Conn.Close() -} diff --git a/internal/db/queries.go b/internal/db/queries.go index 807d701..e69de29 100644 --- a/internal/db/queries.go +++ b/internal/db/queries.go @@ -1,79 +0,0 @@ -package db - -import "fmt" - -// Account queries -func insertAccountQuery(name, address string) string { - return fmt.Sprintf(`INSERT INTO accounts (name, address) VALUES (%s, %s)`, name, address) -} - -// Asset queries -func insertAssetQuery(name, symbol string, decimals int, chainID int64) string { - return fmt.Sprintf( - `INSERT INTO assets (name, symbol, decimals, chain_id) VALUES (%s, %s, %d, %d)`, - name, - symbol, - decimals, - chainID, - ) -} - -// Chain queries -func insertChainQuery(name string, networkID string) string { - return fmt.Sprintf(`INSERT INTO chains (name, network_id) VALUES (%s, %d)`, name, networkID) -} - -// Credential queries -func insertCredentialQuery( - handle, controller, attestationType, origin string, - credentialID, publicKey []byte, - transport string, - signCount uint32, - userPresent, userVerified, backupEligible, backupState, cloneWarning bool, -) string { - return fmt.Sprintf(`INSERT INTO credentials ( - handle, controller, attestation_type, origin, - credential_id, public_key, transport, sign_count, - user_present, user_verified, backup_eligible, - backup_state, clone_warning - ) VALUES (%s, %s, %s, %s, %s, %s, %s, %d, %t, %t, %t, %t, %t)`, - handle, controller, attestationType, origin, - credentialID, publicKey, transport, signCount, - userPresent, userVerified, backupEligible, - backupState, cloneWarning) -} - -// Profile queries -func insertProfileQuery( - id, subject, controller, originURI, publicMetadata, privateMetadata string, -) string { - return fmt.Sprintf(`INSERT INTO profiles ( - id, subject, controller, origin_uri, - public_metadata, private_metadata - ) VALUES (%s, %s, %s, %s, %s, %s)`, - id, subject, controller, originURI, - publicMetadata, privateMetadata) -} - -// Property queries -func insertPropertyQuery(profileID, key, accumulator, propertyKey string) string { - return fmt.Sprintf(`INSERT INTO properties ( - profile_id, key, accumulator, property_key - ) VALUES (%s, %s, %s, %s)`, - profileID, key, accumulator, propertyKey) -} - -// Permission queries -func insertPermissionQuery(serviceID, grants, scopes string) string { - return fmt.Sprintf( - `INSERT INTO permissions (service_id, grants, scopes) VALUES (%s, %s, %s)`, - serviceID, - grants, - scopes, - ) -} - -// GetPermission query -func getPermissionQuery(serviceID string) string { - return fmt.Sprintf(`SELECT grants, scopes FROM permissions WHERE service_id = %s`, serviceID) -} * fix: update Makefile to use sonrd instead of wasmd * feat: Add targets for templ and vault in Makefile and use only make in devbox.json * feat: add SQLite database support * bump: version 0.6.0 → 0.7.0 * refactor: upgrade actions to latest versions
2024-09-05 01:24:57 -04:00
###############################################################################
### help ###
###############################################################################
help:
@echo "Usage: make <target>"
@echo ""
@echo "Available targets:"
@echo " install : Install the binary"
@echo " local-image : Install the docker image"
@echo " proto-gen : Generate code from proto files"
@echo " testnet : Local devnet with IBC"
@echo " sh-testnet : Shell local devnet"
@echo " ictest-basic : Basic end-to-end test"
@echo " ictest-ibc : IBC end-to-end test"
@echo " templ : Generate templ files"
@echo " vault : Build vault.wasm"
.PHONY: help