mirror of
https://github.com/go-micro/go-micro.git
synced 2025-11-29 21:47:44 +02:00
193 lines
4.8 KiB
Go
Executable File
193 lines
4.8 KiB
Go
Executable File
package nft
|
|
|
|
import (
|
|
"go.m3o.com/client"
|
|
)
|
|
|
|
type Nft interface {
|
|
Assets(*AssetsRequest) (*AssetsResponse, error)
|
|
Collections(*CollectionsRequest) (*CollectionsResponse, error)
|
|
Create(*CreateRequest) (*CreateResponse, error)
|
|
}
|
|
|
|
func NewNftService(token string) *NftService {
|
|
return &NftService{
|
|
client: client.NewClient(&client.Options{
|
|
Token: token,
|
|
}),
|
|
}
|
|
}
|
|
|
|
type NftService struct {
|
|
client *client.Client
|
|
}
|
|
|
|
// Return a list of assets
|
|
func (t *NftService) Assets(request *AssetsRequest) (*AssetsResponse, error) {
|
|
|
|
rsp := &AssetsResponse{}
|
|
return rsp, t.client.Call("nft", "Assets", request, rsp)
|
|
|
|
}
|
|
|
|
// Get a list of collections
|
|
func (t *NftService) Collections(request *CollectionsRequest) (*CollectionsResponse, error) {
|
|
|
|
rsp := &CollectionsResponse{}
|
|
return rsp, t.client.Call("nft", "Collections", request, rsp)
|
|
|
|
}
|
|
|
|
// Create your own NFT (coming soon)
|
|
func (t *NftService) Create(request *CreateRequest) (*CreateResponse, error) {
|
|
|
|
rsp := &CreateResponse{}
|
|
return rsp, t.client.Call("nft", "Create", request, rsp)
|
|
|
|
}
|
|
|
|
type Asset struct {
|
|
// associated collection
|
|
Collection *Collection `json:"collection"`
|
|
// asset contract
|
|
Contract *Contract `json:"contract"`
|
|
// Creator of the NFT
|
|
Creator *User `json:"creator"`
|
|
// related description
|
|
Description string `json:"description"`
|
|
// id of the asset
|
|
Id int32 `json:"id"`
|
|
// the image url
|
|
ImageUrl string `json:"image_url"`
|
|
// last time sold
|
|
LastSale *Sale `json:"last_sale"`
|
|
// listing date
|
|
ListingDate string `json:"listing_date"`
|
|
// name of the asset
|
|
Name string `json:"name"`
|
|
// Owner of the NFT
|
|
Owner *User `json:"owner"`
|
|
// the permalink
|
|
Permalink string `json:"permalink"`
|
|
// is it a presale
|
|
Presale bool `json:"presale"`
|
|
// number of sales
|
|
Sales int32 `json:"sales"`
|
|
// the token id
|
|
TokenId string `json:"token_id"`
|
|
}
|
|
|
|
type AssetsRequest struct {
|
|
// limit to members of a collection by slug name (case sensitive)
|
|
Collection string `json:"collection"`
|
|
// limit returned assets
|
|
Limit int32 `json:"limit"`
|
|
// offset for pagination
|
|
Offset int32 `json:"offset"`
|
|
// order "asc" or "desc"
|
|
Order string `json:"order"`
|
|
// order by "sale_date", "sale_count", "sale_price", "total_price"
|
|
OrderBy string `json:"order_by"`
|
|
}
|
|
|
|
type AssetsResponse struct {
|
|
// list of assets
|
|
Assets []Asset `json:"assets"`
|
|
}
|
|
|
|
type Collection struct {
|
|
CreatedAt string `json:"created_at"`
|
|
Description string `json:"description"`
|
|
ImageUrl string `json:"image_url"`
|
|
Name string `json:"name"`
|
|
PayoutAddress string `json:"payout_address"`
|
|
Slug string `json:"slug"`
|
|
}
|
|
|
|
type CollectionsRequest struct {
|
|
Limit int32 `json:"limit"`
|
|
Offset int32 `json:"offset"`
|
|
}
|
|
|
|
type CollectionsResponse struct {
|
|
Collections []Collection `json:"collections"`
|
|
}
|
|
|
|
type Contract struct {
|
|
// ethereum address
|
|
Address string `json:"address"`
|
|
// timestamp of creation
|
|
CreatedAt string `json:"created_at"`
|
|
// description of contract
|
|
Description string `json:"description"`
|
|
// name of contract
|
|
Name string `json:"name"`
|
|
// owner id
|
|
Owner int32 `json:"owner"`
|
|
// payout address
|
|
PayoutAddress string `json:"payout_address"`
|
|
// aka "ERC1155"
|
|
Schema string `json:"schema"`
|
|
// seller fees
|
|
SellerFees string `json:"seller_fees"`
|
|
// related symbol
|
|
Symbol string `json:"symbol"`
|
|
// type of contract e.g "semi-fungible"
|
|
Type string `json:"type"`
|
|
}
|
|
|
|
type CreateRequest struct {
|
|
// data if not image
|
|
Data string `json:"data"`
|
|
// description
|
|
Description string `json:"description"`
|
|
// image data
|
|
Image string `json:"image"`
|
|
// name of the NFT
|
|
Name string `json:"name"`
|
|
}
|
|
|
|
type CreateResponse struct {
|
|
Asset *Asset `json:"asset"`
|
|
}
|
|
|
|
type Sale struct {
|
|
AssetDecimals int32 `json:"asset_decimals"`
|
|
AssetTokenId string `json:"asset_token_id"`
|
|
CreatedAt string `json:"created_at"`
|
|
EventTimestamp string `json:"event_timestamp"`
|
|
EventType string `json:"event_type"`
|
|
PaymentToken *Token `json:"payment_token"`
|
|
Quantity string `json:"quantity"`
|
|
TotalPrice string `json:"total_price"`
|
|
Transaction *Transaction `json:"transaction"`
|
|
}
|
|
|
|
type Token struct {
|
|
Address string `json:"address"`
|
|
Decimals int32 `json:"decimals"`
|
|
EthPrice string `json:"eth_price"`
|
|
Id int32 `json:"id"`
|
|
ImageUrl string `json:"image_url"`
|
|
Name string `json:"name"`
|
|
Symbol string `json:"symbol"`
|
|
UsdPrice string `json:"usd_price"`
|
|
}
|
|
|
|
type Transaction struct {
|
|
BlockHash string `json:"block_hash"`
|
|
BlockNumber string `json:"block_number"`
|
|
FromAccount *User `json:"from_account"`
|
|
Id int32 `json:"id"`
|
|
Timestamp string `json:"timestamp"`
|
|
ToAccount *User `json:"to_account"`
|
|
TransactionHash string `json:"transaction_hash"`
|
|
TransactionIndex string `json:"transaction_index"`
|
|
}
|
|
|
|
type User struct {
|
|
Address string `json:"address"`
|
|
ProfileUrl string `json:"profile_url"`
|
|
Username string `json:"username"`
|
|
}
|