node/hack: add example RPC account traversal script
Change-Id: If61ac6185f9173c489c8ddee5d4c60edf734ff20
This commit is contained in:
parent
b577b70b2e
commit
707c5caa9b
|
@ -36,11 +36,13 @@ require (
|
|||
github.com/spf13/viper v1.7.1
|
||||
github.com/status-im/keycard-go v0.0.0-20200402102358-957c09536969
|
||||
github.com/stretchr/testify v1.7.0
|
||||
github.com/tendermint/tendermint v0.33.7
|
||||
github.com/terra-project/terra.go v1.0.1-0.20210129055710-7a586e5e027a
|
||||
github.com/tidwall/gjson v1.8.1
|
||||
go.uber.org/zap v1.16.0
|
||||
golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a
|
||||
golang.org/x/sys v0.0.0-20210601080250-7ecdf8ef093b
|
||||
golang.org/x/time v0.0.0-20201208040808-7e3f01d25324
|
||||
google.golang.org/api v0.47.0
|
||||
google.golang.org/genproto v0.0.0-20210617175327-b9e0b3197ced
|
||||
google.golang.org/grpc v1.38.0
|
||||
|
@ -215,7 +217,6 @@ require (
|
|||
github.com/tendermint/btcd v0.1.1 // indirect
|
||||
github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15 // indirect
|
||||
github.com/tendermint/go-amino v0.15.1 // indirect
|
||||
github.com/tendermint/tendermint v0.33.7 // indirect
|
||||
github.com/tendermint/tm-db v0.5.1 // indirect
|
||||
github.com/teris-io/shortid v0.0.0-20201117134242-e59966efd125 // indirect
|
||||
github.com/tidwall/match v1.0.3 // indirect
|
||||
|
|
|
@ -0,0 +1,109 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"github.com/gagliardetto/solana-go"
|
||||
"github.com/gagliardetto/solana-go/rpc"
|
||||
"golang.org/x/time/rate"
|
||||
"log"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
/*
|
||||
1/0def15a24423e1edd1a5ab16f557b9060303ddbab8c803d2ee48f4b78a1cfd6b/118
|
||||
-> wPkMzrFNdXFtATPFYDMh9EMJNZyAd4un7TCezG7AgY2
|
||||
1/ec7372995d5cc8732397fb0ad35c0121e0eaa90d26f828a534cab54391b3a4f5/66
|
||||
-> Gv1KWf8DT1jKv5pKBmGaTmVszqa56Xn8YGx2Pg7i7qAk
|
||||
*/
|
||||
|
||||
const (
|
||||
mainnetApi = "https://explorer-api.mainnet-beta.solana.com"
|
||||
)
|
||||
|
||||
var (
|
||||
emitter = solana.MustPublicKeyFromBase58("Gv1KWf8DT1jKv5pKBmGaTmVszqa56Xn8YGx2Pg7i7qAk")
|
||||
|
||||
want = []string{
|
||||
"66",
|
||||
"79",
|
||||
"442",
|
||||
"508",
|
||||
"692",
|
||||
"782",
|
||||
"908",
|
||||
"920",
|
||||
"942",
|
||||
"1069",
|
||||
"1075",
|
||||
"1083",
|
||||
"1153",
|
||||
"1184",
|
||||
}
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
c := rpc.New(mainnetApi)
|
||||
|
||||
limiter := rate.NewLimiter(rate.Every(1*time.Second), 10)
|
||||
|
||||
var limit uint64 = 100
|
||||
var before solana.Signature
|
||||
|
||||
sigs := make([]solana.Signature, 0, limit*2)
|
||||
|
||||
for {
|
||||
err := limiter.Wait(ctx)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
log.Printf("requesting before: %s", before)
|
||||
out, err := c.GetConfirmedSignaturesForAddress2(ctx, emitter, &rpc.GetConfirmedSignaturesForAddress2Opts{
|
||||
Limit: &limit,
|
||||
Before: before,
|
||||
})
|
||||
if err != nil {
|
||||
log.Fatalf("GetConfirmedSignaturesForAddress2 %s: %v", emitter, err)
|
||||
}
|
||||
|
||||
if len(out) == 0 {
|
||||
log.Println("fetched all txes")
|
||||
break
|
||||
}
|
||||
|
||||
last := out[len(out)-1].Signature
|
||||
|
||||
log.Printf("fetched %d transactions, from %s to %s",
|
||||
len(out), out[0].Signature, last)
|
||||
|
||||
for _, sig := range out {
|
||||
sigs = append(sigs, sig.Signature)
|
||||
}
|
||||
|
||||
before = last
|
||||
}
|
||||
|
||||
log.Printf("found a total of %d transactions", len(sigs))
|
||||
|
||||
for _, sig := range sigs {
|
||||
out, err := c.GetConfirmedTransaction(ctx, sig)
|
||||
if err != nil {
|
||||
log.Fatalf("GetConfirmedTransaction %s: %v", sig, err)
|
||||
}
|
||||
|
||||
for _, msg := range out.Meta.LogMessages {
|
||||
if strings.HasPrefix(msg, "Program log: Sequence:") {
|
||||
seq := msg[23:]
|
||||
//log.Printf("%s %s", sig, seq)
|
||||
|
||||
for _, w := range want {
|
||||
if w == seq {
|
||||
log.Printf("FOUND https://explorer.solana.com/tx/%s seq %s", sig, seq)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue