Skip to content

Instantly share code, notes, and snippets.

@gmelodie
Last active March 28, 2022 22:09
Show Gist options
  • Save gmelodie/92204b6fee23ab2c5ad997c5f56b5896 to your computer and use it in GitHub Desktop.
Save gmelodie/92204b6fee23ab2c5ad997c5f56b5896 to your computer and use it in GitHub Desktop.
Example code to advertise content to storetheindex
package main
import (
"context"
"fmt"
"log"
"github.com/filecoin-project/index-provider/engine"
"github.com/filecoin-project/index-provider/metadata"
"github.com/filecoin-project/storetheindex/api/v0/ingest/schema"
"github.com/libp2p/go-libp2p"
"github.com/libp2p/go-libp2p-core/crypto"
"github.com/multiformats/go-multiaddr"
)
func main() {
arPrivKey, _, err := crypto.GenerateKeyPair(crypto.RSA, 2048)
if err != nil {
log.Fatal(err)
}
// arPrivKey, err := stringToPrivkey("k51qzi5uqu5dlw1o6evn9cgm5pgjyzmit2pgf4gqdhldzas33l9fcoohrim5tr")
// if err != nil {
// log.Fatal(err)
// }
port := 1234
addr, _ := multiaddr.NewMultiaddr(fmt.Sprintf("/ip4/0.0.0.0/tcp/%d", port))
h, err := libp2p.New(libp2p.Identity(arPrivKey), libp2p.ListenAddrs(addr))
if err != nil {
log.Fatal(err)
}
e, err := engine.New(
engine.WithHost(h),
engine.WithPublisherKind(engine.DataTransferPublisher),
// engine.WithRetrievalAddrs(addr),
)
if err != nil {
log.Fatal(err)
}
e.Start(context.Background())
defer e.Shutdown()
ctxID := []byte("main")
md := metadata.New(metadata.Bitswap{})
mdBytes, err := md.MarshalBinary()
if err != nil {
log.Fatal(err)
}
fmt.Println(h.ID().String())
ad := schema.Advertisement{
Provider: h.ID().String(),
Addresses: multiAddsToString(h.Addrs()),
Entries: schema.NoEntries,
ContextID: ctxID,
Metadata: mdBytes,
}
adCID, err := e.Publish(context.Background(), ad)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", adCID)
latestAd, err := e.GetAdv(context.Background(), adCID)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", latestAd)
}
func stringToPrivkey(privKeyStr string) (crypto.PrivKey, error) {
privKeyBytes, err := crypto.ConfigDecodeKey(privKeyStr)
if err != nil {
return nil, err
}
fmt.Println("test2")
privKey, err := crypto.UnmarshalPrivateKey(privKeyBytes)
if err != nil {
return nil, err
}
fmt.Println("test3")
return privKey, nil
}
func multiAddsToString(addrs []multiaddr.Multiaddr) []string {
var rAddrs []string
for _, addr := range addrs {
rAddrs = append(rAddrs, addr.String())
}
return rAddrs
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment