Skip to content

Commit 028f2f1

Browse files
add marketplace functions
1 parent 6224152 commit 028f2f1

File tree

6 files changed

+294
-19
lines changed

6 files changed

+294
-19
lines changed

Assets/SDKTest.cs

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using UnityEngine;
22
using Thirdweb;
33
using TMPro;
4+
using System.Collections.Generic;
45

56
public class SDKTest : MonoBehaviour
67
{
@@ -30,12 +31,20 @@ public async void GetERC721()
3031
{
3132
var contract = sdk.GetContract("0x2e01763fA0e15e07294D74B63cE4b526B321E389"); // NFT Drop
3233
Debug.Log("Button clicked");
33-
count++;
34-
resultText.text = "Fetching Token: " + count;
35-
NFT result = await contract.ERC721.Get(count.ToString());
36-
Debug.Log("name: " + result.metadata.name);
37-
Debug.Log("owner: " + result.owner);
38-
resultText.text = result.metadata.name;
34+
// fetch single NFT
35+
// count++;
36+
// resultText.text = "Fetching Token: " + count;
37+
// NFT result = await contract.ERC721.Get(count.ToString());
38+
// Debug.Log("name: " + result.metadata.name);
39+
// Debug.Log("owner: " + result.owner);
40+
// resultText.text = result.metadata.name;
41+
42+
// fetch all NFTs
43+
resultText.text = "Fetching all NFTs";
44+
List<NFT> result = await contract.ERC721.GetAll();
45+
resultText.text = "Fetched " + result.Count + " NFTs";
46+
47+
// custom function call
3948
// int supply = await contract.ERC721.TotalClaimedSupply();
4049
// fetchButton.text = supply.ToString();
4150
// string uri = await contract.Read<string>("tokenURI", count);

Assets/Thirdweb/Scripts/ERC1155.cs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using System.Collections.Generic;
23
using System.Threading.Tasks;
34

45
namespace Thirdweb
@@ -26,19 +27,19 @@ public async Task<NFT> Get(string tokenId)
2627
return await Bridge.InvokeRoute<NFT>(getRoute("get"), Utils.ToJsonStringArray(tokenId));
2728
}
2829

29-
public async Task<NFT[]> GetAll()
30+
public async Task<List<NFT>> GetAll()
3031
{
31-
return await Bridge.InvokeRoute<NFT[]>(getRoute("getAll"), new string[] { });
32+
return await Bridge.InvokeRoute<List<NFT>>(getRoute("getAll"), new string[] { });
3233
}
3334

34-
public async Task<NFT[]> GetOwned()
35+
public async Task<List<NFT>> GetOwned()
3536
{
36-
return await Bridge.InvokeRoute<NFT[]>(getRoute("getOwned"), new string[] { });
37+
return await Bridge.InvokeRoute<List<NFT>>(getRoute("getOwned"), new string[] { });
3738
}
3839

39-
public async Task<NFT[]> GetOwned(string address)
40+
public async Task<List<NFT>> GetOwned(string address)
4041
{
41-
return await Bridge.InvokeRoute<NFT[]>(getRoute("getOwned"), Utils.ToJsonStringArray(address));
42+
return await Bridge.InvokeRoute<List<NFT>>(getRoute("getOwned"), Utils.ToJsonStringArray(address));
4243
}
4344

4445
public async Task<string> Balance(string tokenId)

Assets/Thirdweb/Scripts/ERC721.cs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using System.Collections.Generic;
23
using System.Threading.Tasks;
34

45
namespace Thirdweb
@@ -26,19 +27,19 @@ public async Task<NFT> Get(string tokenId)
2627
return await Bridge.InvokeRoute<NFT>(getRoute("get"), Utils.ToJsonStringArray(tokenId));
2728
}
2829

29-
public async Task<NFT[]> GetAll()
30+
public async Task<List<NFT>> GetAll()
3031
{
31-
return await Bridge.InvokeRoute<NFT[]>(getRoute("getAll"), new string[] { });
32+
return await Bridge.InvokeRoute<List<NFT>>(getRoute("getAll"), new string[] { });
3233
}
3334

34-
public async Task<NFT[]> GetOwned()
35+
public async Task<List<NFT>> GetOwned()
3536
{
36-
return await Bridge.InvokeRoute<NFT[]>(getRoute("getOwned"), new string[] { });
37+
return await Bridge.InvokeRoute<List<NFT>>(getRoute("getOwned"), new string[] { });
3738
}
3839

39-
public async Task<NFT[]> GetOwned(string address)
40+
public async Task<List<NFT>> GetOwned(string address)
4041
{
41-
return await Bridge.InvokeRoute<NFT[]>(getRoute("getOwned"), Utils.ToJsonStringArray(address));
42+
return await Bridge.InvokeRoute<List<NFT>>(getRoute("getOwned"), Utils.ToJsonStringArray(address));
4243
}
4344

4445
public async Task<string> OwnerOf(string tokenId)
Lines changed: 158 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,158 @@
1+
using System.Collections.Generic;
2+
using System.Threading.Tasks;
3+
4+
namespace Thirdweb
5+
{
6+
/// <summary>
7+
/// Interact with a Marketplace contract.
8+
/// </summary>
9+
public class Marketplace
10+
{
11+
public string chain;
12+
public string address;
13+
public MarketplaceDirect direct;
14+
public MarketplaceAuction auction;
15+
16+
public Marketplace(string chain, string address)
17+
{
18+
this.chain = chain;
19+
this.address = address;
20+
this.direct = new MarketplaceDirect(chain, address);
21+
this.auction = new MarketplaceAuction(chain, address);
22+
}
23+
24+
/// READ FUNCTIONS
25+
26+
public async Task<Listing> GetListing(string listingId)
27+
{
28+
return await Bridge.InvokeRoute<Listing>(getRoute("getListing"), Utils.ToJsonStringArray(listingId));
29+
}
30+
31+
public async Task<List<Listing>> GetAllListings(MarketplaceFilter filter = null)
32+
{
33+
return await Bridge.InvokeRoute<List<Listing>>(getRoute("getAllListings"), Utils.ToJsonStringArray(filter));
34+
}
35+
36+
public async Task<List<Listing>> GetActiveListings(MarketplaceFilter filter = null)
37+
{
38+
return await Bridge.InvokeRoute<List<Listing>>(getRoute("getActiveListings"), Utils.ToJsonStringArray(filter));
39+
}
40+
41+
public async Task<List<Offer>> GetOffers(string listingId)
42+
{
43+
return await Bridge.InvokeRoute<List<Offer>>(getRoute("getOffers"), Utils.ToJsonStringArray(listingId));
44+
}
45+
46+
/// WRITE FUNCTIONS
47+
48+
public async Task<TransactionResult> BuyListing(string listingId, int? quantityDesired = null, string receiverAddress = null)
49+
{
50+
return await Bridge.InvokeRoute<TransactionResult>(getRoute("buyoutListing"), Utils.ToJsonStringArray(listingId, quantityDesired, receiverAddress));
51+
}
52+
53+
public async Task<TransactionResult> MakeOffer(string listingId, string pricePerToken, int? quantity = null)
54+
{
55+
return await Bridge.InvokeRoute<TransactionResult>(getRoute("makeOffer"), Utils.ToJsonStringArray(listingId, pricePerToken, quantity));
56+
}
57+
58+
/// PRIVATE
59+
60+
private string getRoute(string functionPath) {
61+
return this.address + ".marketplace." + functionPath;
62+
}
63+
}
64+
65+
// DIRECT
66+
67+
public class MarketplaceDirect {
68+
public string chain;
69+
public string address;
70+
71+
public MarketplaceDirect(string chain, string address)
72+
{
73+
this.chain = chain;
74+
this.address = address;
75+
}
76+
77+
public async Task<DirectListing> GetListing(string listingId)
78+
{
79+
return await Bridge.InvokeRoute<DirectListing>(getRoute("getListing"), Utils.ToJsonStringArray(listingId));
80+
}
81+
82+
public async Task<Offer> GetActiveOffer(string listingId, string address)
83+
{
84+
return await Bridge.InvokeRoute<Offer>(getRoute("getActiveOffer"), Utils.ToJsonStringArray(listingId));
85+
}
86+
87+
public async Task<TransactionResult> CreateListing(NewDirectListing listing)
88+
{
89+
return await Bridge.InvokeRoute<TransactionResult>(getRoute("createListing"), Utils.ToJsonStringArray(listing));
90+
}
91+
92+
public async Task<TransactionResult> AcceptOffer(NewDirectListing listing, string addressOfOfferor)
93+
{
94+
return await Bridge.InvokeRoute<TransactionResult>(getRoute("acceptOffer"), Utils.ToJsonStringArray(listing, addressOfOfferor));
95+
}
96+
97+
public async Task<TransactionResult> CancelListing(string listingId)
98+
{
99+
return await Bridge.InvokeRoute<TransactionResult>(getRoute("cancelListing"), Utils.ToJsonStringArray(listingId));
100+
}
101+
102+
private string getRoute(string functionPath) {
103+
return this.address + ".marketplace.direct." + functionPath;
104+
}
105+
}
106+
107+
// AUCTION
108+
109+
public class MarketplaceAuction {
110+
public string chain;
111+
public string address;
112+
113+
public MarketplaceAuction(string chain, string address)
114+
{
115+
this.chain = chain;
116+
this.address = address;
117+
}
118+
119+
public async Task<AuctionListing> GetListing(string listingId)
120+
{
121+
return await Bridge.InvokeRoute<AuctionListing>(getRoute("getListing"), Utils.ToJsonStringArray(listingId));
122+
}
123+
124+
public async Task<Offer> GetWinningBid(string listingId)
125+
{
126+
return await Bridge.InvokeRoute<Offer>(getRoute("getWinningBid"), Utils.ToJsonStringArray(listingId));
127+
}
128+
129+
public async Task<CurrencyValue> GetMinimumNextBid(string listingId)
130+
{
131+
return await Bridge.InvokeRoute<CurrencyValue>(getRoute("getMinimumNextBid"), Utils.ToJsonStringArray(listingId));
132+
}
133+
134+
public async Task<string> GetWinner(string listingId)
135+
{
136+
return await Bridge.InvokeRoute<string>(getRoute("getWinner"), Utils.ToJsonStringArray(listingId));
137+
}
138+
139+
public async Task<TransactionResult> CreateListing(NewAuctionListing listing)
140+
{
141+
return await Bridge.InvokeRoute<TransactionResult>(getRoute("createListing"), Utils.ToJsonStringArray(listing));
142+
}
143+
144+
public async Task<TransactionResult> CancelListing(string listingId)
145+
{
146+
return await Bridge.InvokeRoute<TransactionResult>(getRoute("cancelListing"), Utils.ToJsonStringArray(listingId));
147+
}
148+
149+
public async Task<TransactionResult> ExecuteSale(string listingId)
150+
{
151+
return await Bridge.InvokeRoute<TransactionResult>(getRoute("executeSale"), Utils.ToJsonStringArray(listingId));
152+
}
153+
154+
private string getRoute(string functionPath) {
155+
return this.address + ".marketplace.auction." + functionPath;
156+
}
157+
}
158+
}

