From 7c1c9db6fa9084b23bbd2b425808026ad10cbce3 Mon Sep 17 00:00:00 2001 From: hh Date: Fri, 12 Jan 2024 13:14:59 +0800 Subject: [PATCH 01/10] update gitignore --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 699eef0..6dabcdb 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,5 @@ mempool/mempool ord/ord .env app.yaml -.gcloudignore \ No newline at end of file +.gcloudignore +*.exe \ No newline at end of file From 59381725a8487c7b22a3bfb5e8c39eaf5302f58e Mon Sep 17 00:00:00 2001 From: hh Date: Fri, 12 Jan 2024 13:32:17 +0800 Subject: [PATCH 02/10] update readme --- .env.example | 11 ++++++ README.md | 37 +++++++++++++++++- docker-compose.yml | 26 ++++++++++++ .../screenshot_2024-01-10_at_8.01.33___am.png | Bin 0 -> 86762 bytes 4 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 .env.example create mode 100644 docker-compose.yml create mode 100644 images/screenshot_2024-01-10_at_8.01.33___am.png diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..89959e6 --- /dev/null +++ b/.env.example @@ -0,0 +1,11 @@ +BITCOIN_HOST= +BITCOIN_PORT= +BITCOIN_USER= +BITCOIN_PASS= + +POSTGRES_FULL="postgresql://bsv:111111@127.0.0.1:5432/1sats?sslmode=disable" + +JUNGLEBUS=https://junglebus.gorillapool.io + +## the subscription id, go https://junglebus.gorillapool.io/ to got one +ONESAT=9825fd78f948e31e036752bbc2ba7b3c6bf4279a49b615793cc1bdf9d28672e9 \ No newline at end of file diff --git a/README.md b/README.md index cd8ebf3..c51afc9 100644 --- a/README.md +++ b/README.md @@ -16,18 +16,53 @@ If a satoshi is subsequently packaged up in an output of more than one satoshi, ## Setup instructions depricated. Please reach out -### Environment Variables +## Environment Variables - POSTGRES_FULL=`` - JUNGLEBUS=https://junglebus.gorillapool.io - ARC=https://arc.gorillapool.io - REDIS=`:` - TAAL_TOKEN=`` +- copy `.env.example` as `.env` +- go https://junglebus.gorillapool.io to get a subscription id + + create a with such config: + ![](./images/screenshot_2024-01-10_at_8.01.33___am.png) + +## Start docker + + +``` +docker-compose up +``` + + ## Run DB migrations ``` + +# cd migrations go run . ``` +## Run Ord +``` +cd cmd/ord +go build +./ord -t [subscription id] -s 825885 +``` +## Run BSV20v2 +``` +cd cmd/bsv20v2 +go build +./bsv20v2 -t [subscription id] -s 825885 +``` + +## Run Http server +``` +cd cmd/server +go build +./server +``` diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..32f25a5 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,26 @@ +# Use postgres/example user/password credentials +version: '3.1' + +services: + + db: + image: postgres + restart: always + ports: + - 5432:5432 + environment: + POSTGRES_USER: bsv + POSTGRES_PASSWORD: 111111 + POSTGRES_DB: 1sats + + redis: + image: redis:latest + command: redis-server #--requirepass $REDIS_PASSWORD + ports: + - 6379:6379 + + adminer: + image: adminer + restart: always + ports: + - 8080:8080 \ No newline at end of file diff --git a/images/screenshot_2024-01-10_at_8.01.33___am.png b/images/screenshot_2024-01-10_at_8.01.33___am.png new file mode 100644 index 0000000000000000000000000000000000000000..8999c98e30675a8c12bf335fdd579bd6d46f2848 GIT binary patch literal 86762 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 UOOkb)Da8N;p00i_>zopr0Fs~~Gynhq literal 0 HcmV?d00001 From 7d5531d63ae917060ebae39d5eca38e24c41b756 Mon Sep 17 00:00:00 2001 From: hh Date: Fri, 12 Jan 2024 13:35:28 +0800 Subject: [PATCH 03/10] update env --- .env.example | 4 ++-- docker-compose.yml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.env.example b/.env.example index 89959e6..98ccea5 100644 --- a/.env.example +++ b/.env.example @@ -3,9 +3,9 @@ BITCOIN_PORT= BITCOIN_USER= BITCOIN_PASS= -POSTGRES_FULL="postgresql://bsv:111111@127.0.0.1:5432/1sats?sslmode=disable" +POSTGRES_FULL="postgresql://user:password@127.0.0.1:5432/1sats?sslmode=disable" JUNGLEBUS=https://junglebus.gorillapool.io ## the subscription id, go https://junglebus.gorillapool.io/ to got one -ONESAT=9825fd78f948e31e036752bbc2ba7b3c6bf4279a49b615793cc1bdf9d28672e9 \ No newline at end of file +ONESAT= \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 32f25a5..145ba51 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -9,8 +9,8 @@ services: ports: - 5432:5432 environment: - POSTGRES_USER: bsv - POSTGRES_PASSWORD: 111111 + POSTGRES_USER: user + POSTGRES_PASSWORD: password POSTGRES_DB: 1sats redis: From 188cf1a88ef90a343c4deeeda0fb0b053df6e764 Mon Sep 17 00:00:00 2001 From: hh Date: Wed, 31 Jan 2024 11:32:04 +0800 Subject: [PATCH 04/10] APIs --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index c51afc9..dea9de5 100644 --- a/README.md +++ b/README.md @@ -66,3 +66,7 @@ cd cmd/server go build ./server ``` + +## Start APIs + +https://github.com/sCrypt-Inc/1sat-server-js From 457523a9999c21cb0df5dd68264a4c7d130a1479 Mon Sep 17 00:00:00 2001 From: hh Date: Wed, 31 Jan 2024 17:13:29 +0800 Subject: [PATCH 05/10] add LoadTxFromWOC --- lib/data.go | 30 ++++++++++++++++++++++++++++++ lib/data_test.go | 21 +++++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 lib/data_test.go diff --git a/lib/data.go b/lib/data.go index 8cbfc1b..46552ec 100644 --- a/lib/data.go +++ b/lib/data.go @@ -60,6 +60,7 @@ func LoadRawtx(txid string) (rawtx []byte, err error) { rawtx, _ = Rdb.Get(context.Background(), txid).Bytes() if len(rawtx) > 0 { + // log.Println("Requesting tx from redis", txid) return rawtx, nil } @@ -78,6 +79,11 @@ func LoadRawtx(txid string) (rawtx []byte, err error) { } } + if len(rawtx) == 0 { + log.Println("Requesting tx from WOC", txid) + rawtx, err = LoadTxFromWOC(txid, os.Getenv("NETWORK")) + } + if len(rawtx) == 0 { err = fmt.Errorf("missing-txn %s", txid) return @@ -119,3 +125,27 @@ func GetSpend(outpoint *Outpoint) (spend []byte, err error) { } return io.ReadAll(resp.Body) } + +func LoadTxFromWOC(txid string, network string) (rawtx []byte, err error) { + + if len(network) == 0 { + network = "main" + } + + url := fmt.Sprintf("https://api.whatsonchain.com/v1/bsv/%s/tx/%s/hex", network, txid) + // log.Println("Requesting txo", url) + resp, err := http.Get(url) + if err != nil { + return + } + defer resp.Body.Close() + + if resp.StatusCode != 200 { + err = fmt.Errorf("missing-txn %s", txid) + return + } + + rawtx, err = io.ReadAll(resp.Body) + + return +} diff --git a/lib/data_test.go b/lib/data_test.go new file mode 100644 index 0000000..bdc5308 --- /dev/null +++ b/lib/data_test.go @@ -0,0 +1,21 @@ +package lib + +import ( + "encoding/hex" + "testing" +) + +// TestHelloName calls greetings.Hello with a name, checking +// for a valid return value. +func TestLoadTxFromWOC(t *testing.T) { + network := "main" + txid := "a9b3fa37e171ffe0e79b507a8a4486f691918a876321e21a85d7a26c8a02fc15" + rawtx, err := LoadTxFromWOC(txid, network) + if err != nil { + t.Fatalf(`LoadTxFromWOC err: %v`, err) + } + + if hex.EncodeToString(rawtx) != "303130303030303030313030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303066666666666666663137303331626138306332663731363436633665366232663235376330393366333732646434613832383030303030306666666666666666303133373031343132353030303030303030313937366139313436626163643735376162663039393731356331323531653761333338386561636236343738316361383861633030303030303030" { + t.Fatalf(`The tx not as expected`) + } +} From 1b340783b2a9ca9f85452e8fbb80b95f0405c99d Mon Sep 17 00:00:00 2001 From: hh Date: Thu, 1 Feb 2024 16:59:07 +0800 Subject: [PATCH 06/10] Fix LoadTxFromWOC --- lib/data.go | 12 +++++++++++- lib/outpoint.go | 4 ++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/lib/data.go b/lib/data.go index 46552ec..ed27797 100644 --- a/lib/data.go +++ b/lib/data.go @@ -2,6 +2,7 @@ package lib import ( "context" + "encoding/hex" "fmt" "io" "log" @@ -145,7 +146,16 @@ func LoadTxFromWOC(txid string, network string) (rawtx []byte, err error) { return } - rawtx, err = io.ReadAll(resp.Body) + b, err := io.ReadAll(resp.Body) + + if err != nil { + return + } + + rawtx, err = hex.DecodeString(string(b)) + if err != nil { + panic(err) + } return } diff --git a/lib/outpoint.go b/lib/outpoint.go index cd557d3..d13859d 100644 --- a/lib/outpoint.go +++ b/lib/outpoint.go @@ -56,6 +56,10 @@ func (o *Outpoint) Txid() []byte { return (*o)[:32] } +func (o *Outpoint) TxidStr() string { + return hex.EncodeToString((*o).Txid()) +} + func (o *Outpoint) Vout() uint32 { return binary.BigEndian.Uint32((*o)[32:]) } From a38af17e6e62390a70c09376013d6c93b80f7ef9 Mon Sep 17 00:00:00 2001 From: hh Date: Fri, 2 Feb 2024 16:44:52 +0800 Subject: [PATCH 07/10] Fix miss tx indexing --- cmd/bsv20-analysis/bsv20-analysis.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/cmd/bsv20-analysis/bsv20-analysis.go b/cmd/bsv20-analysis/bsv20-analysis.go index 680f3e4..51f42cf 100644 --- a/cmd/bsv20-analysis/bsv20-analysis.go +++ b/cmd/bsv20-analysis/bsv20-analysis.go @@ -61,6 +61,11 @@ func init() { if err != nil { log.Panic(err) } + + err = ordinals.Initialize(indexer.Db, indexer.Rdb) + if err != nil { + log.Panic(err) + } } func main() { @@ -89,6 +94,7 @@ func main() { ticks := map[string]uint64{} for _, txo := range ctx.Txos { if bsv20, ok := txo.Data["bsv20"].(*ordinals.Bsv20); ok { + bsv20.Save(txo) ticker := bsv20.Ticker if ticker == "" { if bsv20.Id == nil { From fbdb02edc616e08e8af5c7c9f9a44ce70d4d70af Mon Sep 17 00:00:00 2001 From: hh Date: Sat, 3 Feb 2024 15:47:06 +0800 Subject: [PATCH 08/10] add bsv20-analysis-v2 --- cmd/bsv20-analysis-v2/bsv20-analysis-v2.go | 122 +++++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 cmd/bsv20-analysis-v2/bsv20-analysis-v2.go diff --git a/cmd/bsv20-analysis-v2/bsv20-analysis-v2.go b/cmd/bsv20-analysis-v2/bsv20-analysis-v2.go new file mode 100644 index 0000000..70512fa --- /dev/null +++ b/cmd/bsv20-analysis-v2/bsv20-analysis-v2.go @@ -0,0 +1,122 @@ +package main + +import ( + "context" + "flag" + "fmt" + "log" + "os" + + "github.com/jackc/pgx/v5/pgxpool" + "github.com/joho/godotenv" + "github.com/redis/go-redis/v9" + "github.com/shruggr/1sat-indexer/indexer" + "github.com/shruggr/1sat-indexer/lib" + "github.com/shruggr/1sat-indexer/ordinals" +) + +var POSTGRES string +var db *pgxpool.Pool +var rdb *redis.Client +var INDEXER string +var TOPIC string +var FROM_BLOCK uint +var VERBOSE int +var CONCURRENCY int = 64 + +func init() { + wd, _ := os.Getwd() + log.Println("CWD:", wd) + godotenv.Load(fmt.Sprintf(`%s/../../.env`, wd)) + + flag.StringVar(&INDEXER, "id", "", "Indexer name") + flag.StringVar(&TOPIC, "t", "", "Junglebus SubscriptionID") + flag.UintVar(&FROM_BLOCK, "s", uint(lib.TRIGGER), "Start from block") + flag.IntVar(&CONCURRENCY, "c", 64, "Concurrency Limit") + flag.IntVar(&VERBOSE, "v", 0, "Verbose") + flag.Parse() + + if POSTGRES == "" { + POSTGRES = os.Getenv("POSTGRES_FULL") + } + var err error + log.Println("POSTGRES:", POSTGRES) + db, err = pgxpool.New(context.Background(), POSTGRES) + if err != nil { + log.Panic(err) + } + + rdb = redis.NewClient(&redis.Options{ + Addr: os.Getenv("REDIS"), + Password: "", // no password set + DB: 0, // use default DB + }) + + err = indexer.Initialize(db, rdb) + if err != nil { + log.Panic(err) + } + +} + +func main() { + + err := indexer.Exec( + true, + false, + func(ctx *lib.IndexContext) error { + ordinals.ParseInscriptions(ctx) + ids := map[string]uint64{} + for _, txo := range ctx.Txos { + if bsv20, ok := txo.Data["bsv20"].(*ordinals.Bsv20); ok { + if bsv20.Id == nil { + continue + } + id := bsv20.Id.String() + if txouts, ok := ids[id]; !ok { + ids[id] = 1 + } else { + ids[id] = txouts + 1 + } + } + } + for idstr, txouts := range ids { + id, err := lib.NewOutpointFromString(idstr) + if err != nil { + log.Printf("Err: %s %x %d\n", idstr, ctx.Txid, txouts) + return err + } else { + _, err = db.Exec(context.Background(), ` + INSERT INTO bsv20v2_txns(txid, id, height, idx, txouts) + VALUES($1, $2, $3, $4, $5) + ON CONFLICT(txid, id) DO NOTHING`, + ctx.Txid, + id, + ctx.Height, + ctx.Idx, + txouts, + ) + } + if err != nil { + log.Printf("Err: %s %x %d\n", idstr, ctx.Txid, txouts) + return err + } + } + return nil + }, + func(height uint32) error { + + return nil + }, + INDEXER, + TOPIC, + FROM_BLOCK, + CONCURRENCY, + false, + false, + VERBOSE, + ) + if err != nil { + log.Panicln(err) + } +} From b2b4e2dbb46e0293ffca1ba80ec55c8a496cccc6 Mon Sep 17 00:00:00 2001 From: hh Date: Mon, 26 Feb 2024 18:33:00 +0800 Subject: [PATCH 09/10] add gitignore --- cmd/bsv20-analysis-v2/.gitignore | 1 + 1 file changed, 1 insertion(+) create mode 100644 cmd/bsv20-analysis-v2/.gitignore diff --git a/cmd/bsv20-analysis-v2/.gitignore b/cmd/bsv20-analysis-v2/.gitignore new file mode 100644 index 0000000..ea96d4b --- /dev/null +++ b/cmd/bsv20-analysis-v2/.gitignore @@ -0,0 +1 @@ +bsv20-analysis-v2 \ No newline at end of file From bfe36cc40eba43f154f741ae5aa0f979a8ce6ebe Mon Sep 17 00:00:00 2001 From: hh Date: Mon, 26 Feb 2024 18:34:47 +0800 Subject: [PATCH 10/10] use env var --- docker-compose.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 145ba51..d0061e9 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -9,9 +9,9 @@ services: ports: - 5432:5432 environment: - POSTGRES_USER: user - POSTGRES_PASSWORD: password - POSTGRES_DB: 1sats + POSTGRES_USER: $DB_USERNAME + POSTGRES_PASSWORD: $DB_PASSWORD + POSTGRES_DB: $DB_NAME redis: image: redis:latest