Compare commits

..

No commits in common. "master" and "lash/dbtx" have entirely different histories.

15 changed files with 178 additions and 260 deletions

View File

@ -1,9 +0,0 @@
/**
!/cmd
!/config
!/event
!/internal
!/lookup
!/LICENSE
!/go.*
!/.env.example

View File

@ -1,56 +0,0 @@
name: release
on:
push:
tags:
- "v*"
jobs:
docker:
runs-on: ubuntu-latest
steps:
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Check out repo
uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Cache Docker layers
uses: actions/cache@v3
with:
path: /tmp/.buildx-cache
key: ${{ runner.os }}-buildx-${{ github.sha }}
restore-keys: |
${{ runner.os }}-buildx-
- name: Login to GHCR Docker registry
uses: docker/login-action@v1
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Set outputs
run: |
echo "RELEASE_TAG=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV \
&& echo "RELEASE_SHORT_COMMIT=$(git rev-parse --short HEAD)" >> $GITHUB_ENV
- name: Build and push image
uses: docker/build-push-action@v2
with:
context: ./
file: ./Dockerfile
platforms: linux/amd64
push: true
build-args: |
BUILD=${{ env.RELEASE_SHORT_COMMIT }}
cache-from: type=local,src=/tmp/.buildx-cache
cache-to: type=local,dest=/tmp/.buildx-cache
tags: |
ghcr.io/grassrootseconomics/sarafu-vise-events:latest
ghcr.io/grassrootseconomics/sarafu-vise-events:${{ env.RELEASE_TAG }}

View File

@ -1,38 +0,0 @@
FROM golang:1.23.4-bookworm AS build
ENV CGO_ENABLED=1
ARG BUILDPLATFORM
ARG TARGETPLATFORM
ARG BUILD=dev
WORKDIR /build
COPY . .
RUN apt-get update && apt-get install -y --no-install-recommends \
libgdbm-dev \
git \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /build
RUN echo "Building on $BUILDPLATFORM, building for $TARGETPLATFORM"
RUN go mod download
RUN go build -tags logwarn -o sarafu-vise-events -ldflags="-X main.build=${BUILD} -s -w" cmd/main.go
FROM debian:bookworm-slim
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y --no-install-recommends \
libgdbm-dev \
ca-certificates \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /service
COPY --from=build /build/sarafu-vise-events .
COPY --from=build /build/LICENSE .
COPY --from=build /build/.env.example .
RUN mv .env.example .env
CMD ["./sarafu-vise-events"]

View File

@ -9,31 +9,30 @@ import (
"syscall"
"git.defalsify.org/vise.git/logging"
sarafuconfig "git.grassecon.net/grassrootseconomics/sarafu-vise/config"
"git.grassecon.net/grassrootseconomics/visedriver/storage"
"git.grassecon.net/grassrootseconomics/sarafu-vise-events/config"
"git.grassecon.net/grassrootseconomics/sarafu-vise-events/event/nats"
"git.grassecon.net/grassrootseconomics/sarafu-vise-events/lookup"
viseevent "git.grassecon.net/grassrootseconomics/sarafu-vise/handlers/event"
"git.grassecon.net/grassrootseconomics/visedriver/storage"
)
var (
logg = logging.NewVanilla()
logg = logging.NewVanilla()
)
func main() {
config.LoadConfig()
override := sarafuconfig.NewOverride()
override := config.NewOverride()
flag.StringVar(&override.DbConn, "c", "?", "default connection string (replaces all unspecified strings)")
flag.StringVar(&override.ResourceConn, "resource", "?", "resource connection string")
flag.StringVar(&override.UserConn, "userdata", "?", "userdata store connection string")
flag.StringVar(&override.StateConn, "state", "?", "state store connection string")
flag.StringVar(override.DbConn, "c", "?", "default connection string (replaces all unspecified strings)")
flag.StringVar(override.ResourceConn, "resource", "?", "resource connection string")
flag.StringVar(override.UserConn, "userdata", "?", "userdata store connection string")
flag.StringVar(override.StateConn, "state", "?", "state store connection string")
flag.Parse()
sarafuconfig.Apply(override)
conns, err := sarafuconfig.GetConns()
config.Apply(&override)
conns, err := config.GetConns()
if err != nil {
fmt.Fprintf(os.Stderr, "conn specification error: %v\n", err)
os.Exit(1)

View File

@ -2,24 +2,29 @@ package config
import (
viseconfig "git.grassecon.net/grassrootseconomics/visedriver/config"
apiconfig "git.grassecon.net/grassrootseconomics/sarafu-api/config"
"git.grassecon.net/grassrootseconomics/sarafu-vise/config"
"git.grassecon.net/grassrootseconomics/visedriver/env"
)
var (
JetstreamURL string
JetstreamURL string
JetstreamClientName string
Apply = config.Apply
GetConns = config.GetConns
Apply = config.Apply
GetConns = config.GetConns
)
const (
defaultJetstreamURL string = "localhost:4222"
defaultJetstreamURL string = "localhost:4222"
defaultJetstreamClientName string = "omnom"
)
func LoadConfig() error {
err := config.LoadConfig()
err := viseconfig.LoadConfig()
if err != nil {
return err
}
err = apiconfig.LoadConfig()
if err != nil {
return err
}
@ -31,3 +36,7 @@ func LoadConfig() error {
func Language() string {
return viseconfig.DefaultLanguage
}
func NewOverride() config.Override {
return config.Override{}
}

View File

@ -1,8 +1,8 @@
package event
import (
apievent "git.grassecon.net/grassrootseconomics/sarafu-api/event"
geEvent "github.com/grassrootseconomics/eth-tracker/pkg/event"
apievent "git.grassecon.net/grassrootseconomics/sarafu-api/event"
)
const (

View File

@ -4,19 +4,20 @@ import (
"context"
"testing"
"git.defalsify.org/vise.git/cache"
"git.defalsify.org/vise.git/db"
"git.defalsify.org/vise.git/state"
"git.grassecon.net/grassrootseconomics/common/hex"
apievent "git.grassecon.net/grassrootseconomics/sarafu-api/event"
"git.grassecon.net/grassrootseconomics/sarafu-api/remote/http"
apimocks "git.grassecon.net/grassrootseconomics/sarafu-api/testutil/mocks"
"git.grassecon.net/grassrootseconomics/sarafu-vise-events/config"
viseevent "git.grassecon.net/grassrootseconomics/sarafu-vise/handlers/event"
storedb "git.grassecon.net/grassrootseconomics/sarafu-vise/store/db"
"git.defalsify.org/vise.git/cache"
"git.grassecon.net/grassrootseconomics/visedriver/testutil/mocks"
"git.grassecon.net/grassrootseconomics/sarafu-api/remote/http"
"git.grassecon.net/grassrootseconomics/sarafu-vise-events/config"
"git.grassecon.net/grassrootseconomics/common/hex"
storedb "git.grassecon.net/grassrootseconomics/sarafu-vise/store/db"
apievent "git.grassecon.net/grassrootseconomics/sarafu-api/event"
apimocks "git.grassecon.net/grassrootseconomics/sarafu-api/testutil/mocks"
viseevent "git.grassecon.net/grassrootseconomics/sarafu-vise/handlers/event"
)
func TestCustodialRegistration(t *testing.T) {
err := config.LoadConfig()
if err != nil {

View File

@ -5,13 +5,13 @@ import (
"encoding/json"
"fmt"
"git.defalsify.org/vise.git/logging"
apievent "git.grassecon.net/grassrootseconomics/sarafu-api/event"
"git.grassecon.net/grassrootseconomics/sarafu-vise-events/config"
"git.grassecon.net/grassrootseconomics/sarafu-vise-events/event"
geEvent "github.com/grassrootseconomics/eth-tracker/pkg/event"
nats "github.com/nats-io/nats.go"
"github.com/nats-io/nats.go/jetstream"
geEvent "github.com/grassrootseconomics/eth-tracker/pkg/event"
"git.defalsify.org/vise.git/logging"
"git.grassecon.net/grassrootseconomics/sarafu-vise-events/event"
"git.grassecon.net/grassrootseconomics/sarafu-vise-events/config"
apievent "git.grassecon.net/grassrootseconomics/sarafu-api/event"
)
var (
@ -23,10 +23,10 @@ var (
// Extends Router.
type NatsSubscription struct {
*event.Router
ctx context.Context
ctx context.Context
conn *nats.Conn
js jetstream.JetStream
cs jetstream.Consumer
js jetstream.JetStream
cs jetstream.Consumer
cctx jetstream.ConsumeContext
}
@ -43,7 +43,7 @@ func NewNatsSubscription(handler *apievent.EventsHandler) *NatsSubscription {
// Fails if connection fails or the "Jetstream" consumer cannot be set up.
//
// Once connected, it will attempt to reconnect if disconnected.
func (n *NatsSubscription) Connect(ctx context.Context, connStr string) error {
func(n *NatsSubscription) Connect(ctx context.Context, connStr string) error {
var err error
// enables set ctx in test, even if the connstr is invalid (js msg handler doesnt take context)
@ -59,8 +59,8 @@ func (n *NatsSubscription) Connect(ctx context.Context, connStr string) error {
return err
}
n.cs, err = n.js.CreateConsumer(ctx, "TRACKER", jetstream.ConsumerConfig{
Name: config.JetstreamClientName,
Durable: config.JetstreamClientName,
Name: config.JetstreamClientName,
Durable: config.JetstreamClientName,
FilterSubjects: []string{"TRACKER.*"},
})
if err != nil {
@ -78,7 +78,7 @@ func (n *NatsSubscription) Connect(ctx context.Context, connStr string) error {
}
// Close cleanly brings down the nats and jetstream connection.
func (n *NatsSubscription) Close() error {
func(n *NatsSubscription) Close() error {
n.cctx.Stop()
select {
case <-n.cctx.Closed():
@ -88,7 +88,7 @@ func (n *NatsSubscription) Close() error {
}
// jetstream message handler and acknowledger.
func (n *NatsSubscription) handleEvent(m jetstream.Msg) {
func(n *NatsSubscription) handleEvent(m jetstream.Msg) {
var ev geEvent.Event
logg.DebugCtxf(n.ctx, "have msg", "msg", m)

View File

@ -9,34 +9,34 @@ import (
"testing"
"time"
"git.defalsify.org/vise.git/db"
"git.grassecon.net/grassrootseconomics/common/hex"
"git.grassecon.net/grassrootseconomics/sarafu-api/models"
apimocks "git.grassecon.net/grassrootseconomics/sarafu-api/testutil/mocks"
"git.grassecon.net/grassrootseconomics/sarafu-vise-events/config"
"git.grassecon.net/grassrootseconomics/sarafu-vise-events/internal/testutil"
"git.grassecon.net/grassrootseconomics/sarafu-vise-events/lookup"
"git.grassecon.net/grassrootseconomics/sarafu-vise/handlers/application"
viseevent "git.grassecon.net/grassrootseconomics/sarafu-vise/handlers/event"
"git.grassecon.net/grassrootseconomics/sarafu-vise/store"
storedb "git.grassecon.net/grassrootseconomics/sarafu-vise/store/db"
"git.grassecon.net/grassrootseconomics/visedriver/testutil/mocks"
dataserviceapi "github.com/grassrootseconomics/ussd-data-service/pkg/api"
nats "github.com/nats-io/nats.go"
"github.com/nats-io/nats.go/jetstream"
dataserviceapi "github.com/grassrootseconomics/ussd-data-service/pkg/api"
"git.defalsify.org/vise.git/db"
"git.grassecon.net/grassrootseconomics/sarafu-vise-events/config"
"git.grassecon.net/grassrootseconomics/sarafu-vise/store"
storedb "git.grassecon.net/grassrootseconomics/sarafu-vise/store/db"
"git.grassecon.net/grassrootseconomics/sarafu-api/models"
"git.grassecon.net/grassrootseconomics/sarafu-vise-events/lookup"
"git.grassecon.net/grassrootseconomics/common/hex"
apimocks "git.grassecon.net/grassrootseconomics/sarafu-api/testutil/mocks"
"git.grassecon.net/grassrootseconomics/sarafu-vise-events/internal/testutil"
"git.grassecon.net/grassrootseconomics/sarafu-vise/handlers/application"
viseevent "git.grassecon.net/grassrootseconomics/sarafu-vise/handlers/event"
"git.grassecon.net/grassrootseconomics/visedriver/testutil/mocks"
)
const (
txBlock = 42
tokenAddress = "0x765DE816845861e75A25fCA122bb6898B8B1282a"
tokenSymbol = "FOO"
tokenName = "Foo Token"
txBlock = 42
tokenAddress = "0x765DE816845861e75A25fCA122bb6898B8B1282a"
tokenSymbol = "FOO"
tokenName = "Foo Token"
tokenDecimals = 6
txValue = 1337
tokenBalance = 362436
txTimestamp = 1730592500
txHash = "0xabcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789"
sinkAddress = "0xb42C5920014eE152F2225285219407938469BBfA"
txValue = 1337
tokenBalance = 362436
txTimestamp = 1730592500
txHash = "0xabcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789"
sinkAddress = "0xb42C5920014eE152F2225285219407938469BBfA"
)
// TODO: jetstream, would have been nice of you to provide an easier way to make a mock msg
@ -44,51 +44,51 @@ type testMsg struct {
data []byte
}
func (m *testMsg) Ack() error {
func(m *testMsg) Ack() error {
return nil
}
func (m *testMsg) Nak() error {
func(m *testMsg) Nak() error {
return nil
}
func (m *testMsg) NakWithDelay(time.Duration) error {
func(m *testMsg) NakWithDelay(time.Duration) error {
return nil
}
func (m *testMsg) Data() []byte {
func(m *testMsg) Data() []byte {
return m.data
}
func (m *testMsg) Reply() string {
func(m *testMsg) Reply() string {
return ""
}
func (m *testMsg) Subject() string {
func(m *testMsg) Subject() string {
return ""
}
func (m *testMsg) Term() error {
func(m *testMsg) Term() error {
return nil
}
func (m *testMsg) TermWithReason(string) error {
func(m *testMsg) TermWithReason(string) error {
return nil
}
func (m *testMsg) DoubleAck(ctx context.Context) error {
func(m *testMsg) DoubleAck(ctx context.Context) error {
return nil
}
func (m *testMsg) Headers() nats.Header {
func(m *testMsg) Headers() nats.Header {
return nats.Header{}
}
func (m *testMsg) InProgress() error {
func(m *testMsg) InProgress() error {
return nil
}
func (m *testMsg) Metadata() (*jetstream.MsgMetadata, error) {
func(m *testMsg) Metadata() (*jetstream.MsgMetadata, error) {
return nil, nil
}
@ -101,29 +101,29 @@ func TestHandleMsg(t *testing.T) {
api := &apimocks.MockApi{}
api.TransactionsContent = []dataserviceapi.Last10TxResponse{
dataserviceapi.Last10TxResponse{
Sender: apimocks.AliceChecksum,
Recipient: apimocks.BobChecksum,
TransferValue: strconv.Itoa(txValue),
Sender: apimocks.AliceChecksum,
Recipient: apimocks.BobChecksum,
TransferValue: strconv.Itoa(txValue),
ContractAddress: tokenAddress,
TxHash: txHash,
DateBlock: time.Unix(txTimestamp, 0),
TokenSymbol: tokenSymbol,
TokenDecimals: strconv.Itoa(tokenDecimals),
TxHash: txHash,
DateBlock: time.Unix(txTimestamp, 0),
TokenSymbol: tokenSymbol,
TokenDecimals: strconv.Itoa(tokenDecimals),
},
}
api.VoucherDataContent = &models.VoucherDataResult{
TokenSymbol: tokenSymbol,
TokenName: tokenName,
TokenName: tokenName,
//TokenDecimals: strconv.Itoa(tokenDecimals),
TokenDecimals: tokenDecimals,
SinkAddress: sinkAddress,
SinkAddress: sinkAddress,
}
api.VouchersContent = []dataserviceapi.TokenHoldings{
dataserviceapi.TokenHoldings{
ContractAddress: tokenAddress,
TokenSymbol: tokenSymbol,
TokenDecimals: strconv.Itoa(tokenDecimals),
Balance: strconv.Itoa(tokenBalance),
TokenSymbol: tokenSymbol,
TokenDecimals: strconv.Itoa(tokenDecimals),
Balance: strconv.Itoa(tokenBalance),
},
}
lookup.Api = api
@ -182,8 +182,8 @@ func TestHandleMsg(t *testing.T) {
t.Fatal(err)
}
fmts := fmt.Sprintf("%%1.%df", tokenDecimals)
expect := fmt.Sprintf(fmts, float64(tokenBalance)/math.Pow(10, tokenDecimals))
expect := fmt.Sprintf(fmts, float64(tokenBalance) / math.Pow(10, tokenDecimals))
//if !bytes.Equal(v, []byte(strconv.Itoa(tokenBalance))) {
if !bytes.Equal(v, []byte(expect)) {
t.Fatalf("expected '%d', got %s", tokenBalance, v)
}
@ -196,6 +196,7 @@ func TestHandleMsg(t *testing.T) {
t.Fatal("no transaction data")
}
mh, err := application.NewMenuHandlers(nil, userStore, nil, testutil.ReplaceSeparatorFunc)
if err != nil {
t.Fatal(err)
@ -209,4 +210,14 @@ func TestHandleMsg(t *testing.T) {
if rrs.Content != expect {
t.Fatalf("expected '%v', got '%v'", expect, rrs.Content)
}
// userDb.SetPrefix(event.DATATYPE_USERSUB)
// userDb.SetSession(apimocks.AliceSession)
// k := append([]byte("vouchers"), []byte("sym")...)
// v, err = userDb.Get(ctx, k)
// if err != nil {
// t.Fatal(err)
// }
// if !bytes.Contains(v, []byte(fmt.Sprintf("1:%s", tokenSymbol))) {
// t.Fatalf("expected '1:%s', got %s", tokenSymbol, v)
// }
}

View File

@ -30,7 +30,7 @@ func NewRouter(handler *apievent.EventsHandler) *Router {
//
// An error will be returned if no handler can be found, or if the resolved
// handler fails to successfully execute.
func (r *Router) Route(ctx context.Context, gev *geEvent.Event) error {
func(r *Router) Route(ctx context.Context, gev *geEvent.Event) error {
logg.DebugCtxf(ctx, "have event", "ev", gev)
evCC, ok := asCustodialRegistrationEvent(gev)
if ok {

View File

@ -34,6 +34,7 @@ func formatTransaction(tag string, idx int, item any) string {
return ""
}
// waiter to check whether object is available on dependency endpoints.
func updateWait(ctx context.Context) error {
return nil

View File

@ -9,36 +9,37 @@ import (
"testing"
"time"
dataserviceapi "github.com/grassrootseconomics/ussd-data-service/pkg/api"
"git.defalsify.org/vise.git/db"
"git.grassecon.net/grassrootseconomics/common/hex"
apievent "git.grassecon.net/grassrootseconomics/sarafu-api/event"
"git.grassecon.net/grassrootseconomics/sarafu-api/models"
apimocks "git.grassecon.net/grassrootseconomics/sarafu-api/testutil/mocks"
"git.grassecon.net/grassrootseconomics/sarafu-vise-events/config"
"git.grassecon.net/grassrootseconomics/sarafu-vise-events/internal/testutil"
"git.grassecon.net/grassrootseconomics/sarafu-vise-events/lookup"
"git.grassecon.net/grassrootseconomics/sarafu-vise/handlers/application"
viseevent "git.grassecon.net/grassrootseconomics/sarafu-vise/handlers/event"
"git.grassecon.net/grassrootseconomics/sarafu-api/models"
"git.grassecon.net/grassrootseconomics/sarafu-vise/store"
storedb "git.grassecon.net/grassrootseconomics/sarafu-vise/store/db"
"git.grassecon.net/grassrootseconomics/sarafu-vise-events/lookup"
"git.grassecon.net/grassrootseconomics/common/hex"
"git.grassecon.net/grassrootseconomics/sarafu-vise-events/internal/testutil"
apievent "git.grassecon.net/grassrootseconomics/sarafu-api/event"
apimocks "git.grassecon.net/grassrootseconomics/sarafu-api/testutil/mocks"
viseevent "git.grassecon.net/grassrootseconomics/sarafu-vise/handlers/event"
"git.grassecon.net/grassrootseconomics/visedriver/testutil/mocks"
dataserviceapi "github.com/grassrootseconomics/ussd-data-service/pkg/api"
)
const (
txBlock = 42
tokenAddress = "0x765DE816845861e75A25fCA122bb6898B8B1282a"
tokenSymbol = "FOO"
tokenName = "Foo Token"
txBlock = 42
tokenAddress = "0x765DE816845861e75A25fCA122bb6898B8B1282a"
tokenSymbol = "FOO"
tokenName = "Foo Token"
tokenDecimals = 6
txValue = 1337
tokenBalance = 362436
txTimestamp = 1730592500
txHash = "0xabcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789"
sinkAddress = "0xb42C5920014eE152F2225285219407938469BBfA"
bogusSym = "/-21380u"
txValue = 1337
tokenBalance = 362436
txTimestamp = 1730592500
txHash = "0xabcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789"
sinkAddress = "0xb42C5920014eE152F2225285219407938469BBfA"
bogusSym = "/-21380u"
)
func TestTokenTransfer(t *testing.T) {
err := config.LoadConfig()
if err != nil {
@ -48,29 +49,29 @@ func TestTokenTransfer(t *testing.T) {
api := &apimocks.MockApi{}
api.TransactionsContent = []dataserviceapi.Last10TxResponse{
dataserviceapi.Last10TxResponse{
Sender: apimocks.AliceChecksum,
Recipient: apimocks.BobChecksum,
TransferValue: strconv.Itoa(txValue),
Sender: apimocks.AliceChecksum,
Recipient: apimocks.BobChecksum,
TransferValue: strconv.Itoa(txValue),
ContractAddress: tokenAddress,
TxHash: txHash,
DateBlock: time.Unix(txTimestamp, 0),
TokenSymbol: tokenSymbol,
TokenDecimals: strconv.Itoa(tokenDecimals),
TxHash: txHash,
DateBlock: time.Unix(txTimestamp, 0),
TokenSymbol: tokenSymbol,
TokenDecimals: strconv.Itoa(tokenDecimals),
},
}
api.VoucherDataContent = &models.VoucherDataResult{
TokenSymbol: tokenSymbol,
TokenName: tokenName,
TokenName: tokenName,
//TokenDecimals: strconv.Itoa(tokenDecimals),
TokenDecimals: tokenDecimals,
SinkAddress: sinkAddress,
SinkAddress: sinkAddress,
}
api.VouchersContent = []dataserviceapi.TokenHoldings{
dataserviceapi.TokenHoldings{
ContractAddress: tokenAddress,
TokenSymbol: tokenSymbol,
TokenDecimals: strconv.Itoa(tokenDecimals),
Balance: strconv.Itoa(tokenBalance),
TokenSymbol: tokenSymbol,
TokenDecimals: strconv.Itoa(tokenDecimals),
Balance: strconv.Itoa(tokenBalance),
},
}
lookup.Api = api
@ -97,8 +98,8 @@ func TestTokenTransfer(t *testing.T) {
}
ev := &apievent.EventTokenTransfer{
From: apimocks.BobChecksum,
To: apimocks.AliceChecksum,
From: apimocks.BobChecksum,
To: apimocks.AliceChecksum,
Value: txValue,
}
@ -122,7 +123,7 @@ func TestTokenTransfer(t *testing.T) {
}
//if !bytes.Equal(v, []byte(strconv.Itoa(tokenBalance))) {
fmts := fmt.Sprintf("%%1.%df", tokenDecimals)
expect := fmt.Sprintf(fmts, float64(tokenBalance)/math.Pow(10, tokenDecimals))
expect := fmt.Sprintf(fmts, float64(tokenBalance) / math.Pow(10, tokenDecimals))
if !bytes.Equal(v, []byte(expect)) {
t.Fatalf("expected '%s', got %s", expect, v)
}
@ -159,33 +160,34 @@ func TestTokenMint(t *testing.T) {
api := &apimocks.MockApi{}
api.TransactionsContent = []dataserviceapi.Last10TxResponse{
dataserviceapi.Last10TxResponse{
Sender: apimocks.AliceChecksum,
Recipient: apimocks.BobChecksum,
TransferValue: strconv.Itoa(txValue),
Sender: apimocks.AliceChecksum,
Recipient: apimocks.BobChecksum,
TransferValue: strconv.Itoa(txValue),
ContractAddress: tokenAddress,
TxHash: txHash,
DateBlock: time.Unix(txTimestamp, 0),
TokenSymbol: tokenSymbol,
TokenDecimals: strconv.Itoa(tokenDecimals),
TxHash: txHash,
DateBlock: time.Unix(txTimestamp, 0),
TokenSymbol: tokenSymbol,
TokenDecimals: strconv.Itoa(tokenDecimals),
},
}
api.VoucherDataContent = &models.VoucherDataResult{
TokenSymbol: tokenSymbol,
TokenName: tokenName,
TokenName: tokenName,
//TokenDecimals: strconv.Itoa(tokenDecimals),
TokenDecimals: tokenDecimals,
SinkAddress: sinkAddress,
SinkAddress: sinkAddress,
}
api.VouchersContent = []dataserviceapi.TokenHoldings{
dataserviceapi.TokenHoldings{
ContractAddress: tokenAddress,
TokenSymbol: tokenSymbol,
TokenDecimals: strconv.Itoa(tokenDecimals),
Balance: strconv.Itoa(tokenBalance),
TokenSymbol: tokenSymbol,
TokenDecimals: strconv.Itoa(tokenDecimals),
Balance: strconv.Itoa(tokenBalance),
},
}
lookup.Api = api
ctx := context.Background()
storageService := mocks.NewMemStorageService(ctx)
eu := viseevent.NewEventsUpdater(api, storageService)
@ -207,7 +209,7 @@ func TestTokenMint(t *testing.T) {
}
ev := &apievent.EventTokenMint{
To: apimocks.AliceChecksum,
To: apimocks.AliceChecksum,
Value: txValue,
}
@ -230,8 +232,8 @@ func TestTokenMint(t *testing.T) {
t.Fatal(err)
}
fmts := fmt.Sprintf("%%1.%df", tokenDecimals)
expect := fmt.Sprintf(fmts, float64(tokenBalance)/math.Pow(10, tokenDecimals))
expect := fmt.Sprintf(fmts, float64(tokenBalance) / math.Pow(10, tokenDecimals))
//if !bytes.Equal(v, []byte(strconv.Itoa(tokenBalance))) {
if !bytes.Equal(v, []byte(expect)) {
t.Fatalf("expected '%d', got %s", tokenBalance, v)
}

12
go.mod
View File

@ -3,13 +3,13 @@ module git.grassecon.net/grassrootseconomics/sarafu-vise-events
go 1.23.4
require (
git.defalsify.org/vise.git v0.3.1
git.defalsify.org/vise.git v0.2.3-0.20250120121301-10739fb4a8c9
git.grassecon.net/grassrootseconomics/common v0.0.0-20250121134736-ba8cbbccea7d
git.grassecon.net/grassrootseconomics/sarafu-api v0.9.0-beta.1.0.20250310093912-8145b4bd004b
git.grassecon.net/grassrootseconomics/sarafu-vise v1.0.0-rc.12.0.20250324165708-419716a2b4e9
git.grassecon.net/grassrootseconomics/visedriver v0.9.0-beta.2
github.com/grassrootseconomics/eth-tracker v1.6.1-celo-prefork-rc
github.com/grassrootseconomics/ussd-data-service v1.4.0-beta
git.grassecon.net/grassrootseconomics/sarafu-api v0.0.0-20250121135150-e0b539809805
git.grassecon.net/grassrootseconomics/sarafu-vise v0.0.0-20250121142648-4baacb325d2b
git.grassecon.net/grassrootseconomics/visedriver v0.8.0-beta.10.0.20250121134912-f7d31e4e8162
github.com/grassrootseconomics/eth-tracker v1.3.0-rc
github.com/grassrootseconomics/ussd-data-service v1.2.0-beta
github.com/nats-io/nats.go v1.37.0
)

26
go.sum
View File

@ -1,15 +1,13 @@
git.defalsify.org/vise.git v0.3.1 h1:A6FhMcur09ft/JzUPGXR+KpA17fltfeBnasyvLMZmq4=
git.defalsify.org/vise.git v0.3.1/go.mod h1:jyBMe1qTYUz3mmuoC9JQ/TvFeW0vTanCUcPu3H8p4Ck=
git.defalsify.org/vise.git v0.2.3-0.20250120121301-10739fb4a8c9 h1:sPcqXQcywxA8W3W+9qQncLPmsrgqTIlec7vmD4/7vyA=
git.defalsify.org/vise.git v0.2.3-0.20250120121301-10739fb4a8c9/go.mod h1:jyBMe1qTYUz3mmuoC9JQ/TvFeW0vTanCUcPu3H8p4Ck=
git.grassecon.net/grassrootseconomics/common v0.0.0-20250121134736-ba8cbbccea7d h1:5mzLas+jxTUtusOKx4XvU+n2QvrV/mH17MnJRy46siQ=
git.grassecon.net/grassrootseconomics/common v0.0.0-20250121134736-ba8cbbccea7d/go.mod h1:wgQJZGIS6QuNLHqDhcsvehsbn5PvgV7aziRebMnJi60=
git.grassecon.net/grassrootseconomics/sarafu-api v0.9.0-beta.1.0.20250310093912-8145b4bd004b h1:xiTpaqWWoF5qcnarY/9ZkT6aVdnKwqztb2gzIahJn4w=
git.grassecon.net/grassrootseconomics/sarafu-api v0.9.0-beta.1.0.20250310093912-8145b4bd004b/go.mod h1:gOn89ipaDcDvmQXRMQYKUqcw/sJcwVOPVt2eC6Geip8=
git.grassecon.net/grassrootseconomics/sarafu-vise v1.0.0-rc.10 h1:zUZoTdeiCr/sLfFP20lZeAb6ULD0PZwPqITC4H11T2Y=
git.grassecon.net/grassrootseconomics/sarafu-vise v1.0.0-rc.10/go.mod h1:Quy9IpkAIII/Z5xEg3Rw8xC1Ucpk31fn+cnA0Fansyw=
git.grassecon.net/grassrootseconomics/sarafu-vise v1.0.0-rc.12.0.20250324165708-419716a2b4e9 h1:BRmBC68e3yqvDfNmBJKWtNadHs6acfuHw+rKyPO1gqI=
git.grassecon.net/grassrootseconomics/sarafu-vise v1.0.0-rc.12.0.20250324165708-419716a2b4e9/go.mod h1:Quy9IpkAIII/Z5xEg3Rw8xC1Ucpk31fn+cnA0Fansyw=
git.grassecon.net/grassrootseconomics/visedriver v0.9.0-beta.2 h1:YFztSsexCUgFo6M0tbngRwYdgJd3LQV3RO/Jw09u3+k=
git.grassecon.net/grassrootseconomics/visedriver v0.9.0-beta.2/go.mod h1:6B6ByxXOiRY0NR7K02Bf3fEu7z+2c/6q8PFVNjC5G8w=
git.grassecon.net/grassrootseconomics/sarafu-api v0.0.0-20250121135150-e0b539809805 h1:deGnqf4YCsbxhXgjFEjYjTUCvciLEmI26T9IysRsQXY=
git.grassecon.net/grassrootseconomics/sarafu-api v0.0.0-20250121135150-e0b539809805/go.mod h1:9bc3d//Qqm11hz7GYRdQc1Uan+0GJIOpvRBbv8cHMu8=
git.grassecon.net/grassrootseconomics/sarafu-vise v0.0.0-20250121142648-4baacb325d2b h1:kUQW5cM4Q7TogrUfrxFjdvA/BYCescsAZBtf5teLYrY=
git.grassecon.net/grassrootseconomics/sarafu-vise v0.0.0-20250121142648-4baacb325d2b/go.mod h1:AF6qgkV+OmxamrPcrzZfsRUYTaQMZXBRejRg7dIKej4=
git.grassecon.net/grassrootseconomics/visedriver v0.8.0-beta.10.0.20250121134912-f7d31e4e8162 h1:NaPbgGQ1Nb+yYF+Qj1LSagpjYeDcSXST8iZwONg4afY=
git.grassecon.net/grassrootseconomics/visedriver v0.8.0-beta.10.0.20250121134912-f7d31e4e8162/go.mod h1:pjKp9L/ZsWW3kMB0UoIl1yv9TBIuU33mn9Aghxp7vGk=
github.com/alecthomas/assert/v2 v2.2.2 h1:Z/iVC0xZfWTaFNE6bA3z07T86hd45Xe2eLt6WVy2bbk=
github.com/alecthomas/assert/v2 v2.2.2/go.mod h1:pXcQ2Asjp247dahGEmsZ6ru0UVwnkhktn7S0bBDLxvQ=
github.com/alecthomas/participle/v2 v2.0.0 h1:Fgrq+MbuSsJwIkw3fEj9h75vDP0Er5JzepJ0/HNHv0g=
@ -27,10 +25,10 @@ github.com/gofrs/uuid v4.4.0+incompatible h1:3qXRTX8/NbyulANqlc0lchS1gqAVxRgsuW1
github.com/gofrs/uuid v4.4.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
github.com/grassrootseconomics/eth-custodial v1.3.0-beta h1:twrMBhl89GqDUL9PlkzQxMP/6OST1BByrNDj+rqXDmU=
github.com/grassrootseconomics/eth-custodial v1.3.0-beta/go.mod h1:7uhRcdnJplX4t6GKCEFkbeDhhjlcaGJeJqevbcvGLZo=
github.com/grassrootseconomics/eth-tracker v1.6.1-celo-prefork-rc h1:btdkaeW4p/Wz/0JZto9dXvF/om0Ihuhjv5Dt3bwFKmg=
github.com/grassrootseconomics/eth-tracker v1.6.1-celo-prefork-rc/go.mod h1:ZuTo4Jcn4EchQ9OybnEZW/A8x6rM1ssiYJn9/AXAVJs=
github.com/grassrootseconomics/ussd-data-service v1.4.0-beta h1:4fMd/3h2ZIhRg4GdHQmRw5FfD3MpJvFNNJQo+Q27f5M=
github.com/grassrootseconomics/ussd-data-service v1.4.0-beta/go.mod h1:9sGnorpKaK76FmOGXoh/xv7x5siSFNYdXxQo9BKW4DI=
github.com/grassrootseconomics/eth-tracker v1.3.0-rc h1:iYe2rwCBrU5O8x0+HSJRjcPT1h68k/uGd3i/cJJQuTQ=
github.com/grassrootseconomics/eth-tracker v1.3.0-rc/go.mod h1:rLXM5u8FDHnMEdah8ACgo/wfawu4o2sljHGkky2rQKE=
github.com/grassrootseconomics/ussd-data-service v1.2.0-beta h1:fn1gwbWIwHVEBtUC2zi5OqTlfI/5gU1SMk0fgGixIXk=
github.com/grassrootseconomics/ussd-data-service v1.2.0-beta/go.mod h1:omfI0QtUwIdpu9gMcUqLMCG8O1XWjqJGBx1qUMiGWC0=
github.com/graygnuorg/go-gdbm v0.0.0-20220711140707-71387d66dce4 h1:U4kkNYryi/qfbBF8gh7Vsbuz+cVmhf5kt6pE9bYYyLo=
github.com/graygnuorg/go-gdbm v0.0.0-20220711140707-71387d66dce4/go.mod h1:zpZDgZFzeq9s0MIeB1P50NIEWDFFHSFBohI/NbaTD/Y=
github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM=

View File

@ -1,8 +1,8 @@
package lookup
import (
"git.grassecon.net/grassrootseconomics/sarafu-api/remote"
"git.grassecon.net/grassrootseconomics/sarafu-api/remote/http"
"git.grassecon.net/grassrootseconomics/sarafu-api/remote"
)
var (