mirror of
https://github.com/DeBrosOfficial/network.git
synced 2026-01-30 19:23:03 +00:00
58 lines
1.4 KiB
Go
58 lines
1.4 KiB
Go
package registry
|
|
|
|
import (
|
|
"bytes"
|
|
"context"
|
|
"fmt"
|
|
"io"
|
|
|
|
"github.com/DeBrosOfficial/network/pkg/ipfs"
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
// IPFSStore handles IPFS storage operations for WASM bytecode.
|
|
type IPFSStore struct {
|
|
ipfs ipfs.IPFSClient
|
|
ipfsAPIURL string
|
|
logger *zap.Logger
|
|
}
|
|
|
|
// NewIPFSStore creates a new IPFS store.
|
|
func NewIPFSStore(ipfsClient ipfs.IPFSClient, ipfsAPIURL string, logger *zap.Logger) *IPFSStore {
|
|
return &IPFSStore{
|
|
ipfs: ipfsClient,
|
|
ipfsAPIURL: ipfsAPIURL,
|
|
logger: logger,
|
|
}
|
|
}
|
|
|
|
// Upload uploads WASM bytecode to IPFS and returns the CID.
|
|
func (s *IPFSStore) Upload(ctx context.Context, wasmBytes []byte, name string) (string, error) {
|
|
reader := bytes.NewReader(wasmBytes)
|
|
resp, err := s.ipfs.Add(ctx, reader, name+".wasm")
|
|
if err != nil {
|
|
return "", fmt.Errorf("failed to upload WASM to IPFS: %w", err)
|
|
}
|
|
return resp.Cid, nil
|
|
}
|
|
|
|
// Get retrieves WASM bytecode from IPFS by CID.
|
|
func (s *IPFSStore) Get(ctx context.Context, wasmCID string) ([]byte, error) {
|
|
if wasmCID == "" {
|
|
return nil, fmt.Errorf("wasmCID cannot be empty")
|
|
}
|
|
|
|
reader, err := s.ipfs.Get(ctx, wasmCID, s.ipfsAPIURL)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed to get WASM from IPFS: %w", err)
|
|
}
|
|
defer reader.Close()
|
|
|
|
data, err := io.ReadAll(reader)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed to read WASM data: %w", err)
|
|
}
|
|
|
|
return data, nil
|
|
}
|