feat(wallet): add contract type to collectibles
This commit is contained in:
parent
33c46dd59d
commit
058fa629a0
|
@ -586,6 +586,7 @@ func (s *Service) FillCollectibleMetadata(collectible *thirdparty.FullCollectibl
|
||||||
|
|
||||||
imagePayload, _ := images.GetPayloadFromURI(tokenMetadata.GetImage())
|
imagePayload, _ := images.GetPayloadFromURI(tokenMetadata.GetImage())
|
||||||
|
|
||||||
|
collectible.CollectibleData.ContractType = w_common.ContractTypeERC721
|
||||||
collectible.CollectibleData.Provider = providerID
|
collectible.CollectibleData.Provider = providerID
|
||||||
collectible.CollectibleData.Name = tokenMetadata.GetName()
|
collectible.CollectibleData.Name = tokenMetadata.GetName()
|
||||||
collectible.CollectibleData.Description = tokenMetadata.GetDescription()
|
collectible.CollectibleData.Description = tokenMetadata.GetDescription()
|
||||||
|
@ -598,6 +599,7 @@ func (s *Service) FillCollectibleMetadata(collectible *thirdparty.FullCollectibl
|
||||||
CommunityID: communityID,
|
CommunityID: communityID,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
collectible.CollectionData.ContractType = w_common.ContractTypeERC721
|
||||||
collectible.CollectionData.Provider = providerID
|
collectible.CollectionData.Provider = providerID
|
||||||
collectible.CollectionData.Name = tokenMetadata.GetName()
|
collectible.CollectionData.Name = tokenMetadata.GetName()
|
||||||
collectible.CollectionData.ImagePayload = imagePayload
|
collectible.CollectionData.ImagePayload = imagePayload
|
||||||
|
|
|
@ -134,6 +134,11 @@ func setCollectiblesData(creator sqlite.StatementCreator, collectibles []thirdpa
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
err = upsertContractType(creator, c.ID.ContractID, c.ContractType)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
if allowUpdate {
|
if allowUpdate {
|
||||||
err = upsertCollectibleTraits(creator, c.ID, c.Traits)
|
err = upsertCollectibleTraits(creator, c.ID, c.Traits)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -253,6 +258,13 @@ func (o *CollectibleDataDB) GetData(ids []thirdparty.CollectibleUniqueID) (map[s
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Get contract type from different table
|
||||||
|
c.ContractType, err = readContractType(o.db, c.ID.ContractID)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
ret[c.ID.HashKey()] = *c
|
ret[c.ID.HashKey()] = *c
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -120,6 +120,11 @@ func setCollectionsData(creator sqlite.StatementCreator, collections []thirdpart
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
err = upsertContractType(creator, c.ID, c.ContractType)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
if allowUpdate {
|
if allowUpdate {
|
||||||
err = upsertCollectionTraits(creator, c.ID, c.Traits)
|
err = upsertCollectionTraits(creator, c.ID, c.Traits)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -228,6 +233,13 @@ func (o *CollectionDataDB) GetData(ids []thirdparty.ContractID) (map[string]thir
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Get contract type from different table
|
||||||
|
c.ContractType, err = readContractType(o.db, c.ID)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
ret[c.ID.HashKey()] = *c
|
ret[c.ID.HashKey()] = *c
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,68 @@
|
||||||
|
package collectibles
|
||||||
|
|
||||||
|
import (
|
||||||
|
"database/sql"
|
||||||
|
|
||||||
|
sq "github.com/Masterminds/squirrel"
|
||||||
|
|
||||||
|
w_common "github.com/status-im/status-go/services/wallet/common"
|
||||||
|
"github.com/status-im/status-go/services/wallet/thirdparty"
|
||||||
|
"github.com/status-im/status-go/sqlite"
|
||||||
|
)
|
||||||
|
|
||||||
|
func upsertContractType(creator sqlite.StatementCreator, id thirdparty.ContractID, contractType w_common.ContractType) error {
|
||||||
|
if contractType == w_common.ContractTypeUnknown {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
q := sq.Replace("contract_type_cache").
|
||||||
|
SetMap(sq.Eq{"chain_id": id.ChainID, "contract_address": id.Address, "contract_type": contractType})
|
||||||
|
|
||||||
|
query, args, err := q.ToSql()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
stmt, err := creator.Prepare(query)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer stmt.Close()
|
||||||
|
|
||||||
|
_, err = stmt.Exec(args...)
|
||||||
|
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func readContractType(creator sqlite.StatementCreator, id thirdparty.ContractID) (w_common.ContractType, error) {
|
||||||
|
q := sq.Select("contract_type").
|
||||||
|
From("contract_type_cache").
|
||||||
|
Where(sq.Eq{"chain_id": id.ChainID, "contract_address": id.Address})
|
||||||
|
|
||||||
|
query, args, err := q.ToSql()
|
||||||
|
if err != nil {
|
||||||
|
return w_common.ContractTypeUnknown, err
|
||||||
|
}
|
||||||
|
|
||||||
|
stmt, err := creator.Prepare(query)
|
||||||
|
if err != nil {
|
||||||
|
return w_common.ContractTypeUnknown, err
|
||||||
|
}
|
||||||
|
defer stmt.Close()
|
||||||
|
|
||||||
|
_, err = stmt.Exec(args...)
|
||||||
|
if err != nil {
|
||||||
|
return w_common.ContractTypeUnknown, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var transferType w_common.ContractType
|
||||||
|
err = stmt.QueryRow(args...).Scan(&transferType)
|
||||||
|
|
||||||
|
if err == sql.ErrNoRows {
|
||||||
|
return w_common.ContractTypeUnknown, nil
|
||||||
|
} else if err != nil {
|
||||||
|
return w_common.ContractTypeUnknown, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return transferType, nil
|
||||||
|
}
|
|
@ -2,6 +2,7 @@ package collectibles
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/status-im/status-go/protocol/communities/token"
|
"github.com/status-im/status-go/protocol/communities/token"
|
||||||
|
w_common "github.com/status-im/status-go/services/wallet/common"
|
||||||
"github.com/status-im/status-go/services/wallet/thirdparty"
|
"github.com/status-im/status-go/services/wallet/thirdparty"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -9,6 +10,7 @@ import (
|
||||||
type Collectible struct {
|
type Collectible struct {
|
||||||
DataType CollectibleDataType `json:"data_type"`
|
DataType CollectibleDataType `json:"data_type"`
|
||||||
ID thirdparty.CollectibleUniqueID `json:"id"`
|
ID thirdparty.CollectibleUniqueID `json:"id"`
|
||||||
|
ContractType w_common.ContractType `json:"contract_type"`
|
||||||
CollectibleData *CollectibleData `json:"collectible_data,omitempty"`
|
CollectibleData *CollectibleData `json:"collectible_data,omitempty"`
|
||||||
CollectionData *CollectionData `json:"collection_data,omitempty"`
|
CollectionData *CollectionData `json:"collection_data,omitempty"`
|
||||||
CommunityData *CommunityData `json:"community_data,omitempty"`
|
CommunityData *CommunityData `json:"community_data,omitempty"`
|
||||||
|
@ -58,10 +60,21 @@ func idsToCollectibles(ids []thirdparty.CollectibleUniqueID) []Collectible {
|
||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func getContractType(c thirdparty.FullCollectibleData) w_common.ContractType {
|
||||||
|
if c.CollectibleData.ContractType != w_common.ContractTypeUnknown {
|
||||||
|
return c.CollectibleData.ContractType
|
||||||
|
}
|
||||||
|
if c.CollectionData != nil && c.CollectionData.ContractType != w_common.ContractTypeUnknown {
|
||||||
|
return c.CollectionData.ContractType
|
||||||
|
}
|
||||||
|
return w_common.ContractTypeUnknown
|
||||||
|
}
|
||||||
|
|
||||||
func fullCollectibleDataToHeader(c thirdparty.FullCollectibleData) Collectible {
|
func fullCollectibleDataToHeader(c thirdparty.FullCollectibleData) Collectible {
|
||||||
ret := Collectible{
|
ret := Collectible{
|
||||||
DataType: CollectibleDataTypeHeader,
|
DataType: CollectibleDataTypeHeader,
|
||||||
ID: c.CollectibleData.ID,
|
ID: c.CollectibleData.ID,
|
||||||
|
ContractType: getContractType(c),
|
||||||
CollectibleData: &CollectibleData{
|
CollectibleData: &CollectibleData{
|
||||||
Name: c.CollectibleData.Name,
|
Name: c.CollectibleData.Name,
|
||||||
ImageURL: &c.CollectibleData.ImageURL,
|
ImageURL: &c.CollectibleData.ImageURL,
|
||||||
|
@ -98,8 +111,9 @@ func fullCollectiblesDataToHeaders(data []thirdparty.FullCollectibleData) []Coll
|
||||||
|
|
||||||
func fullCollectibleDataToDetails(c thirdparty.FullCollectibleData) Collectible {
|
func fullCollectibleDataToDetails(c thirdparty.FullCollectibleData) Collectible {
|
||||||
ret := Collectible{
|
ret := Collectible{
|
||||||
DataType: CollectibleDataTypeDetails,
|
DataType: CollectibleDataTypeDetails,
|
||||||
ID: c.CollectibleData.ID,
|
ID: c.CollectibleData.ID,
|
||||||
|
ContractType: getContractType(c),
|
||||||
CollectibleData: &CollectibleData{
|
CollectibleData: &CollectibleData{
|
||||||
Name: c.CollectibleData.Name,
|
Name: c.CollectibleData.Name,
|
||||||
Description: &c.CollectibleData.Description,
|
Description: &c.CollectibleData.Description,
|
||||||
|
@ -150,7 +164,8 @@ func fullCollectiblesDataToCommunityHeader(data []thirdparty.FullCollectibleData
|
||||||
communityData := communityInfoToData(communityID, c.CommunityInfo, c.CollectibleCommunityInfo)
|
communityData := communityInfoToData(communityID, c.CommunityInfo, c.CollectibleCommunityInfo)
|
||||||
|
|
||||||
header := Collectible{
|
header := Collectible{
|
||||||
ID: collectibleID,
|
ID: collectibleID,
|
||||||
|
ContractType: getContractType(c),
|
||||||
CollectibleData: &CollectibleData{
|
CollectibleData: &CollectibleData{
|
||||||
Name: c.CollectibleData.Name,
|
Name: c.CollectibleData.Name,
|
||||||
},
|
},
|
||||||
|
|
|
@ -20,6 +20,15 @@ const (
|
||||||
ArbitrumSepolia uint64 = 421614
|
ArbitrumSepolia uint64 = 421614
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type ContractType byte
|
||||||
|
|
||||||
|
const (
|
||||||
|
ContractTypeUnknown ContractType = iota
|
||||||
|
ContractTypeERC20
|
||||||
|
ContractTypeERC721
|
||||||
|
ContractTypeERC1155
|
||||||
|
)
|
||||||
|
|
||||||
func (c ChainID) String() string {
|
func (c ChainID) String() string {
|
||||||
return strconv.Itoa(int(c))
|
return strconv.Itoa(int(c))
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,145 @@
|
||||||
|
package alchemy
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"math/big"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/ethereum/go-ethereum/common"
|
||||||
|
"github.com/status-im/status-go/services/wallet/bigint"
|
||||||
|
w_common "github.com/status-im/status-go/services/wallet/common"
|
||||||
|
"github.com/status-im/status-go/services/wallet/thirdparty"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestUnmarshallCollection(t *testing.T) {
|
||||||
|
expectedCollectionData := thirdparty.CollectionData{
|
||||||
|
ID: thirdparty.ContractID{
|
||||||
|
ChainID: 1,
|
||||||
|
Address: common.HexToAddress("0x06012c8cf97bead5deae237070f9587f8e7a266d"),
|
||||||
|
},
|
||||||
|
ContractType: w_common.ContractTypeERC721,
|
||||||
|
Provider: "alchemy",
|
||||||
|
Name: "CryptoKitties",
|
||||||
|
ImageURL: "https://i.seadn.io/gae/C272ZRW1RGGef9vKMePFSCeKc1Lw6U40wl9ofNVxzUxFdj84hH9xJRQNf-7wgs7W8qw8RWe-1ybKp-VKuU5D-tg?w=500&auto=format",
|
||||||
|
Traits: make(map[string]thirdparty.CollectionTrait),
|
||||||
|
}
|
||||||
|
|
||||||
|
collection := Contract{}
|
||||||
|
err := json.Unmarshal([]byte(collectionJSON), &collection)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
contractID := thirdparty.ContractID{
|
||||||
|
ChainID: 1,
|
||||||
|
Address: common.HexToAddress("0x06012c8cf97bead5deae237070f9587f8e7a266d"),
|
||||||
|
}
|
||||||
|
|
||||||
|
collectionData := collection.toCollectionData(contractID)
|
||||||
|
assert.Equal(t, expectedCollectionData, collectionData)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestUnmarshallOwnedCollectibles(t *testing.T) {
|
||||||
|
expectedTokenID0, _ := big.NewInt(0).SetString("50659039041325838222074459099120411190538227963344971355684955900852972814336", 10)
|
||||||
|
expectedTokenID1, _ := big.NewInt(0).SetString("900", 10)
|
||||||
|
|
||||||
|
expectedCollectiblesData := []thirdparty.FullCollectibleData{
|
||||||
|
{
|
||||||
|
CollectibleData: thirdparty.CollectibleData{
|
||||||
|
ID: thirdparty.CollectibleUniqueID{
|
||||||
|
ContractID: thirdparty.ContractID{
|
||||||
|
ChainID: 1,
|
||||||
|
Address: common.HexToAddress("0x2b1870752208935fDA32AB6A016C01a27877CF12"),
|
||||||
|
},
|
||||||
|
TokenID: &bigint.BigInt{
|
||||||
|
Int: expectedTokenID0,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
ContractType: w_common.ContractTypeERC1155,
|
||||||
|
Provider: "alchemy",
|
||||||
|
Name: "HODL",
|
||||||
|
Description: "The enemy king sent a single message, written on a parchment stained by blood.\n“You are advised to submit without further delay, for if I bring my army into your land, I will destroy your hodlings, slay your people, and burn your city to ashes.”\nHodlers of ENJ sent a single word as reply:\n“If.”\nThe battle that followed does not come around too often, a battle that began every legend told about the warriors that gained eternal glory. \nThe battle that followed seemed like a lost one from the very beginning. \nThe enemy army was revealed at dawn, illuminated by the rising Sun.The ground shook as countless hordes marched towards a small band of men armed with shields, spears and swords.\nThe hodlers were outnumbered, one thousand to one. \nFear, doubt and uncertainty did not reach their hearts and minds - for they were born for this. \nEach hodler was bred for warfare, instructed in bloodshed, groomed to become a poet of death. \nA philosopher of war, blood and glory. \nEach man was forged into an invincible soldier that had a single driving force during each battle.\nStand your ground - at all costs. \nAs the swarm of enemies approached, the king yelled, asking his men: \n“Hodlers! What is your profession?”\n“HODL! HODL! HODL! HODL!!! HODL!!!!!” they replied, hitting spears against their shields. \nAn endless stream of arrows fell from the heavens only moments later, blocking out the Sun so they could fight in the shade. They emerged from the darkness without even a single scratch, protected by their legendary Enjin shields. \nWave after wave, their enemies rushed towards their doom, as they were met with cold tips of thrusting spears and sharp edges of crimson swords.\nAgainst all odds, the wall of men and steel held against the never-ending, shilling swarm. \nWhat was left of the enemy army retreated, fleeing in absolute panic and indisputable terror.\nBathed in blood, the ENJ hodlers were victorious.\nTheir story will be told for thousands of years, immortalized with divine blocks and chains.\n* * *\n“HODL” was minted in 2018 for our amazing community of epic Enjin HODLers. We are extremely grateful for the trust you've put in us and the products we're making - and the mission we're trying to accomplish, and hope you’ll love this token of our appreciation. ", // nolint: misspell
|
||||||
|
Permalink: "",
|
||||||
|
ImageURL: "https://res.cloudinary.com/alchemyapi/image/upload/convert-png/eth-mainnet/c5c93ffa8146ade7d3694c0f28463f0c",
|
||||||
|
AnimationURL: "https://nft-cdn.alchemy.com/eth-mainnet/c5c93ffa8146ade7d3694c0f28463f0c",
|
||||||
|
Traits: []thirdparty.CollectibleTrait{},
|
||||||
|
TokenURI: "https://cdn.enjin.io/mint/meta/70000000000001b2.json",
|
||||||
|
},
|
||||||
|
CollectionData: &thirdparty.CollectionData{
|
||||||
|
ID: thirdparty.ContractID{
|
||||||
|
ChainID: 1,
|
||||||
|
Address: common.HexToAddress("0x2b1870752208935fDA32AB6A016C01a27877CF12"),
|
||||||
|
},
|
||||||
|
ContractType: w_common.ContractTypeERC1155,
|
||||||
|
Provider: "alchemy",
|
||||||
|
Name: "",
|
||||||
|
Slug: "",
|
||||||
|
ImageURL: "",
|
||||||
|
Traits: make(map[string]thirdparty.CollectionTrait),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
CollectibleData: thirdparty.CollectibleData{
|
||||||
|
ID: thirdparty.CollectibleUniqueID{
|
||||||
|
ContractID: thirdparty.ContractID{
|
||||||
|
ChainID: 1,
|
||||||
|
Address: common.HexToAddress("0x3f6B1585AfeFc56433C8d28AA89dbc77af59278f"),
|
||||||
|
},
|
||||||
|
TokenID: &bigint.BigInt{
|
||||||
|
Int: expectedTokenID1,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
ContractType: w_common.ContractTypeERC721,
|
||||||
|
Provider: "alchemy",
|
||||||
|
Name: "#900",
|
||||||
|
Description: "5,555 SimpsonPunks entered the Ethereum Blockchain🍩",
|
||||||
|
Permalink: "",
|
||||||
|
ImageURL: "https://res.cloudinary.com/alchemyapi/image/upload/convert-png/eth-mainnet/52accf48dc609088738b15808fe07e8c",
|
||||||
|
AnimationURL: "https://nft-cdn.alchemy.com/eth-mainnet/52accf48dc609088738b15808fe07e8c",
|
||||||
|
Traits: []thirdparty.CollectibleTrait{
|
||||||
|
{
|
||||||
|
TraitType: "layers",
|
||||||
|
Value: "Background",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
TraitType: "Face",
|
||||||
|
Value: "Monkey",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
TraitType: "Head",
|
||||||
|
Value: "Sweatband Blue",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
TraitType: "Facial Hair",
|
||||||
|
Value: "Thin Full",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
TraitType: "Mouth",
|
||||||
|
Value: "Burger",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
TokenURI: "https://alchemy.mypinata.cloud/ipfs/bafybeidqbmbglapk2bkffa4o2ws5jhxnhlbdeqh7k6tk62pukse3xhvv2e/900.json",
|
||||||
|
},
|
||||||
|
CollectionData: &thirdparty.CollectionData{
|
||||||
|
ID: thirdparty.ContractID{
|
||||||
|
ChainID: 1,
|
||||||
|
Address: common.HexToAddress("0x3f6B1585AfeFc56433C8d28AA89dbc77af59278f"),
|
||||||
|
},
|
||||||
|
ContractType: w_common.ContractTypeERC721,
|
||||||
|
Provider: "alchemy",
|
||||||
|
Name: "Simpson Punk",
|
||||||
|
Slug: "",
|
||||||
|
ImageURL: "https://raw.seadn.io/files/e7765f13c4658f514d0efc008ae7f300.png",
|
||||||
|
Traits: make(map[string]thirdparty.CollectionTrait),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
var container OwnedNFTList
|
||||||
|
err := json.Unmarshal([]byte(ownedCollectiblesJSON), &container)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
collectiblesData := alchemyToCollectiblesData(w_common.ChainID(w_common.EthereumMainnet), container.OwnedNFTs)
|
||||||
|
|
||||||
|
assert.Equal(t, expectedCollectiblesData, collectiblesData)
|
||||||
|
}
|
|
@ -0,0 +1,197 @@
|
||||||
|
// nolint: misspell
|
||||||
|
package alchemy
|
||||||
|
|
||||||
|
const collectionJSON = `{
|
||||||
|
"address": "0x06012c8cf97BEaD5deAe237070F9587f8E7A266d",
|
||||||
|
"name": "CryptoKitties",
|
||||||
|
"symbol": "CK",
|
||||||
|
"totalSupply": "2023564",
|
||||||
|
"tokenType": "ERC721",
|
||||||
|
"contractDeployer": "0xba52c75764d6F594735dc735Be7F1830CDf58dDf",
|
||||||
|
"deployedBlockNumber": 4605167,
|
||||||
|
"openSeaMetadata": {
|
||||||
|
"floorPrice": 0.003,
|
||||||
|
"collectionName": "CryptoKitties",
|
||||||
|
"collectionSlug": "cryptokitties",
|
||||||
|
"safelistRequestStatus": "verified",
|
||||||
|
"imageUrl": "https://i.seadn.io/gae/C272ZRW1RGGef9vKMePFSCeKc1Lw6U40wl9ofNVxzUxFdj84hH9xJRQNf-7wgs7W8qw8RWe-1ybKp-VKuU5D-tg?w=500&auto=format",
|
||||||
|
"description": "CryptoKitties is a game centered around breedable, collectible, and oh-so-adorable creatures we call CryptoKitties! Each cat is one-of-a-kind and 100% owned by you; it cannot be replicated, taken away, or destroyed.",
|
||||||
|
"externalUrl": null,
|
||||||
|
"twitterUsername": "CryptoKitties",
|
||||||
|
"discordUrl": "https://discord.gg/cryptokitties",
|
||||||
|
"bannerImageUrl": "https://i.seadn.io/gcs/static/banners/cryptokitties-banner2.png?w=500&auto=format",
|
||||||
|
"lastIngestedAt": "2024-02-05T23:13:45.000Z"
|
||||||
|
}
|
||||||
|
}`
|
||||||
|
|
||||||
|
const ownedCollectiblesJSON = `{
|
||||||
|
"ownedNfts": [
|
||||||
|
{
|
||||||
|
"contract": {
|
||||||
|
"address": "0x2b1870752208935fDA32AB6A016C01a27877CF12",
|
||||||
|
"name": null,
|
||||||
|
"symbol": null,
|
||||||
|
"totalSupply": null,
|
||||||
|
"tokenType": "ERC1155",
|
||||||
|
"contractDeployer": "0x5Df2E003CEcb0ebf69cBd8F7Fbb6F44F690331F2",
|
||||||
|
"deployedBlockNumber": 8088320,
|
||||||
|
"openSeaMetadata": {
|
||||||
|
"floorPrice": 0,
|
||||||
|
"collectionName": "Unidentified contract - SkdH8ZQtyB",
|
||||||
|
"collectionSlug": "unidentified-contract-skdh8zqtyb",
|
||||||
|
"safelistRequestStatus": "not_requested",
|
||||||
|
"imageUrl": null,
|
||||||
|
"description": null,
|
||||||
|
"externalUrl": null,
|
||||||
|
"twitterUsername": null,
|
||||||
|
"discordUrl": null,
|
||||||
|
"bannerImageUrl": null,
|
||||||
|
"lastIngestedAt": "2024-01-28T06:17:57.000Z"
|
||||||
|
},
|
||||||
|
"isSpam": null,
|
||||||
|
"spamClassifications": []
|
||||||
|
},
|
||||||
|
"tokenId": "50659039041325838222074459099120411190538227963344971355684955900852972814336",
|
||||||
|
"tokenType": "ERC1155",
|
||||||
|
"name": "HODL",
|
||||||
|
"description": "The enemy king sent a single message, written on a parchment stained by blood.\n“You are advised to submit without further delay, for if I bring my army into your land, I will destroy your hodlings, slay your people, and burn your city to ashes.”\nHodlers of ENJ sent a single word as reply:\n“If.”\nThe battle that followed does not come around too often, a battle that began every legend told about the warriors that gained eternal glory. \nThe battle that followed seemed like a lost one from the very beginning. \nThe enemy army was revealed at dawn, illuminated by the rising Sun.The ground shook as countless hordes marched towards a small band of men armed with shields, spears and swords.\nThe hodlers were outnumbered, one thousand to one. \nFear, doubt and uncertainty did not reach their hearts and minds - for they were born for this. \nEach hodler was bred for warfare, instructed in bloodshed, groomed to become a poet of death. \nA philosopher of war, blood and glory. \nEach man was forged into an invincible soldier that had a single driving force during each battle.\nStand your ground - at all costs. \nAs the swarm of enemies approached, the king yelled, asking his men: \n“Hodlers! What is your profession?”\n“HODL! HODL! HODL! HODL!!! HODL!!!!!” they replied, hitting spears against their shields. \nAn endless stream of arrows fell from the heavens only moments later, blocking out the Sun so they could fight in the shade. They emerged from the darkness without even a single scratch, protected by their legendary Enjin shields. \nWave after wave, their enemies rushed towards their doom, as they were met with cold tips of thrusting spears and sharp edges of crimson swords.\nAgainst all odds, the wall of men and steel held against the never-ending, shilling swarm. \nWhat was left of the enemy army retreated, fleeing in absolute panic and indisputable terror.\nBathed in blood, the ENJ hodlers were victorious.\nTheir story will be told for thousands of years, immortalized with divine blocks and chains.\n* * *\n“HODL” was minted in 2018 for our amazing community of epic Enjin HODLers. We are extremely grateful for the trust you've put in us and the products we're making - and the mission we're trying to accomplish, and hope you’ll love this token of our appreciation. ",
|
||||||
|
"tokenUri": "https://cdn.enjin.io/mint/meta/70000000000001b2.json",
|
||||||
|
"image": {
|
||||||
|
"cachedUrl": "https://nft-cdn.alchemy.com/eth-mainnet/c5c93ffa8146ade7d3694c0f28463f0c",
|
||||||
|
"thumbnailUrl": "https://res.cloudinary.com/alchemyapi/image/upload/thumbnailv2/eth-mainnet/c5c93ffa8146ade7d3694c0f28463f0c",
|
||||||
|
"pngUrl": "https://res.cloudinary.com/alchemyapi/image/upload/convert-png/eth-mainnet/c5c93ffa8146ade7d3694c0f28463f0c",
|
||||||
|
"contentType": "image/jpeg",
|
||||||
|
"size": 256926,
|
||||||
|
"originalUrl": "https://cdn.enjin.io/mint/image/70000000000001b2.jpg"
|
||||||
|
},
|
||||||
|
"raw": {
|
||||||
|
"tokenUri": "https://cdn.enjin.io/mint/meta/70000000000001b2.json",
|
||||||
|
"metadata": {
|
||||||
|
"name": "HODL",
|
||||||
|
"description": "The enemy king sent a single message, written on a parchment stained by blood.\n“You are advised to submit without further delay, for if I bring my army into your land, I will destroy your hodlings, slay your people, and burn your city to ashes.”\nHodlers of ENJ sent a single word as reply:\n“If.”\nThe battle that followed does not come around too often, a battle that began every legend told about the warriors that gained eternal glory. \nThe battle that followed seemed like a lost one from the very beginning. \nThe enemy army was revealed at dawn, illuminated by the rising Sun.The ground shook as countless hordes marched towards a small band of men armed with shields, spears and swords.\nThe hodlers were outnumbered, one thousand to one. \nFear, doubt and uncertainty did not reach their hearts and minds - for they were born for this. \nEach hodler was bred for warfare, instructed in bloodshed, groomed to become a poet of death. \nA philosopher of war, blood and glory. \nEach man was forged into an invincible soldier that had a single driving force during each battle.\nStand your ground - at all costs. \nAs the swarm of enemies approached, the king yelled, asking his men: \n“Hodlers! What is your profession?”\n“HODL! HODL! HODL! HODL!!! HODL!!!!!” they replied, hitting spears against their shields. \nAn endless stream of arrows fell from the heavens only moments later, blocking out the Sun so they could fight in the shade. They emerged from the darkness without even a single scratch, protected by their legendary Enjin shields. \nWave after wave, their enemies rushed towards their doom, as they were met with cold tips of thrusting spears and sharp edges of crimson swords.\nAgainst all odds, the wall of men and steel held against the never-ending, shilling swarm. \nWhat was left of the enemy army retreated, fleeing in absolute panic and indisputable terror.\nBathed in blood, the ENJ hodlers were victorious.\nTheir story will be told for thousands of years, immortalized with divine blocks and chains.\n* * *\n“HODL” was minted in 2018 for our amazing community of epic Enjin HODLers. We are extremely grateful for the trust you've put in us and the products we're making - and the mission we're trying to accomplish, and hope you’ll love this token of our appreciation. ",
|
||||||
|
"image": "https://cdn.enjin.io/mint/image/70000000000001b2.jpg"
|
||||||
|
},
|
||||||
|
"error": null
|
||||||
|
},
|
||||||
|
"collection": {
|
||||||
|
"name": "Unidentified contract - SkdH8ZQtyB",
|
||||||
|
"slug": "unidentified-contract-skdh8zqtyb",
|
||||||
|
"externalUrl": null,
|
||||||
|
"bannerImageUrl": null
|
||||||
|
},
|
||||||
|
"mint": {
|
||||||
|
"mintAddress": null,
|
||||||
|
"blockNumber": null,
|
||||||
|
"timestamp": null,
|
||||||
|
"transactionHash": null
|
||||||
|
},
|
||||||
|
"owners": null,
|
||||||
|
"timeLastUpdated": "2024-01-03T19:11:04.681Z",
|
||||||
|
"balance": "1",
|
||||||
|
"acquiredAt": {
|
||||||
|
"blockTimestamp": null,
|
||||||
|
"blockNumber": null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"contract": {
|
||||||
|
"address": "0x3f6B1585AfeFc56433C8d28AA89dbc77af59278f",
|
||||||
|
"name": "Simpson Punk",
|
||||||
|
"symbol": "SIMPUNK",
|
||||||
|
"totalSupply": "1789",
|
||||||
|
"tokenType": "ERC721",
|
||||||
|
"contractDeployer": "0xa74E02F671e00eeFbf4e13D9D89B397523653E67",
|
||||||
|
"deployedBlockNumber": 18607457,
|
||||||
|
"openSeaMetadata": {
|
||||||
|
"floorPrice": 0.00069,
|
||||||
|
"collectionName": "SimpsonPunks",
|
||||||
|
"collectionSlug": "simpsonpunkseth",
|
||||||
|
"safelistRequestStatus": "not_requested",
|
||||||
|
"imageUrl": "https://raw.seadn.io/files/e7765f13c4658f514d0efc008ae7f300.png",
|
||||||
|
"description": "1,789 SimpsonPunks entered the Blockchain????",
|
||||||
|
"externalUrl": null,
|
||||||
|
"twitterUsername": "SimpsonPunksETH",
|
||||||
|
"discordUrl": null,
|
||||||
|
"bannerImageUrl": null,
|
||||||
|
"lastIngestedAt": "2024-01-31T00:06:00.000Z"
|
||||||
|
},
|
||||||
|
"isSpam": null,
|
||||||
|
"spamClassifications": []
|
||||||
|
},
|
||||||
|
"tokenId": "900",
|
||||||
|
"tokenType": "ERC721",
|
||||||
|
"name": "#900",
|
||||||
|
"description": "5,555 SimpsonPunks entered the Ethereum Blockchain🍩",
|
||||||
|
"tokenUri": "https://alchemy.mypinata.cloud/ipfs/bafybeidqbmbglapk2bkffa4o2ws5jhxnhlbdeqh7k6tk62pukse3xhvv2e/900.json",
|
||||||
|
"image": {
|
||||||
|
"cachedUrl": "https://nft-cdn.alchemy.com/eth-mainnet/52accf48dc609088738b15808fe07e8c",
|
||||||
|
"thumbnailUrl": "https://res.cloudinary.com/alchemyapi/image/upload/thumbnailv2/eth-mainnet/52accf48dc609088738b15808fe07e8c",
|
||||||
|
"pngUrl": "https://res.cloudinary.com/alchemyapi/image/upload/convert-png/eth-mainnet/52accf48dc609088738b15808fe07e8c",
|
||||||
|
"contentType": "image/png",
|
||||||
|
"size": 21206,
|
||||||
|
"originalUrl": "https://ipfs.io/ipfs/bafybeib2metombffkovfzbjhljpcmobb5wqazsbpenz2drysgm7und47ym/900.png"
|
||||||
|
},
|
||||||
|
"raw": {
|
||||||
|
"tokenUri": "ipfs://bafybeidqbmbglapk2bkffa4o2ws5jhxnhlbdeqh7k6tk62pukse3xhvv2e/900.json",
|
||||||
|
"metadata": {
|
||||||
|
"date": 1700514890266,
|
||||||
|
"image": "ipfs://bafybeib2metombffkovfzbjhljpcmobb5wqazsbpenz2drysgm7und47ym/900.png",
|
||||||
|
"name": "#900",
|
||||||
|
"description": "5,555 SimpsonPunks entered the Ethereum Blockchain🍩",
|
||||||
|
"edition": 900,
|
||||||
|
"attributes": [
|
||||||
|
{
|
||||||
|
"value": "Background",
|
||||||
|
"trait_type": "layers"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"value": "Monkey",
|
||||||
|
"trait_type": "Face"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"value": "Sweatband Blue",
|
||||||
|
"trait_type": "Head"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"value": "Thin Full",
|
||||||
|
"trait_type": "Facial Hair"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"value": "Burger",
|
||||||
|
"trait_type": "Mouth"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"imageHash": "c1055d7f183405a5ec934bf6d83ac653740795cbf40031e3b34e957a352b471c",
|
||||||
|
"compiler": "HashLips Art Engine - NFTChef fork"
|
||||||
|
},
|
||||||
|
"error": null
|
||||||
|
},
|
||||||
|
"collection": {
|
||||||
|
"name": "SimpsonPunks",
|
||||||
|
"slug": "simpsonpunkseth",
|
||||||
|
"externalUrl": null,
|
||||||
|
"bannerImageUrl": null
|
||||||
|
},
|
||||||
|
"mint": {
|
||||||
|
"mintAddress": null,
|
||||||
|
"blockNumber": null,
|
||||||
|
"timestamp": null,
|
||||||
|
"transactionHash": null
|
||||||
|
},
|
||||||
|
"owners": null,
|
||||||
|
"timeLastUpdated": "2024-01-03T21:02:33.333Z",
|
||||||
|
"balance": "1",
|
||||||
|
"acquiredAt": {
|
||||||
|
"blockTimestamp": null,
|
||||||
|
"blockNumber": null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"totalCount": 53,
|
||||||
|
"validAt": {
|
||||||
|
"blockNumber": 19169748,
|
||||||
|
"blockHash": "0x95badbc2af9d0fa4ecfb614e6f24910e027b3e0a5c6fa4c32521ff5bc7754693",
|
||||||
|
"blockTimestamp": "2024-02-06T14:20:11Z"
|
||||||
|
},
|
||||||
|
"pageKey": "MHgyYjE4NzA3NTIyMDg5MzVmZGEzMmFiNmEwMTZjMDFhMjc4NzdjZjEyOjB4NzgwMDAwMDAwMDAwMDIyZTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDpmYWxzZQ=="
|
||||||
|
}`
|
|
@ -172,13 +172,25 @@ func alchemyToCollectibleTraits(attributes []Attribute) []thirdparty.Collectible
|
||||||
return ret
|
return ret
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func alchemyToContractType(tokenType string) walletCommon.ContractType {
|
||||||
|
switch tokenType {
|
||||||
|
case "ERC721":
|
||||||
|
return walletCommon.ContractTypeERC721
|
||||||
|
case "ERC1155":
|
||||||
|
return walletCommon.ContractTypeERC1155
|
||||||
|
default:
|
||||||
|
return walletCommon.ContractTypeUnknown
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (c *Contract) toCollectionData(id thirdparty.ContractID) thirdparty.CollectionData {
|
func (c *Contract) toCollectionData(id thirdparty.ContractID) thirdparty.CollectionData {
|
||||||
ret := thirdparty.CollectionData{
|
ret := thirdparty.CollectionData{
|
||||||
ID: id,
|
ID: id,
|
||||||
Provider: AlchemyID,
|
ContractType: alchemyToContractType(c.TokenType),
|
||||||
Name: c.Name,
|
Provider: AlchemyID,
|
||||||
ImageURL: c.OpenSeaMetadata.ImageURL,
|
Name: c.Name,
|
||||||
Traits: make(map[string]thirdparty.CollectionTrait, 0),
|
ImageURL: c.OpenSeaMetadata.ImageURL,
|
||||||
|
Traits: make(map[string]thirdparty.CollectionTrait, 0),
|
||||||
}
|
}
|
||||||
return ret
|
return ret
|
||||||
}
|
}
|
||||||
|
@ -188,6 +200,7 @@ func (c *Asset) toCollectiblesData(id thirdparty.CollectibleUniqueID) thirdparty
|
||||||
|
|
||||||
return thirdparty.CollectibleData{
|
return thirdparty.CollectibleData{
|
||||||
ID: id,
|
ID: id,
|
||||||
|
ContractType: alchemyToContractType(c.Contract.TokenType),
|
||||||
Provider: AlchemyID,
|
Provider: AlchemyID,
|
||||||
Name: c.Name,
|
Name: c.Name,
|
||||||
Description: c.Description,
|
Description: c.Description,
|
||||||
|
|
|
@ -104,12 +104,13 @@ type CollectionTrait struct {
|
||||||
|
|
||||||
// Collection info
|
// Collection info
|
||||||
type CollectionData struct {
|
type CollectionData struct {
|
||||||
ID ContractID `json:"id"`
|
ID ContractID `json:"id"`
|
||||||
CommunityID string `json:"community_id"`
|
ContractType w_common.ContractType `json:"contract_type"`
|
||||||
Provider string `json:"provider"`
|
CommunityID string `json:"community_id"`
|
||||||
Name string `json:"name"`
|
Provider string `json:"provider"`
|
||||||
Slug string `json:"slug"`
|
Name string `json:"name"`
|
||||||
ImageURL string `json:"image_url"`
|
Slug string `json:"slug"`
|
||||||
|
ImageURL string `json:"image_url"`
|
||||||
ImagePayload []byte
|
ImagePayload []byte
|
||||||
Traits map[string]CollectionTrait `json:"traits"`
|
Traits map[string]CollectionTrait `json:"traits"`
|
||||||
}
|
}
|
||||||
|
@ -123,13 +124,14 @@ type CollectibleTrait struct {
|
||||||
|
|
||||||
// Collectible info
|
// Collectible info
|
||||||
type CollectibleData struct {
|
type CollectibleData struct {
|
||||||
ID CollectibleUniqueID `json:"id"`
|
ID CollectibleUniqueID `json:"id"`
|
||||||
CommunityID string `json:"community_id"`
|
ContractType w_common.ContractType `json:"contract_type"`
|
||||||
Provider string `json:"provider"`
|
CommunityID string `json:"community_id"`
|
||||||
Name string `json:"name"`
|
Provider string `json:"provider"`
|
||||||
Description string `json:"description"`
|
Name string `json:"name"`
|
||||||
Permalink string `json:"permalink"`
|
Description string `json:"description"`
|
||||||
ImageURL string `json:"image_url"`
|
Permalink string `json:"permalink"`
|
||||||
|
ImageURL string `json:"image_url"`
|
||||||
ImagePayload []byte
|
ImagePayload []byte
|
||||||
AnimationURL string `json:"animation_url"`
|
AnimationURL string `json:"animation_url"`
|
||||||
AnimationMediaType string `json:"animation_media_type"`
|
AnimationMediaType string `json:"animation_media_type"`
|
||||||
|
|
|
@ -311,7 +311,7 @@ func (o *ClientV2) FetchCollectionsDataByContractID(ctx context.Context, contrac
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = append(ret, collectionData.toCommon(id))
|
ret = append(ret, collectionData.toCommon(id, contractData.ContractStandard))
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret, nil
|
return ret, nil
|
||||||
|
|
|
@ -46,6 +46,17 @@ func chainIDToChainString(chainID walletCommon.ChainID) string {
|
||||||
return chainString
|
return chainString
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func openseaToContractType(contractType string) walletCommon.ContractType {
|
||||||
|
switch contractType {
|
||||||
|
case "cryptopunks", "erc721":
|
||||||
|
return walletCommon.ContractTypeERC721
|
||||||
|
case "erc1155":
|
||||||
|
return walletCommon.ContractTypeERC1155
|
||||||
|
default:
|
||||||
|
return walletCommon.ContractTypeUnknown
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
type NFTContainer struct {
|
type NFTContainer struct {
|
||||||
NFTs []NFT `json:"nfts"`
|
NFTs []NFT `json:"nfts"`
|
||||||
NextCursor string `json:"next"`
|
NextCursor string `json:"next"`
|
||||||
|
@ -149,6 +160,7 @@ func (c *NFT) id(chainID walletCommon.ChainID) thirdparty.CollectibleUniqueID {
|
||||||
func (c *NFT) toCollectiblesData(chainID walletCommon.ChainID) thirdparty.CollectibleData {
|
func (c *NFT) toCollectiblesData(chainID walletCommon.ChainID) thirdparty.CollectibleData {
|
||||||
return thirdparty.CollectibleData{
|
return thirdparty.CollectibleData{
|
||||||
ID: c.id(chainID),
|
ID: c.id(chainID),
|
||||||
|
ContractType: openseaToContractType(c.TokenStandard),
|
||||||
Provider: OpenseaV2ID,
|
Provider: OpenseaV2ID,
|
||||||
Name: c.Name,
|
Name: c.Name,
|
||||||
Description: c.Description,
|
Description: c.Description,
|
||||||
|
@ -195,6 +207,7 @@ func (c *DetailedNFT) id(chainID walletCommon.ChainID) thirdparty.CollectibleUni
|
||||||
func (c *DetailedNFT) toCollectiblesData(chainID walletCommon.ChainID) thirdparty.CollectibleData {
|
func (c *DetailedNFT) toCollectiblesData(chainID walletCommon.ChainID) thirdparty.CollectibleData {
|
||||||
return thirdparty.CollectibleData{
|
return thirdparty.CollectibleData{
|
||||||
ID: c.id(chainID),
|
ID: c.id(chainID),
|
||||||
|
ContractType: openseaToContractType(c.TokenStandard),
|
||||||
Provider: OpenseaV2ID,
|
Provider: OpenseaV2ID,
|
||||||
Name: c.Name,
|
Name: c.Name,
|
||||||
Description: c.Description,
|
Description: c.Description,
|
||||||
|
@ -212,13 +225,14 @@ func (c *DetailedNFT) toCommon(chainID walletCommon.ChainID) thirdparty.FullColl
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *CollectionData) toCommon(id thirdparty.ContractID) thirdparty.CollectionData {
|
func (c *CollectionData) toCommon(id thirdparty.ContractID, tokenStandard string) thirdparty.CollectionData {
|
||||||
ret := thirdparty.CollectionData{
|
ret := thirdparty.CollectionData{
|
||||||
ID: id,
|
ID: id,
|
||||||
Provider: OpenseaV2ID,
|
ContractType: openseaToContractType(tokenStandard),
|
||||||
Name: c.Name,
|
Provider: OpenseaV2ID,
|
||||||
Slug: c.Collection,
|
Name: c.Name,
|
||||||
ImageURL: c.ImageURL,
|
Slug: c.Collection,
|
||||||
|
ImageURL: c.ImageURL,
|
||||||
}
|
}
|
||||||
return ret
|
return ret
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@ import (
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/common"
|
"github.com/ethereum/go-ethereum/common"
|
||||||
"github.com/status-im/status-go/services/wallet/bigint"
|
"github.com/status-im/status-go/services/wallet/bigint"
|
||||||
|
w_common "github.com/status-im/status-go/services/wallet/common"
|
||||||
"github.com/status-im/status-go/services/wallet/thirdparty"
|
"github.com/status-im/status-go/services/wallet/thirdparty"
|
||||||
|
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
|
@ -18,10 +19,11 @@ func TestUnmarshallCollection(t *testing.T) {
|
||||||
ChainID: 1,
|
ChainID: 1,
|
||||||
Address: common.HexToAddress("0x06012c8cf97bead5deae237070f9587f8e7a266d"),
|
Address: common.HexToAddress("0x06012c8cf97bead5deae237070f9587f8e7a266d"),
|
||||||
},
|
},
|
||||||
Provider: "rarible",
|
ContractType: w_common.ContractTypeERC721,
|
||||||
Name: "CryptoKitties",
|
Provider: "rarible",
|
||||||
ImageURL: "https://i.seadn.io/gae/C272ZRW1RGGef9vKMePFSCeKc1Lw6U40wl9ofNVxzUxFdj84hH9xJRQNf-7wgs7W8qw8RWe-1ybKp-VKuU5D-tg?w=500&auto=format",
|
Name: "CryptoKitties",
|
||||||
Traits: make(map[string]thirdparty.CollectionTrait),
|
ImageURL: "https://i.seadn.io/gae/C272ZRW1RGGef9vKMePFSCeKc1Lw6U40wl9ofNVxzUxFdj84hH9xJRQNf-7wgs7W8qw8RWe-1ybKp-VKuU5D-tg?w=500&auto=format",
|
||||||
|
Traits: make(map[string]thirdparty.CollectionTrait),
|
||||||
}
|
}
|
||||||
|
|
||||||
collection := Collection{}
|
collection := Collection{}
|
||||||
|
@ -51,6 +53,7 @@ func TestUnmarshallOwnedCollectibles(t *testing.T) {
|
||||||
Int: expectedTokenID0,
|
Int: expectedTokenID0,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
ContractType: w_common.ContractTypeUnknown,
|
||||||
Provider: "rarible",
|
Provider: "rarible",
|
||||||
Name: "Rariversary #002",
|
Name: "Rariversary #002",
|
||||||
Description: "Today marks your Second Rariversary! Can you believe it’s already been two years? Time flies when you’re having fun! Thank you for everything you contribute!",
|
Description: "Today marks your Second Rariversary! Can you believe it’s already been two years? Time flies when you’re having fun! Thank you for everything you contribute!",
|
||||||
|
@ -85,6 +88,7 @@ func TestUnmarshallOwnedCollectibles(t *testing.T) {
|
||||||
Int: expectedTokenID1,
|
Int: expectedTokenID1,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
ContractType: w_common.ContractTypeUnknown,
|
||||||
Provider: "rarible",
|
Provider: "rarible",
|
||||||
Name: "Rariversary #003",
|
Name: "Rariversary #003",
|
||||||
Description: "Today marks your Third Rariversary! Can you believe it’s already been three years? Time flies when you’re having fun! We’ve loved working with you these years and can’t wait to see what the next few years bring. Thank you for everything you contribute!",
|
Description: "Today marks your Third Rariversary! Can you believe it’s already been three years? Time flies when you’re having fun! We’ve loved working with you these years and can’t wait to see what the next few years bring. Thank you for everything you contribute!",
|
||||||
|
|
|
@ -54,6 +54,17 @@ func chainIDToChainString(chainID walletCommon.ChainID) string {
|
||||||
return chainString
|
return chainString
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func raribleToContractType(contractType string) walletCommon.ContractType {
|
||||||
|
switch contractType {
|
||||||
|
case "CRYPTO_PUNKS", "ERC721":
|
||||||
|
return walletCommon.ContractTypeERC721
|
||||||
|
case "ERC1155":
|
||||||
|
return walletCommon.ContractTypeERC1155
|
||||||
|
default:
|
||||||
|
return walletCommon.ContractTypeUnknown
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func raribleContractIDToUniqueID(contractID string, isMainnet bool) (thirdparty.ContractID, error) {
|
func raribleContractIDToUniqueID(contractID string, isMainnet bool) (thirdparty.ContractID, error) {
|
||||||
ret := thirdparty.ContractID{}
|
ret := thirdparty.ContractID{}
|
||||||
|
|
||||||
|
@ -147,10 +158,11 @@ func (st *AttributeValue) UnmarshalJSON(b []byte) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
type Collection struct {
|
type Collection struct {
|
||||||
ID string `json:"id"`
|
ID string `json:"id"`
|
||||||
Blockchain string `json:"blockchain"`
|
Blockchain string `json:"blockchain"`
|
||||||
Name string `json:"name"`
|
ContractType string `json:"type"`
|
||||||
Metadata CollectionMetadata `json:"meta"`
|
Name string `json:"name"`
|
||||||
|
Metadata CollectionMetadata `json:"meta"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type CollectionMetadata struct {
|
type CollectionMetadata struct {
|
||||||
|
@ -237,12 +249,13 @@ func raribleToCollectiblesData(l []Collectible, isMainnet bool) []thirdparty.Ful
|
||||||
|
|
||||||
func (c *Collection) toCommon(id thirdparty.ContractID) thirdparty.CollectionData {
|
func (c *Collection) toCommon(id thirdparty.ContractID) thirdparty.CollectionData {
|
||||||
ret := thirdparty.CollectionData{
|
ret := thirdparty.CollectionData{
|
||||||
ID: id,
|
ID: id,
|
||||||
Provider: RaribleID,
|
ContractType: raribleToContractType(c.ContractType),
|
||||||
Name: c.Metadata.Name,
|
Provider: RaribleID,
|
||||||
Slug: "", /* Missing from the API for now */
|
Name: c.Metadata.Name,
|
||||||
ImageURL: getImageURL(c.Metadata.Contents),
|
Slug: "", /* Missing from the API for now */
|
||||||
Traits: make(map[string]thirdparty.CollectionTrait, 0), /* Missing from the API for now */
|
ImageURL: getImageURL(c.Metadata.Contents),
|
||||||
|
Traits: make(map[string]thirdparty.CollectionTrait, 0), /* Missing from the API for now */
|
||||||
}
|
}
|
||||||
return ret
|
return ret
|
||||||
}
|
}
|
||||||
|
@ -326,6 +339,7 @@ func (c *Collectible) toCollectibleData(id thirdparty.CollectibleUniqueID) third
|
||||||
|
|
||||||
return thirdparty.CollectibleData{
|
return thirdparty.CollectibleData{
|
||||||
ID: id,
|
ID: id,
|
||||||
|
ContractType: walletCommon.ContractTypeUnknown, // Rarible doesn't provide the contract type with the collectible
|
||||||
Provider: RaribleID,
|
Provider: RaribleID,
|
||||||
Name: c.Metadata.Name,
|
Name: c.Metadata.Name,
|
||||||
Description: c.Metadata.Description,
|
Description: c.Metadata.Description,
|
||||||
|
|
|
@ -11,6 +11,13 @@ import (
|
||||||
w_common "github.com/status-im/status-go/services/wallet/common"
|
w_common "github.com/status-im/status-go/services/wallet/common"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func generateContractType(seed int) w_common.ContractType {
|
||||||
|
if seed%2 == 0 {
|
||||||
|
return w_common.ContractTypeERC721
|
||||||
|
}
|
||||||
|
return w_common.ContractTypeERC1155
|
||||||
|
}
|
||||||
|
|
||||||
func GenerateTestCollectiblesData(count int) (result []CollectibleData) {
|
func GenerateTestCollectiblesData(count int) (result []CollectibleData) {
|
||||||
base := rand.Intn(100) // nolint: gosec
|
base := rand.Intn(100) // nolint: gosec
|
||||||
|
|
||||||
|
@ -25,6 +32,7 @@ func GenerateTestCollectiblesData(count int) (result []CollectibleData) {
|
||||||
},
|
},
|
||||||
TokenID: &bigint.BigInt{Int: bigI},
|
TokenID: &bigint.BigInt{Int: bigI},
|
||||||
},
|
},
|
||||||
|
ContractType: generateContractType(i),
|
||||||
Provider: fmt.Sprintf("provider-%d", i),
|
Provider: fmt.Sprintf("provider-%d", i),
|
||||||
Name: fmt.Sprintf("name-%d", i),
|
Name: fmt.Sprintf("name-%d", i),
|
||||||
Description: fmt.Sprintf("description-%d", i),
|
Description: fmt.Sprintf("description-%d", i),
|
||||||
|
@ -107,6 +115,7 @@ func GenerateTestCollectionsData(count int) (result []CollectionData) {
|
||||||
ChainID: w_common.ChainID(i),
|
ChainID: w_common.ChainID(i),
|
||||||
Address: common.BigToAddress(bigI),
|
Address: common.BigToAddress(bigI),
|
||||||
},
|
},
|
||||||
|
ContractType: generateContractType(i),
|
||||||
Provider: fmt.Sprintf("provider-%d", i),
|
Provider: fmt.Sprintf("provider-%d", i),
|
||||||
Name: fmt.Sprintf("name-%d", i),
|
Name: fmt.Sprintf("name-%d", i),
|
||||||
Slug: fmt.Sprintf("slug-%d", i),
|
Slug: fmt.Sprintf("slug-%d", i),
|
||||||
|
@ -150,6 +159,9 @@ func GenerateTestFullCollectiblesData(count int) []FullCollectibleData {
|
||||||
|
|
||||||
ret := make([]FullCollectibleData, 0, count)
|
ret := make([]FullCollectibleData, 0, count)
|
||||||
for i := 0; i < count; i++ {
|
for i := 0; i < count; i++ {
|
||||||
|
// Ensure consistent ContracType
|
||||||
|
collectionsData[i].ContractType = collectiblesData[i].ContractType
|
||||||
|
|
||||||
ret = append(ret, FullCollectibleData{
|
ret = append(ret, FullCollectibleData{
|
||||||
CollectibleData: collectiblesData[i],
|
CollectibleData: collectiblesData[i],
|
||||||
CollectionData: &collectionsData[i],
|
CollectionData: &collectionsData[i],
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
// 1704913491_add_type_and_tx_timestamp_to_collectibles_ownership_cache.up.sql (73B)
|
// 1704913491_add_type_and_tx_timestamp_to_collectibles_ownership_cache.up.sql (73B)
|
||||||
// 1705664490_add_balance_check_fields_blocks_ranges_sequential.up.sql (84B)
|
// 1705664490_add_balance_check_fields_blocks_ranges_sequential.up.sql (84B)
|
||||||
// 1706531789_remove_gasfee-only-eth-transfers.up.sql (627B)
|
// 1706531789_remove_gasfee-only-eth-transfers.up.sql (627B)
|
||||||
|
// 1707160323_add_contract_type_table.up.sql (282B)
|
||||||
// doc.go (74B)
|
// doc.go (74B)
|
||||||
|
|
||||||
package migrations
|
package migrations
|
||||||
|
@ -31,7 +32,6 @@ import (
|
||||||
"crypto/sha256"
|
"crypto/sha256"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"io/ioutil"
|
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
|
@ -41,7 +41,7 @@ import (
|
||||||
func bindataRead(data []byte, name string) ([]byte, error) {
|
func bindataRead(data []byte, name string) ([]byte, error) {
|
||||||
gz, err := gzip.NewReader(bytes.NewBuffer(data))
|
gz, err := gzip.NewReader(bytes.NewBuffer(data))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("read %q: %v", name, err)
|
return nil, fmt.Errorf("read %q: %w", name, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
var buf bytes.Buffer
|
var buf bytes.Buffer
|
||||||
|
@ -49,7 +49,7 @@ func bindataRead(data []byte, name string) ([]byte, error) {
|
||||||
clErr := gz.Close()
|
clErr := gz.Close()
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("read %q: %v", name, err)
|
return nil, fmt.Errorf("read %q: %w", name, err)
|
||||||
}
|
}
|
||||||
if clErr != nil {
|
if clErr != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -105,7 +105,7 @@ func _1691753758_initialUpSql() (*asset, error) {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
info := bindataFileInfo{name: "1691753758_initial.up.sql", size: 5738, mode: os.FileMode(0644), modTime: time.Unix(1701079799, 0)}
|
info := bindataFileInfo{name: "1691753758_initial.up.sql", size: 5738, mode: os.FileMode(0644), modTime: time.Unix(1707132935, 0)}
|
||||||
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x6b, 0x25, 0x31, 0xc8, 0x27, 0x3, 0x6b, 0x9f, 0x15, 0x42, 0x2f, 0x85, 0xfb, 0xe3, 0x6, 0xea, 0xf7, 0x97, 0x12, 0x56, 0x3c, 0x9a, 0x5b, 0x1a, 0xca, 0xb1, 0x23, 0xfa, 0xcd, 0x57, 0x25, 0x5c}}
|
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x6b, 0x25, 0x31, 0xc8, 0x27, 0x3, 0x6b, 0x9f, 0x15, 0x42, 0x2f, 0x85, 0xfb, 0xe3, 0x6, 0xea, 0xf7, 0x97, 0x12, 0x56, 0x3c, 0x9a, 0x5b, 0x1a, 0xca, 0xb1, 0x23, 0xfa, 0xcd, 0x57, 0x25, 0x5c}}
|
||||||
return a, nil
|
return a, nil
|
||||||
}
|
}
|
||||||
|
@ -125,7 +125,7 @@ func _1692701329_add_collectibles_and_collections_data_cacheUpSql() (*asset, err
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
info := bindataFileInfo{name: "1692701329_add_collectibles_and_collections_data_cache.up.sql", size: 1808, mode: os.FileMode(0644), modTime: time.Unix(1699882401, 0)}
|
info := bindataFileInfo{name: "1692701329_add_collectibles_and_collections_data_cache.up.sql", size: 1808, mode: os.FileMode(0644), modTime: time.Unix(1707132935, 0)}
|
||||||
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x1, 0x51, 0xf4, 0x2b, 0x92, 0xde, 0x59, 0x65, 0xd8, 0x9b, 0x57, 0xe0, 0xfd, 0x7b, 0x12, 0xb, 0x29, 0x6e, 0x9d, 0xb5, 0x90, 0xe, 0xfa, 0x12, 0x97, 0xd, 0x61, 0x60, 0x7f, 0x32, 0x1d, 0xc3}}
|
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x1, 0x51, 0xf4, 0x2b, 0x92, 0xde, 0x59, 0x65, 0xd8, 0x9b, 0x57, 0xe0, 0xfd, 0x7b, 0x12, 0xb, 0x29, 0x6e, 0x9d, 0xb5, 0x90, 0xe, 0xfa, 0x12, 0x97, 0xd, 0x61, 0x60, 0x7f, 0x32, 0x1d, 0xc3}}
|
||||||
return a, nil
|
return a, nil
|
||||||
}
|
}
|
||||||
|
@ -145,7 +145,7 @@ func _1692701339_add_scope_to_pendingUpSql() (*asset, error) {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
info := bindataFileInfo{name: "1692701339_add_scope_to_pending.up.sql", size: 576, mode: os.FileMode(0644), modTime: time.Unix(1699882401, 0)}
|
info := bindataFileInfo{name: "1692701339_add_scope_to_pending.up.sql", size: 576, mode: os.FileMode(0644), modTime: time.Unix(1707132935, 0)}
|
||||||
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x36, 0x8a, 0x5e, 0xe2, 0x63, 0x15, 0x37, 0xba, 0x55, 0x18, 0xf3, 0xcc, 0xe0, 0x5, 0x84, 0xe1, 0x5b, 0xe8, 0x1, 0x32, 0x6b, 0x9f, 0x7d, 0x9f, 0xd9, 0x23, 0x6c, 0xa9, 0xb5, 0xdc, 0xf4, 0x93}}
|
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x36, 0x8a, 0x5e, 0xe2, 0x63, 0x15, 0x37, 0xba, 0x55, 0x18, 0xf3, 0xcc, 0xe0, 0x5, 0x84, 0xe1, 0x5b, 0xe8, 0x1, 0x32, 0x6b, 0x9f, 0x7d, 0x9f, 0xd9, 0x23, 0x6c, 0xa9, 0xb5, 0xdc, 0xf4, 0x93}}
|
||||||
return a, nil
|
return a, nil
|
||||||
}
|
}
|
||||||
|
@ -165,7 +165,7 @@ func _1694540071_add_collectibles_ownership_update_timestampUpSql() (*asset, err
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
info := bindataFileInfo{name: "1694540071_add_collectibles_ownership_update_timestamp.up.sql", size: 349, mode: os.FileMode(0644), modTime: time.Unix(1699882401, 0)}
|
info := bindataFileInfo{name: "1694540071_add_collectibles_ownership_update_timestamp.up.sql", size: 349, mode: os.FileMode(0644), modTime: time.Unix(1707132935, 0)}
|
||||||
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x7f, 0x45, 0xc7, 0xce, 0x79, 0x63, 0xbc, 0x6f, 0x83, 0x5f, 0xe2, 0x3, 0x56, 0xcc, 0x5, 0x2f, 0x85, 0xda, 0x7e, 0xea, 0xf5, 0xd2, 0xac, 0x19, 0xd4, 0xd8, 0x5e, 0xdd, 0xed, 0xe2, 0xa9, 0x97}}
|
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x7f, 0x45, 0xc7, 0xce, 0x79, 0x63, 0xbc, 0x6f, 0x83, 0x5f, 0xe2, 0x3, 0x56, 0xcc, 0x5, 0x2f, 0x85, 0xda, 0x7e, 0xea, 0xf5, 0xd2, 0xac, 0x19, 0xd4, 0xd8, 0x5e, 0xdd, 0xed, 0xe2, 0xa9, 0x97}}
|
||||||
return a, nil
|
return a, nil
|
||||||
}
|
}
|
||||||
|
@ -185,7 +185,7 @@ func _1694692748_add_raw_balance_to_token_balancesUpSql() (*asset, error) {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
info := bindataFileInfo{name: "1694692748_add_raw_balance_to_token_balances.up.sql", size: 165, mode: os.FileMode(0644), modTime: time.Unix(1699882401, 0)}
|
info := bindataFileInfo{name: "1694692748_add_raw_balance_to_token_balances.up.sql", size: 165, mode: os.FileMode(0644), modTime: time.Unix(1707132935, 0)}
|
||||||
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd4, 0xe0, 0x5b, 0x42, 0xf0, 0x96, 0xa5, 0xf5, 0xed, 0xc0, 0x97, 0x88, 0xb0, 0x6d, 0xfe, 0x7d, 0x97, 0x2e, 0x17, 0xd2, 0x16, 0xbc, 0x2a, 0xf2, 0xcc, 0x67, 0x9e, 0xc5, 0x47, 0xf6, 0x69, 0x1}}
|
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd4, 0xe0, 0x5b, 0x42, 0xf0, 0x96, 0xa5, 0xf5, 0xed, 0xc0, 0x97, 0x88, 0xb0, 0x6d, 0xfe, 0x7d, 0x97, 0x2e, 0x17, 0xd2, 0x16, 0xbc, 0x2a, 0xf2, 0xcc, 0x67, 0x9e, 0xc5, 0x47, 0xf6, 0x69, 0x1}}
|
||||||
return a, nil
|
return a, nil
|
||||||
}
|
}
|
||||||
|
@ -205,7 +205,7 @@ func _1695133989_add_community_id_to_collectibles_and_collections_data_cacheUpSq
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
info := bindataFileInfo{name: "1695133989_add_community_id_to_collectibles_and_collections_data_cache.up.sql", size: 275, mode: os.FileMode(0644), modTime: time.Unix(1699882401, 0)}
|
info := bindataFileInfo{name: "1695133989_add_community_id_to_collectibles_and_collections_data_cache.up.sql", size: 275, mode: os.FileMode(0644), modTime: time.Unix(1707132935, 0)}
|
||||||
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xfa, 0x2, 0xa, 0x7f, 0x4b, 0xd1, 0x3, 0xd0, 0x3, 0x29, 0x84, 0x31, 0xed, 0x49, 0x4f, 0xb1, 0x2d, 0xd7, 0x80, 0x41, 0x5b, 0xfa, 0x6, 0xae, 0xb4, 0xf6, 0x6b, 0x49, 0xee, 0x57, 0x33, 0x76}}
|
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xfa, 0x2, 0xa, 0x7f, 0x4b, 0xd1, 0x3, 0xd0, 0x3, 0x29, 0x84, 0x31, 0xed, 0x49, 0x4f, 0xb1, 0x2d, 0xd7, 0x80, 0x41, 0x5b, 0xfa, 0x6, 0xae, 0xb4, 0xf6, 0x6b, 0x49, 0xee, 0x57, 0x33, 0x76}}
|
||||||
return a, nil
|
return a, nil
|
||||||
}
|
}
|
||||||
|
@ -225,7 +225,7 @@ func _1695932536_balance_history_v2UpSql() (*asset, error) {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
info := bindataFileInfo{name: "1695932536_balance_history_v2.up.sql", size: 653, mode: os.FileMode(0644), modTime: time.Unix(1699882401, 0)}
|
info := bindataFileInfo{name: "1695932536_balance_history_v2.up.sql", size: 653, mode: os.FileMode(0644), modTime: time.Unix(1707132935, 0)}
|
||||||
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x37, 0xf4, 0x14, 0x91, 0xf6, 0x5f, 0xc4, 0x9b, 0xb7, 0x83, 0x32, 0x72, 0xbe, 0x82, 0x42, 0x39, 0xa4, 0x3b, 0xc9, 0x78, 0x3d, 0xca, 0xd4, 0xbf, 0xfc, 0x7a, 0x33, 0x1e, 0xcd, 0x9e, 0xe4, 0x85}}
|
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x37, 0xf4, 0x14, 0x91, 0xf6, 0x5f, 0xc4, 0x9b, 0xb7, 0x83, 0x32, 0x72, 0xbe, 0x82, 0x42, 0x39, 0xa4, 0x3b, 0xc9, 0x78, 0x3d, 0xca, 0xd4, 0xbf, 0xfc, 0x7a, 0x33, 0x1e, 0xcd, 0x9e, 0xe4, 0x85}}
|
||||||
return a, nil
|
return a, nil
|
||||||
}
|
}
|
||||||
|
@ -245,7 +245,7 @@ func _1696853635_input_dataUpSql() (*asset, error) {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
info := bindataFileInfo{name: "1696853635_input_data.up.sql", size: 23140, mode: os.FileMode(0644), modTime: time.Unix(1699882401, 0)}
|
info := bindataFileInfo{name: "1696853635_input_data.up.sql", size: 23140, mode: os.FileMode(0644), modTime: time.Unix(1707132935, 0)}
|
||||||
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x89, 0x30, 0x33, 0x33, 0x55, 0xc5, 0x57, 0x2b, 0xaf, 0xef, 0x3d, 0x8d, 0x2a, 0xaa, 0x5c, 0x32, 0xd1, 0xf4, 0xd, 0x4a, 0xd0, 0x33, 0x4a, 0xe8, 0xf6, 0x8, 0x6b, 0x65, 0xcc, 0xba, 0xed, 0x42}}
|
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x89, 0x30, 0x33, 0x33, 0x55, 0xc5, 0x57, 0x2b, 0xaf, 0xef, 0x3d, 0x8d, 0x2a, 0xaa, 0x5c, 0x32, 0xd1, 0xf4, 0xd, 0x4a, 0xd0, 0x33, 0x4a, 0xe8, 0xf6, 0x8, 0x6b, 0x65, 0xcc, 0xba, 0xed, 0x42}}
|
||||||
return a, nil
|
return a, nil
|
||||||
}
|
}
|
||||||
|
@ -265,7 +265,7 @@ func _1698117918_add_community_id_to_tokensUpSql() (*asset, error) {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
info := bindataFileInfo{name: "1698117918_add_community_id_to_tokens.up.sql", size: 61, mode: os.FileMode(0644), modTime: time.Unix(1699882401, 0)}
|
info := bindataFileInfo{name: "1698117918_add_community_id_to_tokens.up.sql", size: 61, mode: os.FileMode(0644), modTime: time.Unix(1707132935, 0)}
|
||||||
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xb3, 0x82, 0xdb, 0xde, 0x3, 0x3, 0xc, 0x67, 0xf3, 0x54, 0xc4, 0xad, 0xd6, 0xce, 0x56, 0xfb, 0xc1, 0x87, 0xd7, 0xda, 0xab, 0xec, 0x1, 0xe1, 0x7d, 0xb3, 0x63, 0xd6, 0xe5, 0x5d, 0x1c, 0x15}}
|
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xb3, 0x82, 0xdb, 0xde, 0x3, 0x3, 0xc, 0x67, 0xf3, 0x54, 0xc4, 0xad, 0xd6, 0xce, 0x56, 0xfb, 0xc1, 0x87, 0xd7, 0xda, 0xab, 0xec, 0x1, 0xe1, 0x7d, 0xb3, 0x63, 0xd6, 0xe5, 0x5d, 0x1c, 0x15}}
|
||||||
return a, nil
|
return a, nil
|
||||||
}
|
}
|
||||||
|
@ -285,7 +285,7 @@ func _1698257443_add_community_metadata_to_wallet_dbUpSql() (*asset, error) {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
info := bindataFileInfo{name: "1698257443_add_community_metadata_to_wallet_db.up.sql", size: 323, mode: os.FileMode(0644), modTime: time.Unix(1699882401, 0)}
|
info := bindataFileInfo{name: "1698257443_add_community_metadata_to_wallet_db.up.sql", size: 323, mode: os.FileMode(0644), modTime: time.Unix(1707132935, 0)}
|
||||||
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x22, 0xd3, 0x4, 0x25, 0xfa, 0x23, 0x1, 0x48, 0x83, 0x26, 0x20, 0xf2, 0x3d, 0xbc, 0xc1, 0xa7, 0x7c, 0x27, 0x7c, 0x1d, 0x63, 0x3, 0xa, 0xd0, 0xce, 0x47, 0x86, 0xdc, 0xa1, 0x3c, 0x2, 0x1c}}
|
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x22, 0xd3, 0x4, 0x25, 0xfa, 0x23, 0x1, 0x48, 0x83, 0x26, 0x20, 0xf2, 0x3d, 0xbc, 0xc1, 0xa7, 0x7c, 0x27, 0x7c, 0x1d, 0x63, 0x3, 0xa, 0xd0, 0xce, 0x47, 0x86, 0xdc, 0xa1, 0x3c, 0x2, 0x1c}}
|
||||||
return a, nil
|
return a, nil
|
||||||
}
|
}
|
||||||
|
@ -305,7 +305,7 @@ func _1699987075_add_timestamp_and_state_to_community_data_cacheUpSql() (*asset,
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
info := bindataFileInfo{name: "1699987075_add_timestamp_and_state_to_community_data_cache.up.sql", size: 865, mode: os.FileMode(0644), modTime: time.Unix(1701152469, 0)}
|
info := bindataFileInfo{name: "1699987075_add_timestamp_and_state_to_community_data_cache.up.sql", size: 865, mode: os.FileMode(0644), modTime: time.Unix(1707132935, 0)}
|
||||||
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xc3, 0xee, 0x37, 0xf9, 0x7f, 0x9e, 0xfe, 0x93, 0x66, 0x2b, 0xd, 0x57, 0xf4, 0x89, 0x6c, 0x51, 0xfd, 0x14, 0xe9, 0xcd, 0xab, 0x65, 0xe7, 0xa7, 0x83, 0x7e, 0xe0, 0x5c, 0x14, 0x49, 0xf3, 0xe5}}
|
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xc3, 0xee, 0x37, 0xf9, 0x7f, 0x9e, 0xfe, 0x93, 0x66, 0x2b, 0xd, 0x57, 0xf4, 0x89, 0x6c, 0x51, 0xfd, 0x14, 0xe9, 0xcd, 0xab, 0x65, 0xe7, 0xa7, 0x83, 0x7e, 0xe0, 0x5c, 0x14, 0x49, 0xf3, 0xe5}}
|
||||||
return a, nil
|
return a, nil
|
||||||
}
|
}
|
||||||
|
@ -325,7 +325,7 @@ func _1700414564_add_wallet_connect_pairings_tableUpSql() (*asset, error) {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
info := bindataFileInfo{name: "1700414564_add_wallet_connect_pairings_table.up.sql", size: 439, mode: os.FileMode(0644), modTime: time.Unix(1701326149, 0)}
|
info := bindataFileInfo{name: "1700414564_add_wallet_connect_pairings_table.up.sql", size: 439, mode: os.FileMode(0644), modTime: time.Unix(1707132935, 0)}
|
||||||
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xa9, 0x77, 0x5e, 0x19, 0x62, 0x3c, 0x3a, 0x81, 0x16, 0xa0, 0x95, 0x35, 0x62, 0xab, 0x5e, 0x2b, 0xea, 0x11, 0x71, 0x11, 0xd0, 0x9, 0xab, 0x9c, 0xab, 0xf2, 0xdd, 0x5f, 0x88, 0x83, 0x9a, 0x93}}
|
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xa9, 0x77, 0x5e, 0x19, 0x62, 0x3c, 0x3a, 0x81, 0x16, 0xa0, 0x95, 0x35, 0x62, 0xab, 0x5e, 0x2b, 0xea, 0x11, 0x71, 0x11, 0xd0, 0x9, 0xab, 0x9c, 0xab, 0xf2, 0xdd, 0x5f, 0x88, 0x83, 0x9a, 0x93}}
|
||||||
return a, nil
|
return a, nil
|
||||||
}
|
}
|
||||||
|
@ -345,7 +345,7 @@ func _1701101493_add_token_blocks_rangeUpSql() (*asset, error) {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
info := bindataFileInfo{name: "1701101493_add_token_blocks_range.up.sql", size: 469, mode: os.FileMode(0644), modTime: time.Unix(1701789135, 0)}
|
info := bindataFileInfo{name: "1701101493_add_token_blocks_range.up.sql", size: 469, mode: os.FileMode(0644), modTime: time.Unix(1707132935, 0)}
|
||||||
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xe0, 0x37, 0xfb, 0x1a, 0x6c, 0x8c, 0xa8, 0x1e, 0xa2, 0xa5, 0x1f, 0x90, 0x73, 0x3e, 0x31, 0x5f, 0x48, 0x1e, 0x9a, 0x37, 0x27, 0x1c, 0xc, 0x67, 0x1, 0xcd, 0xec, 0x85, 0x4c, 0x1c, 0x26, 0x52}}
|
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xe0, 0x37, 0xfb, 0x1a, 0x6c, 0x8c, 0xa8, 0x1e, 0xa2, 0xa5, 0x1f, 0x90, 0x73, 0x3e, 0x31, 0x5f, 0x48, 0x1e, 0x9a, 0x37, 0x27, 0x1c, 0xc, 0x67, 0x1, 0xcd, 0xec, 0x85, 0x4c, 0x1c, 0x26, 0x52}}
|
||||||
return a, nil
|
return a, nil
|
||||||
}
|
}
|
||||||
|
@ -365,7 +365,7 @@ func _1702467441_wallet_connect_sessions_instead_of_pairingsUpSql() (*asset, err
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
info := bindataFileInfo{name: "1702467441_wallet_connect_sessions_instead_of_pairings.up.sql", size: 356, mode: os.FileMode(0644), modTime: time.Unix(1705494454, 0)}
|
info := bindataFileInfo{name: "1702467441_wallet_connect_sessions_instead_of_pairings.up.sql", size: 356, mode: os.FileMode(0644), modTime: time.Unix(1707132935, 0)}
|
||||||
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x73, 0x5f, 0x0, 0x60, 0x6, 0x28, 0x76, 0x61, 0x39, 0xdc, 0xa1, 0x84, 0x80, 0x46, 0x8a, 0xe4, 0x42, 0xb5, 0x1f, 0x18, 0x14, 0x23, 0x46, 0xb9, 0x51, 0xf, 0x62, 0xac, 0xc, 0x7, 0x98, 0xe}}
|
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x73, 0x5f, 0x0, 0x60, 0x6, 0x28, 0x76, 0x61, 0x39, 0xdc, 0xa1, 0x84, 0x80, 0x46, 0x8a, 0xe4, 0x42, 0xb5, 0x1f, 0x18, 0x14, 0x23, 0x46, 0xb9, 0x51, 0xf, 0x62, 0xac, 0xc, 0x7, 0x98, 0xe}}
|
||||||
return a, nil
|
return a, nil
|
||||||
}
|
}
|
||||||
|
@ -385,7 +385,7 @@ func _1702577524_add_community_collections_and_collectibles_images_cacheUpSql()
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
info := bindataFileInfo{name: "1702577524_add_community_collections_and_collectibles_images_cache.up.sql", size: 210, mode: os.FileMode(0644), modTime: time.Unix(1705494454, 0)}
|
info := bindataFileInfo{name: "1702577524_add_community_collections_and_collectibles_images_cache.up.sql", size: 210, mode: os.FileMode(0644), modTime: time.Unix(1707132935, 0)}
|
||||||
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x8e, 0x1b, 0x32, 0x2c, 0xfa, 0x11, 0x5e, 0x5e, 0x5d, 0xef, 0x92, 0xa0, 0x29, 0x52, 0xbf, 0x6e, 0xe3, 0x30, 0xe4, 0xdf, 0xdc, 0x5, 0xbe, 0xd1, 0xf8, 0x3e, 0xd9, 0x9b, 0xd6, 0x9b, 0x95, 0x96}}
|
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x8e, 0x1b, 0x32, 0x2c, 0xfa, 0x11, 0x5e, 0x5e, 0x5d, 0xef, 0x92, 0xa0, 0x29, 0x52, 0xbf, 0x6e, 0xe3, 0x30, 0xe4, 0xdf, 0xdc, 0x5, 0xbe, 0xd1, 0xf8, 0x3e, 0xd9, 0x9b, 0xd6, 0x9b, 0x95, 0x96}}
|
||||||
return a, nil
|
return a, nil
|
||||||
}
|
}
|
||||||
|
@ -405,7 +405,7 @@ func _1702867707_add_balance_to_collectibles_ownership_cacheUpSql() (*asset, err
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
info := bindataFileInfo{name: "1702867707_add_balance_to_collectibles_ownership_cache.up.sql", size: 289, mode: os.FileMode(0644), modTime: time.Unix(1705494454, 0)}
|
info := bindataFileInfo{name: "1702867707_add_balance_to_collectibles_ownership_cache.up.sql", size: 289, mode: os.FileMode(0644), modTime: time.Unix(1707132935, 0)}
|
||||||
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x6f, 0x63, 0x30, 0x11, 0x22, 0xb9, 0xee, 0xae, 0xb8, 0xc4, 0xe6, 0xd3, 0x7, 0xc, 0xe6, 0xa3, 0x72, 0x8c, 0x6, 0x9d, 0x6c, 0x97, 0x8f, 0xb2, 0xd0, 0x37, 0x69, 0x69, 0x6, 0x7f, 0x67, 0x94}}
|
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x6f, 0x63, 0x30, 0x11, 0x22, 0xb9, 0xee, 0xae, 0xb8, 0xc4, 0xe6, 0xd3, 0x7, 0xc, 0xe6, 0xa3, 0x72, 0x8c, 0x6, 0x9d, 0x6c, 0x97, 0x8f, 0xb2, 0xd0, 0x37, 0x69, 0x69, 0x6, 0x7f, 0x67, 0x94}}
|
||||||
return a, nil
|
return a, nil
|
||||||
}
|
}
|
||||||
|
@ -425,7 +425,7 @@ func _1703686612_add_color_to_saved_addressesUpSql() (*asset, error) {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
info := bindataFileInfo{name: "1703686612_add_color_to_saved_addresses.up.sql", size: 114, mode: os.FileMode(0644), modTime: time.Unix(1705494454, 0)}
|
info := bindataFileInfo{name: "1703686612_add_color_to_saved_addresses.up.sql", size: 114, mode: os.FileMode(0644), modTime: time.Unix(1707132935, 0)}
|
||||||
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xb7, 0x6e, 0x8d, 0xc0, 0x49, 0xc, 0xb, 0x66, 0xa0, 0x77, 0x32, 0x76, 0xa8, 0xd0, 0x40, 0xce, 0x67, 0xa, 0x9e, 0x23, 0x36, 0xe, 0xc3, 0xd3, 0x9d, 0xe2, 0xde, 0x60, 0x19, 0xba, 0x44, 0xf1}}
|
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xb7, 0x6e, 0x8d, 0xc0, 0x49, 0xc, 0xb, 0x66, 0xa0, 0x77, 0x32, 0x76, 0xa8, 0xd0, 0x40, 0xce, 0x67, 0xa, 0x9e, 0x23, 0x36, 0xe, 0xc3, 0xd3, 0x9d, 0xe2, 0xde, 0x60, 0x19, 0xba, 0x44, 0xf1}}
|
||||||
return a, nil
|
return a, nil
|
||||||
}
|
}
|
||||||
|
@ -445,7 +445,7 @@ func _1704701942_remove_favourite_and_change_primary_key_for_saved_addressesUpSq
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
info := bindataFileInfo{name: "1704701942_remove_favourite_and_change_primary_key_for_saved_addresses.up.sql", size: 894, mode: os.FileMode(0644), modTime: time.Unix(1705494454, 0)}
|
info := bindataFileInfo{name: "1704701942_remove_favourite_and_change_primary_key_for_saved_addresses.up.sql", size: 894, mode: os.FileMode(0644), modTime: time.Unix(1707132935, 0)}
|
||||||
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x70, 0xd3, 0xcf, 0x90, 0xb2, 0xa, 0x23, 0x41, 0x8a, 0xa5, 0x90, 0x7b, 0x34, 0xec, 0x3b, 0x3f, 0xa9, 0xb1, 0x95, 0xf3, 0x2a, 0xdf, 0xbb, 0x53, 0x57, 0x27, 0x2b, 0x12, 0x84, 0xf4, 0x83, 0xda}}
|
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x70, 0xd3, 0xcf, 0x90, 0xb2, 0xa, 0x23, 0x41, 0x8a, 0xa5, 0x90, 0x7b, 0x34, 0xec, 0x3b, 0x3f, 0xa9, 0xb1, 0x95, 0xf3, 0x2a, 0xdf, 0xbb, 0x53, 0x57, 0x27, 0x2b, 0x12, 0x84, 0xf4, 0x83, 0xda}}
|
||||||
return a, nil
|
return a, nil
|
||||||
}
|
}
|
||||||
|
@ -465,7 +465,7 @@ func _1704913491_add_type_and_tx_timestamp_to_collectibles_ownership_cacheUpSql(
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
info := bindataFileInfo{name: "1704913491_add_type_and_tx_timestamp_to_collectibles_ownership_cache.up.sql", size: 73, mode: os.FileMode(0644), modTime: time.Unix(1705494454, 0)}
|
info := bindataFileInfo{name: "1704913491_add_type_and_tx_timestamp_to_collectibles_ownership_cache.up.sql", size: 73, mode: os.FileMode(0644), modTime: time.Unix(1707132935, 0)}
|
||||||
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xa2, 0xf0, 0x71, 0xb5, 0xaf, 0x22, 0xac, 0x77, 0xdb, 0x6f, 0x62, 0x27, 0x12, 0x46, 0x60, 0x3, 0x59, 0x43, 0x6f, 0x1, 0xdc, 0xe8, 0x6e, 0x89, 0xa5, 0x77, 0x37, 0x36, 0xd9, 0x4e, 0x6d, 0x9b}}
|
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xa2, 0xf0, 0x71, 0xb5, 0xaf, 0x22, 0xac, 0x77, 0xdb, 0x6f, 0x62, 0x27, 0x12, 0x46, 0x60, 0x3, 0x59, 0x43, 0x6f, 0x1, 0xdc, 0xe8, 0x6e, 0x89, 0xa5, 0x77, 0x37, 0x36, 0xd9, 0x4e, 0x6d, 0x9b}}
|
||||||
return a, nil
|
return a, nil
|
||||||
}
|
}
|
||||||
|
@ -485,7 +485,7 @@ func _1705664490_add_balance_check_fields_blocks_ranges_sequentialUpSql() (*asse
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
info := bindataFileInfo{name: "1705664490_add_balance_check_fields_blocks_ranges_sequential.up.sql", size: 84, mode: os.FileMode(0644), modTime: time.Unix(1705924960, 0)}
|
info := bindataFileInfo{name: "1705664490_add_balance_check_fields_blocks_ranges_sequential.up.sql", size: 84, mode: os.FileMode(0644), modTime: time.Unix(1707132935, 0)}
|
||||||
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x3c, 0x49, 0x9, 0xd9, 0x83, 0x3d, 0xd8, 0xb7, 0x4f, 0x8f, 0xc2, 0xa2, 0xd1, 0xb, 0x57, 0x1f, 0x5, 0x39, 0x55, 0xfb, 0x6e, 0x32, 0x9e, 0x19, 0x3d, 0x3c, 0x77, 0xa2, 0xc4, 0xf4, 0x53, 0x35}}
|
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x3c, 0x49, 0x9, 0xd9, 0x83, 0x3d, 0xd8, 0xb7, 0x4f, 0x8f, 0xc2, 0xa2, 0xd1, 0xb, 0x57, 0x1f, 0x5, 0x39, 0x55, 0xfb, 0x6e, 0x32, 0x9e, 0x19, 0x3d, 0x3c, 0x77, 0xa2, 0xc4, 0xf4, 0x53, 0x35}}
|
||||||
return a, nil
|
return a, nil
|
||||||
}
|
}
|
||||||
|
@ -505,11 +505,31 @@ func _1706531789_remove_gasfeeOnlyEthTransfersUpSql() (*asset, error) {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
info := bindataFileInfo{name: "1706531789_remove_gasfee-only-eth-transfers.up.sql", size: 627, mode: os.FileMode(0644), modTime: time.Unix(1706616444, 0)}
|
info := bindataFileInfo{name: "1706531789_remove_gasfee-only-eth-transfers.up.sql", size: 627, mode: os.FileMode(0644), modTime: time.Unix(1707132935, 0)}
|
||||||
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xae, 0x8c, 0x37, 0xd3, 0x2a, 0xf, 0x1a, 0x8, 0xe9, 0xa7, 0x1f, 0x5a, 0x10, 0xa7, 0x4c, 0x36, 0x4f, 0xc6, 0xdc, 0xeb, 0x79, 0x90, 0xe7, 0xcd, 0x4a, 0xef, 0xb7, 0x3, 0x6e, 0x88, 0x6f, 0x79}}
|
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xae, 0x8c, 0x37, 0xd3, 0x2a, 0xf, 0x1a, 0x8, 0xe9, 0xa7, 0x1f, 0x5a, 0x10, 0xa7, 0x4c, 0x36, 0x4f, 0xc6, 0xdc, 0xeb, 0x79, 0x90, 0xe7, 0xcd, 0x4a, 0xef, 0xb7, 0x3, 0x6e, 0x88, 0x6f, 0x79}}
|
||||||
return a, nil
|
return a, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var __1707160323_add_contract_type_tableUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x7c\x8f\x3b\x6e\x85\x30\x10\x45\x7b\xaf\xe2\x96\x79\xd2\xdb\xc1\xab\x0c\x4c\xc8\x48\x68\x50\xc0\x8e\xe8\x2c\xcb\x76\x84\x1b\x27\x02\x37\xec\x3e\xca\x07\xa5\xc8\xa7\x3f\x33\xf7\x9c\x76\x22\x6d\x08\x46\x37\x03\x81\xef\x21\xa3\x01\x2d\x3c\x9b\x19\xe1\xa5\xd4\xcd\x87\xea\xea\xf1\x9a\x5c\xf0\x61\x4d\xb8\x53\x00\x10\x56\x9f\x8b\xcb\x11\x56\x66\xee\x85\x3a\x34\xdc\xb3\x98\x8f\x6b\xb1\xc3\x70\xfd\xc4\xce\x07\x3e\xc6\x2d\xed\x3b\x9e\xf4\xd4\x3e\xe8\xe9\x2f\xec\x7d\x07\x2c\x86\x7a\xfa\x66\xd4\xe5\xa6\xd4\x97\xa5\x15\x7e\xb4\x04\x96\x8e\x96\x7f\x65\x73\x4c\xa5\xe6\xe7\xc3\xa5\x52\xb7\x03\xa3\xfc\x1e\x73\x76\x5c\x7f\xa8\x5e\x6e\xea\x2d\x00\x00\xff\xff\x18\xc9\x3c\xf4\x1a\x01\x00\x00")
|
||||||
|
|
||||||
|
func _1707160323_add_contract_type_tableUpSqlBytes() ([]byte, error) {
|
||||||
|
return bindataRead(
|
||||||
|
__1707160323_add_contract_type_tableUpSql,
|
||||||
|
"1707160323_add_contract_type_table.up.sql",
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
func _1707160323_add_contract_type_tableUpSql() (*asset, error) {
|
||||||
|
bytes, err := _1707160323_add_contract_type_tableUpSqlBytes()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
info := bindataFileInfo{name: "1707160323_add_contract_type_table.up.sql", size: 282, mode: os.FileMode(0644), modTime: time.Unix(1707160521, 0)}
|
||||||
|
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x45, 0x99, 0xd9, 0x86, 0x72, 0x37, 0x97, 0xfc, 0xa7, 0xbb, 0xe3, 0x86, 0xf1, 0xfd, 0x77, 0x31, 0x91, 0xcb, 0xa4, 0x2c, 0x5b, 0xaa, 0x4b, 0xa2, 0x7f, 0x8a, 0x2c, 0x7a, 0xda, 0x20, 0x7a, 0x97}}
|
||||||
|
return a, nil
|
||||||
|
}
|
||||||
|
|
||||||
var _docGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x2c\xc9\xb1\x0d\xc4\x20\x0c\x05\xd0\x9e\x29\xfe\x02\xd8\xfd\x6d\xe3\x4b\xac\x2f\x44\x82\x09\x78\x7f\xa5\x49\xfd\xa6\x1d\xdd\xe8\xd8\xcf\x55\x8a\x2a\xe3\x47\x1f\xbe\x2c\x1d\x8c\xfa\x6f\xe3\xb4\x34\xd4\xd9\x89\xbb\x71\x59\xb6\x18\x1b\x35\x20\xa2\x9f\x0a\x03\xa2\xe5\x0d\x00\x00\xff\xff\x60\xcd\x06\xbe\x4a\x00\x00\x00")
|
var _docGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x2c\xc9\xb1\x0d\xc4\x20\x0c\x05\xd0\x9e\x29\xfe\x02\xd8\xfd\x6d\xe3\x4b\xac\x2f\x44\x82\x09\x78\x7f\xa5\x49\xfd\xa6\x1d\xdd\xe8\xd8\xcf\x55\x8a\x2a\xe3\x47\x1f\xbe\x2c\x1d\x8c\xfa\x6f\xe3\xb4\x34\xd4\xd9\x89\xbb\x71\x59\xb6\x18\x1b\x35\x20\xa2\x9f\x0a\x03\xa2\xe5\x0d\x00\x00\xff\xff\x60\xcd\x06\xbe\x4a\x00\x00\x00")
|
||||||
|
|
||||||
func docGoBytes() ([]byte, error) {
|
func docGoBytes() ([]byte, error) {
|
||||||
|
@ -525,7 +545,7 @@ func docGo() (*asset, error) {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
info := bindataFileInfo{name: "doc.go", size: 74, mode: os.FileMode(0644), modTime: time.Unix(1699882401, 0)}
|
info := bindataFileInfo{name: "doc.go", size: 74, mode: os.FileMode(0644), modTime: time.Unix(1707132935, 0)}
|
||||||
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xde, 0x7c, 0x28, 0xcd, 0x47, 0xf2, 0xfa, 0x7c, 0x51, 0x2d, 0xd8, 0x38, 0xb, 0xb0, 0x34, 0x9d, 0x4c, 0x62, 0xa, 0x9e, 0x28, 0xc3, 0x31, 0x23, 0xd9, 0xbb, 0x89, 0x9f, 0xa0, 0x89, 0x1f, 0xe8}}
|
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xde, 0x7c, 0x28, 0xcd, 0x47, 0xf2, 0xfa, 0x7c, 0x51, 0x2d, 0xd8, 0x38, 0xb, 0xb0, 0x34, 0x9d, 0x4c, 0x62, 0xa, 0x9e, 0x28, 0xc3, 0x31, 0x23, 0xd9, 0xbb, 0x89, 0x9f, 0xa0, 0x89, 0x1f, 0xe8}}
|
||||||
return a, nil
|
return a, nil
|
||||||
}
|
}
|
||||||
|
@ -621,60 +641,45 @@ func AssetNames() []string {
|
||||||
|
|
||||||
// _bindata is a table, holding each asset generator, mapped to its name.
|
// _bindata is a table, holding each asset generator, mapped to its name.
|
||||||
var _bindata = map[string]func() (*asset, error){
|
var _bindata = map[string]func() (*asset, error){
|
||||||
"1691753758_initial.up.sql": _1691753758_initialUpSql,
|
"1691753758_initial.up.sql": _1691753758_initialUpSql,
|
||||||
|
"1692701329_add_collectibles_and_collections_data_cache.up.sql": _1692701329_add_collectibles_and_collections_data_cacheUpSql,
|
||||||
"1692701329_add_collectibles_and_collections_data_cache.up.sql": _1692701329_add_collectibles_and_collections_data_cacheUpSql,
|
"1692701339_add_scope_to_pending.up.sql": _1692701339_add_scope_to_pendingUpSql,
|
||||||
|
"1694540071_add_collectibles_ownership_update_timestamp.up.sql": _1694540071_add_collectibles_ownership_update_timestampUpSql,
|
||||||
"1692701339_add_scope_to_pending.up.sql": _1692701339_add_scope_to_pendingUpSql,
|
"1694692748_add_raw_balance_to_token_balances.up.sql": _1694692748_add_raw_balance_to_token_balancesUpSql,
|
||||||
|
|
||||||
"1694540071_add_collectibles_ownership_update_timestamp.up.sql": _1694540071_add_collectibles_ownership_update_timestampUpSql,
|
|
||||||
|
|
||||||
"1694692748_add_raw_balance_to_token_balances.up.sql": _1694692748_add_raw_balance_to_token_balancesUpSql,
|
|
||||||
|
|
||||||
"1695133989_add_community_id_to_collectibles_and_collections_data_cache.up.sql": _1695133989_add_community_id_to_collectibles_and_collections_data_cacheUpSql,
|
"1695133989_add_community_id_to_collectibles_and_collections_data_cache.up.sql": _1695133989_add_community_id_to_collectibles_and_collections_data_cacheUpSql,
|
||||||
|
"1695932536_balance_history_v2.up.sql": _1695932536_balance_history_v2UpSql,
|
||||||
"1695932536_balance_history_v2.up.sql": _1695932536_balance_history_v2UpSql,
|
"1696853635_input_data.up.sql": _1696853635_input_dataUpSql,
|
||||||
|
"1698117918_add_community_id_to_tokens.up.sql": _1698117918_add_community_id_to_tokensUpSql,
|
||||||
"1696853635_input_data.up.sql": _1696853635_input_dataUpSql,
|
"1698257443_add_community_metadata_to_wallet_db.up.sql": _1698257443_add_community_metadata_to_wallet_dbUpSql,
|
||||||
|
"1699987075_add_timestamp_and_state_to_community_data_cache.up.sql": _1699987075_add_timestamp_and_state_to_community_data_cacheUpSql,
|
||||||
"1698117918_add_community_id_to_tokens.up.sql": _1698117918_add_community_id_to_tokensUpSql,
|
"1700414564_add_wallet_connect_pairings_table.up.sql": _1700414564_add_wallet_connect_pairings_tableUpSql,
|
||||||
|
"1701101493_add_token_blocks_range.up.sql": _1701101493_add_token_blocks_rangeUpSql,
|
||||||
"1698257443_add_community_metadata_to_wallet_db.up.sql": _1698257443_add_community_metadata_to_wallet_dbUpSql,
|
"1702467441_wallet_connect_sessions_instead_of_pairings.up.sql": _1702467441_wallet_connect_sessions_instead_of_pairingsUpSql,
|
||||||
|
"1702577524_add_community_collections_and_collectibles_images_cache.up.sql": _1702577524_add_community_collections_and_collectibles_images_cacheUpSql,
|
||||||
"1699987075_add_timestamp_and_state_to_community_data_cache.up.sql": _1699987075_add_timestamp_and_state_to_community_data_cacheUpSql,
|
"1702867707_add_balance_to_collectibles_ownership_cache.up.sql": _1702867707_add_balance_to_collectibles_ownership_cacheUpSql,
|
||||||
|
"1703686612_add_color_to_saved_addresses.up.sql": _1703686612_add_color_to_saved_addressesUpSql,
|
||||||
"1700414564_add_wallet_connect_pairings_table.up.sql": _1700414564_add_wallet_connect_pairings_tableUpSql,
|
|
||||||
|
|
||||||
"1701101493_add_token_blocks_range.up.sql": _1701101493_add_token_blocks_rangeUpSql,
|
|
||||||
|
|
||||||
"1702467441_wallet_connect_sessions_instead_of_pairings.up.sql": _1702467441_wallet_connect_sessions_instead_of_pairingsUpSql,
|
|
||||||
|
|
||||||
"1702577524_add_community_collections_and_collectibles_images_cache.up.sql": _1702577524_add_community_collections_and_collectibles_images_cacheUpSql,
|
|
||||||
|
|
||||||
"1702867707_add_balance_to_collectibles_ownership_cache.up.sql": _1702867707_add_balance_to_collectibles_ownership_cacheUpSql,
|
|
||||||
|
|
||||||
"1703686612_add_color_to_saved_addresses.up.sql": _1703686612_add_color_to_saved_addressesUpSql,
|
|
||||||
|
|
||||||
"1704701942_remove_favourite_and_change_primary_key_for_saved_addresses.up.sql": _1704701942_remove_favourite_and_change_primary_key_for_saved_addressesUpSql,
|
"1704701942_remove_favourite_and_change_primary_key_for_saved_addresses.up.sql": _1704701942_remove_favourite_and_change_primary_key_for_saved_addressesUpSql,
|
||||||
|
"1704913491_add_type_and_tx_timestamp_to_collectibles_ownership_cache.up.sql": _1704913491_add_type_and_tx_timestamp_to_collectibles_ownership_cacheUpSql,
|
||||||
"1704913491_add_type_and_tx_timestamp_to_collectibles_ownership_cache.up.sql": _1704913491_add_type_and_tx_timestamp_to_collectibles_ownership_cacheUpSql,
|
"1705664490_add_balance_check_fields_blocks_ranges_sequential.up.sql": _1705664490_add_balance_check_fields_blocks_ranges_sequentialUpSql,
|
||||||
|
"1706531789_remove_gasfee-only-eth-transfers.up.sql": _1706531789_remove_gasfeeOnlyEthTransfersUpSql,
|
||||||
"1705664490_add_balance_check_fields_blocks_ranges_sequential.up.sql": _1705664490_add_balance_check_fields_blocks_ranges_sequentialUpSql,
|
"1707160323_add_contract_type_table.up.sql": _1707160323_add_contract_type_tableUpSql,
|
||||||
|
|
||||||
"1706531789_remove_gasfee-only-eth-transfers.up.sql": _1706531789_remove_gasfeeOnlyEthTransfersUpSql,
|
|
||||||
|
|
||||||
"doc.go": docGo,
|
"doc.go": docGo,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// AssetDebug is true if the assets were built with the debug flag enabled.
|
||||||
|
const AssetDebug = false
|
||||||
|
|
||||||
// AssetDir returns the file names below a certain
|
// AssetDir returns the file names below a certain
|
||||||
// directory embedded in the file by go-bindata.
|
// directory embedded in the file by go-bindata.
|
||||||
// For example if you run go-bindata on data/... and data contains the
|
// For example if you run go-bindata on data/... and data contains the
|
||||||
// following hierarchy:
|
// following hierarchy:
|
||||||
// data/
|
//
|
||||||
// foo.txt
|
// data/
|
||||||
// img/
|
// foo.txt
|
||||||
// a.png
|
// img/
|
||||||
// b.png
|
// a.png
|
||||||
|
// b.png
|
||||||
|
//
|
||||||
// then AssetDir("data") would return []string{"foo.txt", "img"},
|
// then AssetDir("data") would return []string{"foo.txt", "img"},
|
||||||
// AssetDir("data/img") would return []string{"a.png", "b.png"},
|
// AssetDir("data/img") would return []string{"a.png", "b.png"},
|
||||||
// AssetDir("foo.txt") and AssetDir("notexist") would return an error, and
|
// AssetDir("foo.txt") and AssetDir("notexist") would return an error, and
|
||||||
|
@ -707,28 +712,29 @@ type bintree struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
var _bintree = &bintree{nil, map[string]*bintree{
|
var _bintree = &bintree{nil, map[string]*bintree{
|
||||||
"1691753758_initial.up.sql": &bintree{_1691753758_initialUpSql, map[string]*bintree{}},
|
"1691753758_initial.up.sql": {_1691753758_initialUpSql, map[string]*bintree{}},
|
||||||
"1692701329_add_collectibles_and_collections_data_cache.up.sql": &bintree{_1692701329_add_collectibles_and_collections_data_cacheUpSql, map[string]*bintree{}},
|
"1692701329_add_collectibles_and_collections_data_cache.up.sql": {_1692701329_add_collectibles_and_collections_data_cacheUpSql, map[string]*bintree{}},
|
||||||
"1692701339_add_scope_to_pending.up.sql": &bintree{_1692701339_add_scope_to_pendingUpSql, map[string]*bintree{}},
|
"1692701339_add_scope_to_pending.up.sql": {_1692701339_add_scope_to_pendingUpSql, map[string]*bintree{}},
|
||||||
"1694540071_add_collectibles_ownership_update_timestamp.up.sql": &bintree{_1694540071_add_collectibles_ownership_update_timestampUpSql, map[string]*bintree{}},
|
"1694540071_add_collectibles_ownership_update_timestamp.up.sql": {_1694540071_add_collectibles_ownership_update_timestampUpSql, map[string]*bintree{}},
|
||||||
"1694692748_add_raw_balance_to_token_balances.up.sql": &bintree{_1694692748_add_raw_balance_to_token_balancesUpSql, map[string]*bintree{}},
|
"1694692748_add_raw_balance_to_token_balances.up.sql": {_1694692748_add_raw_balance_to_token_balancesUpSql, map[string]*bintree{}},
|
||||||
"1695133989_add_community_id_to_collectibles_and_collections_data_cache.up.sql": &bintree{_1695133989_add_community_id_to_collectibles_and_collections_data_cacheUpSql, map[string]*bintree{}},
|
"1695133989_add_community_id_to_collectibles_and_collections_data_cache.up.sql": {_1695133989_add_community_id_to_collectibles_and_collections_data_cacheUpSql, map[string]*bintree{}},
|
||||||
"1695932536_balance_history_v2.up.sql": &bintree{_1695932536_balance_history_v2UpSql, map[string]*bintree{}},
|
"1695932536_balance_history_v2.up.sql": {_1695932536_balance_history_v2UpSql, map[string]*bintree{}},
|
||||||
"1696853635_input_data.up.sql": &bintree{_1696853635_input_dataUpSql, map[string]*bintree{}},
|
"1696853635_input_data.up.sql": {_1696853635_input_dataUpSql, map[string]*bintree{}},
|
||||||
"1698117918_add_community_id_to_tokens.up.sql": &bintree{_1698117918_add_community_id_to_tokensUpSql, map[string]*bintree{}},
|
"1698117918_add_community_id_to_tokens.up.sql": {_1698117918_add_community_id_to_tokensUpSql, map[string]*bintree{}},
|
||||||
"1698257443_add_community_metadata_to_wallet_db.up.sql": &bintree{_1698257443_add_community_metadata_to_wallet_dbUpSql, map[string]*bintree{}},
|
"1698257443_add_community_metadata_to_wallet_db.up.sql": {_1698257443_add_community_metadata_to_wallet_dbUpSql, map[string]*bintree{}},
|
||||||
"1699987075_add_timestamp_and_state_to_community_data_cache.up.sql": &bintree{_1699987075_add_timestamp_and_state_to_community_data_cacheUpSql, map[string]*bintree{}},
|
"1699987075_add_timestamp_and_state_to_community_data_cache.up.sql": {_1699987075_add_timestamp_and_state_to_community_data_cacheUpSql, map[string]*bintree{}},
|
||||||
"1700414564_add_wallet_connect_pairings_table.up.sql": &bintree{_1700414564_add_wallet_connect_pairings_tableUpSql, map[string]*bintree{}},
|
"1700414564_add_wallet_connect_pairings_table.up.sql": {_1700414564_add_wallet_connect_pairings_tableUpSql, map[string]*bintree{}},
|
||||||
"1701101493_add_token_blocks_range.up.sql": &bintree{_1701101493_add_token_blocks_rangeUpSql, map[string]*bintree{}},
|
"1701101493_add_token_blocks_range.up.sql": {_1701101493_add_token_blocks_rangeUpSql, map[string]*bintree{}},
|
||||||
"1702467441_wallet_connect_sessions_instead_of_pairings.up.sql": &bintree{_1702467441_wallet_connect_sessions_instead_of_pairingsUpSql, map[string]*bintree{}},
|
"1702467441_wallet_connect_sessions_instead_of_pairings.up.sql": {_1702467441_wallet_connect_sessions_instead_of_pairingsUpSql, map[string]*bintree{}},
|
||||||
"1702577524_add_community_collections_and_collectibles_images_cache.up.sql": &bintree{_1702577524_add_community_collections_and_collectibles_images_cacheUpSql, map[string]*bintree{}},
|
"1702577524_add_community_collections_and_collectibles_images_cache.up.sql": {_1702577524_add_community_collections_and_collectibles_images_cacheUpSql, map[string]*bintree{}},
|
||||||
"1702867707_add_balance_to_collectibles_ownership_cache.up.sql": &bintree{_1702867707_add_balance_to_collectibles_ownership_cacheUpSql, map[string]*bintree{}},
|
"1702867707_add_balance_to_collectibles_ownership_cache.up.sql": {_1702867707_add_balance_to_collectibles_ownership_cacheUpSql, map[string]*bintree{}},
|
||||||
"1703686612_add_color_to_saved_addresses.up.sql": &bintree{_1703686612_add_color_to_saved_addressesUpSql, map[string]*bintree{}},
|
"1703686612_add_color_to_saved_addresses.up.sql": {_1703686612_add_color_to_saved_addressesUpSql, map[string]*bintree{}},
|
||||||
"1704701942_remove_favourite_and_change_primary_key_for_saved_addresses.up.sql": &bintree{_1704701942_remove_favourite_and_change_primary_key_for_saved_addressesUpSql, map[string]*bintree{}},
|
"1704701942_remove_favourite_and_change_primary_key_for_saved_addresses.up.sql": {_1704701942_remove_favourite_and_change_primary_key_for_saved_addressesUpSql, map[string]*bintree{}},
|
||||||
"1704913491_add_type_and_tx_timestamp_to_collectibles_ownership_cache.up.sql": &bintree{_1704913491_add_type_and_tx_timestamp_to_collectibles_ownership_cacheUpSql, map[string]*bintree{}},
|
"1704913491_add_type_and_tx_timestamp_to_collectibles_ownership_cache.up.sql": {_1704913491_add_type_and_tx_timestamp_to_collectibles_ownership_cacheUpSql, map[string]*bintree{}},
|
||||||
"1705664490_add_balance_check_fields_blocks_ranges_sequential.up.sql": &bintree{_1705664490_add_balance_check_fields_blocks_ranges_sequentialUpSql, map[string]*bintree{}},
|
"1705664490_add_balance_check_fields_blocks_ranges_sequential.up.sql": {_1705664490_add_balance_check_fields_blocks_ranges_sequentialUpSql, map[string]*bintree{}},
|
||||||
"1706531789_remove_gasfee-only-eth-transfers.up.sql": &bintree{_1706531789_remove_gasfeeOnlyEthTransfersUpSql, map[string]*bintree{}},
|
"1706531789_remove_gasfee-only-eth-transfers.up.sql": {_1706531789_remove_gasfeeOnlyEthTransfersUpSql, map[string]*bintree{}},
|
||||||
"doc.go": &bintree{docGo, map[string]*bintree{}},
|
"1707160323_add_contract_type_table.up.sql": {_1707160323_add_contract_type_tableUpSql, map[string]*bintree{}},
|
||||||
|
"doc.go": {docGo, map[string]*bintree{}},
|
||||||
}}
|
}}
|
||||||
|
|
||||||
// RestoreAsset restores an asset under the given directory.
|
// RestoreAsset restores an asset under the given directory.
|
||||||
|
@ -745,7 +751,7 @@ func RestoreAsset(dir, name string) error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
err = ioutil.WriteFile(_filePath(dir, name), data, info.Mode())
|
err = os.WriteFile(_filePath(dir, name), data, info.Mode())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
CREATE TABLE IF NOT EXISTS contract_type_cache (
|
||||||
|
chain_id UNSIGNED BIGINT NOT NULL,
|
||||||
|
contract_address VARCHAR NOT NULL,
|
||||||
|
contract_type INTEGER NOT NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE UNIQUE INDEX IF NOT EXISTS contract_type_identify_entry ON contract_type_cache (chain_id, contract_address);
|
Loading…
Reference in New Issue