Skip to content
This repository has been archived by the owner on May 3, 2024. It is now read-only.

Updates #103

Merged
merged 2 commits into from
Dec 7, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions thirdweb/common.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,9 @@ func fetchTokenMetadata(tokenId int, uri string, storage storage) (*NFTMetadata,

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

Expand All @@ -55,7 +57,9 @@ func uploadOrExtractUris(metadatas []*NFTMetadataInput, storage storage) ([]stri
}

dataToUpload := []map[string]interface{}{}
mapstructure.Decode(data, &dataToUpload)
if err := mapstructure.Decode(data, &dataToUpload); err != nil {
return nil, err
}

baseUriWithUris, err := storage.UploadBatch(dataToUpload, 0, "", "")
if err != nil {
Expand Down
101 changes: 51 additions & 50 deletions thirdweb/contract_events.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,22 +18,21 @@ import (
// This interface provides a way to query past events or listen for future events on any contract.
// It's currently support on all pre-built and custom contracts!
//
//
// Example
//
// // First get an instance of your contract
// contract, _ := sdk.GetContract("0x...");
// // First get an instance of your contract
// contract, _ := sdk.GetContract("0x...");
//
// // Now, get all Transfer events from a specific block range
// contract.Events.GetEvents("Transfer", thirdweb.EventQueryOptions{
// FromBlock: 100000000,
// ToBlock: 100000001,
// })
// // Now, get all Transfer events from a specific block range
// contract.Events.GetEvents("Transfer", thirdweb.EventQueryOptions{
// FromBlock: 100000000,
// ToBlock: 100000001,
// })
//
// // And setup a listener to listen for future Transfer events
// contract.Events.AddEventListener("Transfer", func (event thirdweb.ContractEvent) {
// fmt.Printf("%#v\n", event)
// })
// // And setup a listener to listen for future Transfer events
// contract.Events.AddEventListener("Transfer", func (event thirdweb.ContractEvent) {
// fmt.Printf("%#v\n", event)
// })
type ContractEvents struct {
abi *abi.ABI
contract *bind.BoundContract
Expand All @@ -53,8 +52,8 @@ type ContractEvent struct {
}

type EventSubscription struct {
Err func () <- chan error
Unsubscribe func ()
Err func() <-chan error
Unsubscribe func()
}

func newContractEvents(contractAbi string, helper *contractHelper) (*ContractEvents, error) {
Expand Down Expand Up @@ -82,17 +81,17 @@ func newContractEvents(contractAbi string, helper *contractHelper) (*ContractEve
//
// Example
//
// // Define a listener function to be called whenever a new Transfer event is received
// listener := func (event thirdweb.ContractEvent) {
// fmt.Printf("%#v\n", event)
// }
// // Define a listener function to be called whenever a new Transfer event is received
// listener := func (event thirdweb.ContractEvent) {
// fmt.Printf("%#v\n", event)
// }
//
// // Add a new listener for the Transfer event
// subscription := contract.Events.AddEventListener(context.Background(), "Transfer", listener)
// // Add a new listener for the Transfer event
// subscription := contract.Events.AddEventListener(context.Background(), "Transfer", listener)
//
// // Unsubscribe from the Transfer event at some time in the future, closing the listener
// subscription.Unsubscribe()
func (events *ContractEvents) AddEventListener(ctx context.Context, eventName string, listener func (event ContractEvent)) (EventSubscription) {
// // Unsubscribe from the Transfer event at some time in the future, closing the listener
// subscription.Unsubscribe()
func (events *ContractEvents) AddEventListener(ctx context.Context, eventName string, listener func(event ContractEvent)) EventSubscription {
ticker := time.NewTicker(2 * time.Second)
done := make(chan bool)
errors := make(chan error)
Expand All @@ -106,9 +105,9 @@ func (events *ContractEvents) AddEventListener(ctx context.Context, eventName st

for {
select {
case <- done:
case <-done:
return
case <- ticker.C:
case <-ticker.C:
currentBlockNumber, err := events.helper.GetProvider().BlockNumber(ctx)
if err != nil {
errors <- err
Expand All @@ -118,7 +117,7 @@ func (events *ContractEvents) AddEventListener(ctx context.Context, eventName st
if currentBlockNumber >= nextBlockToCheck {
recentEvents, err := events.GetEvents(ctx, eventName, EventQueryOptions{
FromBlock: nextBlockToCheck,
ToBlock: &currentBlockNumber,
ToBlock: &currentBlockNumber,
})
if err != nil {
errors <- err
Expand All @@ -136,10 +135,10 @@ func (events *ContractEvents) AddEventListener(ctx context.Context, eventName st
}()

subscription := EventSubscription{
Err: func () (<-chan error) {
Err: func() <-chan error {
return errors
},
Unsubscribe: func () {
Unsubscribe: func() {
done <- true
},
}
Expand All @@ -157,21 +156,21 @@ func (events *ContractEvents) AddEventListener(ctx context.Context, eventName st
//
// Example
//
// // First we define a filter to only get Transfer events where the "from" address is "0x..."
// // Note that you can only add filters for indexed parameters on events
// filters := map[string]interface{} {
// "from": common.HexToAddress("0x...")
// }
//
// // Now we can define the query options, including the block range and the filter
// queryOptions := thirdweb.EventQueryOptions{
// FromBlock: 100000000, // Defaults to block 0 if you don't specify this field
// ToBlock: 100000001, // Defaults to latest block if you don't specify this field
// Filters: filters,
// }
//
// // Now we can query for the Transfer events
// events, _ := contract.Events.GetEvents("Transfer", queryOptions)
// // First we define a filter to only get Transfer events where the "from" address is "0x..."
// // Note that you can only add filters for indexed parameters on events
// filters := map[string]interface{} {
// "from": common.HexToAddress("0x...")
// }
//
// // Now we can define the query options, including the block range and the filter
// queryOptions := thirdweb.EventQueryOptions{
// FromBlock: 100000000, // Defaults to block 0 if you don't specify this field
// ToBlock: 100000001, // Defaults to latest block if you don't specify this field
// Filters: filters,
// }
//
// // Now we can query for the Transfer events
// events, _ := contract.Events.GetEvents("Transfer", queryOptions)
func (events *ContractEvents) GetEvents(ctx context.Context, eventName string, options EventQueryOptions) ([]ContractEvent, error) {
eventSignature, ok := events.abi.Events[eventName]
if !ok {
Expand All @@ -188,12 +187,12 @@ func (events *ContractEvents) GetEvents(ctx context.Context, eventName string, o
// If a filter is provided, check if the type is correct
if reflect.TypeOf(value) != input.Type.GetType() {
return nil, fmt.Errorf(
"Filter for indexed input '%s' is of wrong type, expected type '%s'",
input.Name,
"Filter for indexed input '%s' is of wrong type, expected type '%s'",
input.Name,
input.Type.GetType().String(),
)
}

// If the type is correct, add the filter to the query
query = append(query, []interface{}{value})
} else {
Expand All @@ -203,7 +202,7 @@ func (events *ContractEvents) GetEvents(ctx context.Context, eventName string, o
}
}
}

topics, err := abi.MakeTopics(query...)
if err != nil {
return nil, err
Expand Down Expand Up @@ -238,8 +237,10 @@ func (events *ContractEvents) GetEvents(ctx context.Context, eventName string, o

func (events *ContractEvents) transformEvent(eventName string, log types.Log) (ContractEvent, error) {
parsedLog := map[string]interface{}{}
events.contract.UnpackLogIntoMap(parsedLog, eventName, log)
event := ContractEvent{ eventName, parsedLog, log }
if err := events.contract.UnpackLogIntoMap(parsedLog, eventName, log); err != nil {
return ContractEvent{}, err
}
event := ContractEvent{eventName, parsedLog, log}

return event, nil
}
}
12 changes: 6 additions & 6 deletions thirdweb/edition_drop.go
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,9 @@ func (drop *EditionDrop) CreateBatch(ctx context.Context, metadatas []*NFTMetada
data = append(data, metadata)
}
dataToUpload := []map[string]interface{}{}
mapstructure.Decode(data, &dataToUpload)
if err := mapstructure.Decode(data, &dataToUpload); err != nil {
return nil, err
}

batch, err := drop.storage.UploadBatch(
dataToUpload,
Expand Down Expand Up @@ -196,10 +198,10 @@ func (drop *EditionDrop) ClaimTo(ctx context.Context, destinationAddress string,
txOpts.Value = claimVerification.Value

proof := abi.IDrop1155AllowlistProof{
Proof: claimVerification.Proofs,
Proof: claimVerification.Proofs,
QuantityLimitPerWallet: claimVerification.MaxClaimable,
PricePerToken: claimVerification.Price,
Currency: common.HexToAddress(claimVerification.CurrencyAddress),
PricePerToken: claimVerification.Price,
Currency: common.HexToAddress(claimVerification.CurrencyAddress),
}

tx, err := drop.abi.Claim(
Expand All @@ -226,13 +228,11 @@ func (drop *EditionDrop) prepareClaim(ctx context.Context, tokenId int, quantity
return nil, err
}


merkleMetadata, err := drop.ClaimConditions.GetMerkleMetadata()
if err != nil {
return nil, err
}


claimVerification, err := prepareClaim(
ctx,
addressToClaim,
Expand Down
6 changes: 4 additions & 2 deletions thirdweb/erc1155_signature_minting.go
Original file line number Diff line number Diff line change
Expand Up @@ -59,12 +59,14 @@ func (signature *ERC1155SignatureMinting) Mint(ctx context.Context, signedPayloa
if err != nil {
return nil, err
}
setErc20Allowance(
if err := setErc20Allowance(
signature.helper,
big.NewInt(message.PricePerToken.Int64()).Mul(message.PricePerToken, message.Quantity),
message.Currency.String(),
txOpts,
)
); err != nil {
return nil, err
}

tx, err := signature.abi.MintWithSignature(txOpts, *message, signedPayload.Signature)
if err != nil {
Expand Down
6 changes: 4 additions & 2 deletions thirdweb/erc721_signature_minting.go
Original file line number Diff line number Diff line change
Expand Up @@ -59,12 +59,14 @@ func (signature *ERC721SignatureMinting) Mint(ctx context.Context, signedPayload
if err != nil {
return nil, err
}
setErc20Allowance(
if err := setErc20Allowance(
signature.helper,
message.Price,
message.Currency.String(),
txOpts,
)
); err != nil {
return nil, err
}

tx, err := signature.abi.MintWithSignature(txOpts, *message, signedPayload.Signature)
if err != nil {
Expand Down
Loading