Assets/Thirdweb/Scripts/Marketplace.cs.meta

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Assets/Thirdweb/Scripts/Types.cs

Lines changed: 96 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
using System.Collections.Generic;
22

3-
namespace Thirdweb {
3+
namespace Thirdweb
4+
{
5+
6+
// NFTs
7+
48
[System.Serializable]
59
public struct NFTMetadata
610
{
@@ -30,6 +34,8 @@ public struct NFT
3034
public int quantityOwned; // only for ERC1155.GetOwned()
3135
}
3236

37+
// Tokens
38+
3339
[System.Serializable]
3440
public struct Currency
3541
{
@@ -48,6 +54,95 @@ public struct CurrencyValue
4854
public string displayValue;
4955
}
5056

57+
// Marketplace
58+
59+
[System.Serializable]
60+
public class Listing {
61+
public string id;
62+
public string sellerAddress;
63+
public string assetContractAddress;
64+
public string tokenId;
65+
public NFTMetadata asset;
66+
public int quantity;
67+
public string currencyContractAddress;
68+
public string buyoutPrice;
69+
public CurrencyValue buyoutCurrencyValuePerToken;
70+
public int type;
71+
}
72+
73+
[System.Serializable]
74+
public class DirectListing : Listing
75+
{
76+
public string startTimeInSeconds;
77+
public string secondsUntilEnd;
78+
}
79+
80+
[System.Serializable]
81+
public class AuctionListing : Listing
82+
{
83+
public string startTimeInEpochSeconds;
84+
public string endTimeInEpochSeconds;
85+
public string reservePrice;
86+
public CurrencyValue reservePriceCurrencyValuePerToken;
87+
}
88+
89+
[System.Serializable]
90+
public abstract class NewListing {
91+
public string type;
92+
public string assetContractAddress;
93+
public string tokenId;
94+
public long startTimestamp;
95+
public int listingDurationInSeconds;
96+
public int quantity;
97+
public string currencyContractAddress;
98+
public string reservePricePerToken;
99+
public string buyoutPricePerToken;
100+
}
101+
102+
[System.Serializable]
103+
public class NewAuctionListing : NewListing {
104+
public new string reservePricePerToken;
105+
106+
public NewAuctionListing() {
107+
this.type = "NewAuctionListing";
108+
}
109+
}
110+
111+
[System.Serializable]
112+
public class NewDirectListing : NewListing {
113+
public NewDirectListing() {
114+
this.type = "NewDirectListing";
115+
}
116+
}
117+
118+
[System.Serializable]
119+
public struct Offer
120+
{
121+
public string listingId;
122+
public string buyerAddress;
123+
public int quantityDesired;
124+
public string pricePerToken;
125+
public CurrencyValue currencyValue;
126+
public string currencyContractAddress;
127+
}
128+
129+
[System.Serializable]
130+
public class QueryAllParams
131+
{
132+
public int start;
133+
public int count;
134+
}
135+
136+
[System.Serializable]
137+
public class MarketplaceFilter: QueryAllParams
138+
{
139+
public string seller;
140+
public string tokenContract;
141+
public string tokenId;
142+
}
143+
144+
// Transactions
145+
51146
[System.Serializable]
52147
public struct Receipt
53148
{

0 commit comments

Comments
 (0)