Skip to content

Commit

Permalink
ipfs related cleanups (thirdweb-dev#104) (thirdweb-dev#105)
Browse files Browse the repository at this point in the history
* Updates (thirdweb-dev#103)

* pass context in a few more places (thirdweb-dev#101)

* handle and return err (thirdweb-dev#102)

Co-authored-by: ricebin <ricebin@users.noreply.github.com>

* ipfs related cleanups
1. reuse httpclient when possible
2. pass context in more places
3. dont forget to check errors

Co-authored-by: Adam Majmudar <64697628+adam-maj@users.noreply.github.com>

Co-authored-by: ricebin <ricebin@users.noreply.github.com>
  • Loading branch information
adam-maj and ricebin authored Dec 9, 2022
1 parent e18eb09 commit 133295e
Show file tree
Hide file tree
Showing 22 changed files with 154 additions and 116 deletions.
3 changes: 2 additions & 1 deletion cmd/thirdweb/common.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (

"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/types"

"github.com/thirdweb-dev/go-sdk/v2/thirdweb"
)

Expand Down Expand Up @@ -171,7 +172,7 @@ func getCustom() (*thirdweb.SmartContract, error) {

log.Printf("Obtaining a Custom on chain %v, contract %v\n", chainRpcUrl, customContractAddress)

if contract, err := thirdwebSDK.GetContract(customContractAddress); err != nil {
if contract, err := thirdwebSDK.GetContract(context.Background(), customContractAddress); err != nil {
log.Println("Failed to create an Custom object")
return nil, err
} else {
Expand Down
2 changes: 1 addition & 1 deletion cmd/thirdweb/nft_drop_commands.go
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@ var nftDropClaimCmd = &cobra.Command{

awaitTx(tx.Hash())

unclaimed, err := nftDrop.TotalUnclaimedSupply()
unclaimed, err := nftDrop.TotalUnclaimedSupply(context.Background())
if err != nil {
panic(err)
}
Expand Down
19 changes: 15 additions & 4 deletions cmd/thirdweb/storage_commands.go
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
package main

import (
"context"
"fmt"
"log"
"os"

"github.com/mitchellh/mapstructure"
"github.com/spf13/cobra"

"github.com/thirdweb-dev/go-sdk/v2/thirdweb"
)

Expand Down Expand Up @@ -37,7 +39,7 @@ var storageUploadCmd = &cobra.Command{
},
}

uri, err := storage.Upload(assetToUpload, "", "")
uri, err := storage.Upload(context.Background(), assetToUpload, "", "")
if err != nil {
panic(err)
}
Expand Down Expand Up @@ -71,9 +73,12 @@ var storageUploadBatchCmd = &cobra.Command{
&thirdweb.NFTMetadataInput{Name: "Test NFT 3", Description: "Description 3"},
}
assetToUpload := []map[string]interface{}{}
err = mapstructure.Decode(asset, &assetToUpload)
if err := mapstructure.Decode(asset, &assetToUpload); err != nil {
panic(err)
}

uriWithBaseUris, err := storage.UploadBatch(
context.Background(),
assetToUpload,
0,
"",
Expand Down Expand Up @@ -106,8 +111,11 @@ var storageUploadImageCmd = &cobra.Command{
}
assetToUpload := map[string]interface{}{}
err = mapstructure.Decode(asset, &assetToUpload)
if err != nil {
panic(err)
}

uri, err := storage.Upload(assetToUpload, "", "")
uri, err := storage.Upload(context.Background(), assetToUpload, "", "")
if err != nil {
panic(err)
}
Expand All @@ -134,8 +142,11 @@ var storageUploadImageLinkCmd = &cobra.Command{
}
assetToUpload := map[string]interface{}{}
err = mapstructure.Decode(asset, &assetToUpload)
if err != nil {
panic(err)
}

uri, err := storage.Upload(assetToUpload, "", "")
uri, err := storage.Upload(context.Background(), assetToUpload, "", "")
if err != nil {
panic(err)
}
Expand Down
34 changes: 18 additions & 16 deletions thirdweb/common.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@ import (

// NFT

func fetchTokenMetadata(tokenId int, uri string, storage storage) (*NFTMetadata, error) {
if body, err := storage.Get(uri); err != nil {
func fetchTokenMetadata(ctx context.Context, tokenId int, uri string, storage storage) (*NFTMetadata, error) {
if body, err := storage.Get(ctx, uri); err != nil {
return nil, err
} else {
metadata := &NFTMetadata{
Expand All @@ -41,15 +41,15 @@ func fetchTokenMetadata(tokenId int, uri string, storage storage) (*NFTMetadata,
}
}

func uploadOrExtractUri(metadata *NFTMetadataInput, storage storage) (string, error) {
func uploadOrExtractUri(ctx context.Context, metadata *NFTMetadataInput, storage storage) (string, error) {
metadataToUpload := map[string]interface{}{}
if err := mapstructure.Decode(metadata, &metadataToUpload); err != nil {
return "", err
}
return storage.Upload(metadataToUpload, "", "")
return storage.Upload(ctx, metadataToUpload, "", "")
}

func uploadOrExtractUris(metadatas []*NFTMetadataInput, storage storage) ([]string, error) {
func uploadOrExtractUris(ctx context.Context, metadatas []*NFTMetadataInput, storage storage) ([]string, error) {
// Why is this necessary?
data := []interface{}{}
for _, metadata := range metadatas {
Expand All @@ -61,7 +61,7 @@ func uploadOrExtractUris(metadatas []*NFTMetadataInput, storage storage) ([]stri
return nil, err
}

baseUriWithUris, err := storage.UploadBatch(dataToUpload, 0, "", "")
baseUriWithUris, err := storage.UploadBatch(ctx, dataToUpload, 0, "", "")
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -300,7 +300,9 @@ func approveErc20Allowance(
return err
}

contractToApprove.AwaitTx(tx.Hash())
if _, err := contractToApprove.AwaitTx(tx.Hash()); err != nil {
return err
}
}

return nil
Expand Down Expand Up @@ -443,7 +445,7 @@ func fetchSnapshotEntryForAddress(

snapshotUri, exists := (*merkleMetadata)[merkleRoot]
if exists {
body, err := storage.Get(snapshotUri)
body, err := storage.Get(ctx, snapshotUri)
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -605,22 +607,22 @@ func isTokenApprovedForTransfer(

// CUSTOM CONTRACTS

func fetchContractMetadataFromAddress(address string, provider *ethclient.Client, storage storage) (string, error) {
metadataUri, err := resolveContractUriFromAddress(address, provider)
func fetchContractMetadataFromAddress(ctx context.Context, address string, provider *ethclient.Client, storage storage) (string, error) {
metadataUri, err := resolveContractUriFromAddress(ctx, address, provider)
if err != nil {
return "", err
}

metadata, err := fetchContractMetadata(metadataUri, storage)
metadata, err := fetchContractMetadata(ctx, metadataUri, storage)
if err != nil {
return "", err
}

return metadata, nil
}

func resolveContractUriFromAddress(address string, provider *ethclient.Client) (string, error) {
bytecode, err := provider.CodeAt(context.Background(), common.HexToAddress(address), nil)
func resolveContractUriFromAddress(ctx context.Context, address string, provider *ethclient.Client) (string, error) {
bytecode, err := provider.CodeAt(ctx, common.HexToAddress(address), nil)
if err != nil {
return "", err
}
Expand All @@ -641,8 +643,8 @@ func extractIPFSHashFromBytecode(bytecode []byte) (string, error) {
return fmt.Sprintf("ipfs://%v", ipfsHash), nil
}

func fetchContractMetadata(uri string, storage storage) (string, error) {
body, err := storage.Get(uri)
func fetchContractMetadata(ctx context.Context, uri string, storage storage) (string, error) {
body, err := storage.Get(ctx, uri)
if err != nil {
return "", err
}
Expand Down Expand Up @@ -701,7 +703,7 @@ func fetchTokenMetadataForContract(
uri, err = contract.Uri(&bind.CallOpts{Context: ctx}, big.NewInt(int64(tokenId)))
}

return fetchTokenMetadata(tokenId, uri, storage)
return fetchTokenMetadata(ctx, tokenId, uri, storage)
}

func handleTokenApproval(
Expand Down
1 change: 1 addition & 0 deletions thirdweb/contract_deployer.go
Original file line number Diff line number Diff line change
Expand Up @@ -224,6 +224,7 @@ func (deployer *ContractDeployer) deployContract(ctx context.Context, contractTy
}

contractUri, err := deployer.storage.Upload(
ctx,
metadataToUpload,
deployer.helper.getAddress().String(),
deployer.helper.GetSignerAddress().String(),
Expand Down
7 changes: 4 additions & 3 deletions thirdweb/edition.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import (
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/ethclient"

"github.com/thirdweb-dev/go-sdk/v2/abi"
)

Expand All @@ -29,7 +30,7 @@ type Edition struct {
Helper *contractHelper
Signature *ERC1155SignatureMinting
Encoder *ContractEncoder
Events *ContractEvents
Events *ContractEvents
}

func newEdition(provider *ethclient.Client, address common.Address, privateKey string, storage storage) (*Edition, error) {
Expand Down Expand Up @@ -107,7 +108,7 @@ func (edition *Edition) Mint(ctx context.Context, metadataWithSupply *EditionMet
//
// tx, err := contract.MintTo(context.Background(), "{{wallet_address}}", metadataWithSupply)
func (edition *Edition) MintTo(ctx context.Context, address string, metadataWithSupply *EditionMetadataInput) (*types.Transaction, error) {
uri, err := uploadOrExtractUri(metadataWithSupply.Metadata, edition.storage)
uri, err := uploadOrExtractUri(ctx, metadataWithSupply.Metadata, edition.storage)
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -224,7 +225,7 @@ func (edition *Edition) MintBatchTo(ctx context.Context, to string, metadatasWit
supplies = append(supplies, metadataWithSupply.Supply)
}

uris, err := uploadOrExtractUris(metadatas, edition.storage)
uris, err := uploadOrExtractUris(ctx, metadatas, edition.storage)
if err != nil {
return nil, err
}
Expand Down
4 changes: 3 additions & 1 deletion thirdweb/edition_drop.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/ethclient"
"github.com/mitchellh/mapstructure"

"github.com/thirdweb-dev/go-sdk/v2/abi"
)

Expand Down Expand Up @@ -127,6 +128,7 @@ func (drop *EditionDrop) CreateBatch(ctx context.Context, metadatas []*NFTMetada
}

batch, err := drop.storage.UploadBatch(
ctx,
dataToUpload,
fileStartNumber,
contractAddress,
Expand Down Expand Up @@ -228,7 +230,7 @@ func (drop *EditionDrop) prepareClaim(ctx context.Context, tokenId int, quantity
return nil, err
}

merkleMetadata, err := drop.ClaimConditions.GetMerkleMetadata()
merkleMetadata, err := drop.ClaimConditions.GetMerkleMetadata(ctx)
if err != nil {
return nil, err
}
Expand Down
6 changes: 3 additions & 3 deletions thirdweb/edition_drop_claim_conditions.go
Original file line number Diff line number Diff line change
Expand Up @@ -126,13 +126,13 @@ func (claim *EditionDropClaimConditions) GetAll(ctx context.Context, tokenId int
return conditions, nil
}

func (claim *EditionDropClaimConditions) GetMerkleMetadata() (*map[string]string, error) {
uri, err := claim.abi.InternalContractURI(&bind.CallOpts{})
func (claim *EditionDropClaimConditions) GetMerkleMetadata(ctx context.Context) (*map[string]string, error) {
uri, err := claim.abi.InternalContractURI(&bind.CallOpts{Context: ctx})
if err != nil {
return nil, err
}

body, err := claim.storage.Get(uri)
body, err := claim.storage.Get(ctx, uri)
if err != nil {
return nil, err
}
Expand Down
3 changes: 2 additions & 1 deletion thirdweb/erc1155.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import (
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/ethclient"

"github.com/thirdweb-dev/go-sdk/v2/abi"
)

Expand Down Expand Up @@ -311,7 +312,7 @@ func (erc1155 *ERC1155) getTokenMetadata(ctx context.Context, tokenId int) (*NFT
tokenId,
}
} else {
if nft, err := fetchTokenMetadata(tokenId, uri, erc1155.storage); err != nil {
if nft, err := fetchTokenMetadata(ctx, tokenId, uri, erc1155.storage); err != nil {
return nil, err
} else {
return nft, nil
Expand Down
3 changes: 2 additions & 1 deletion thirdweb/erc1155_signature_minting.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import (
"github.com/ethereum/go-ethereum/ethclient"
signerTypes "github.com/ethereum/go-ethereum/signer/core/apitypes"
"github.com/google/uuid"

"github.com/thirdweb-dev/go-sdk/v2/abi"
)

Expand Down Expand Up @@ -346,7 +347,7 @@ func (signature *ERC1155SignatureMinting) GenerateBatchFromTokenIds(ctx context.
metadatas = append(metadatas, payload.Metadata)
}

uris, err := uploadOrExtractUris(metadatas, signature.storage)
uris, err := uploadOrExtractUris(ctx, metadatas, signature.storage)
if err != nil {
return nil, err
}
Expand Down
3 changes: 2 additions & 1 deletion thirdweb/erc721.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import (
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/ethclient"

"github.com/thirdweb-dev/go-sdk/v2/abi"
)

Expand Down Expand Up @@ -264,7 +265,7 @@ func (erc721 *ERC721) getTokenMetadata(ctx context.Context, tokenId int) (*NFTMe
}, big.NewInt(int64(tokenId))); err != nil {
return nil, err
} else {
if nft, err := fetchTokenMetadata(tokenId, uri, erc721.storage); err != nil {
if nft, err := fetchTokenMetadata(ctx, tokenId, uri, erc721.storage); err != nil {
return nil, err
} else {
return nft, nil
Expand Down
3 changes: 2 additions & 1 deletion thirdweb/erc721_signature_minting.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import (
"github.com/ethereum/go-ethereum/ethclient"
signerTypes "github.com/ethereum/go-ethereum/signer/core/apitypes"
"github.com/google/uuid"

"github.com/thirdweb-dev/go-sdk/v2/abi"
)

Expand Down Expand Up @@ -232,7 +233,7 @@ func (signature *ERC721SignatureMinting) GenerateBatch(ctx context.Context, payl
metadatas = append(metadatas, payload.Metadata)
}

uris, err := uploadOrExtractUris(metadatas, signature.storage)
uris, err := uploadOrExtractUris(ctx, metadatas, signature.storage)
if err != nil {
return nil, err
}
Expand Down
Loading

0 comments on commit 133295e

Please sign in to comment.