1+ using System ;
12using System . Threading . Tasks ;
23
34namespace Thirdweb
@@ -9,15 +10,17 @@ public class ERC721
910 {
1011 public string chain ;
1112 public string address ;
13+ public ERC721Signature signature ;
14+
1215 public ERC721 ( string chain , string address )
1316 {
1417 this . chain = chain ;
1518 this . address = address ;
19+ this . signature = new ERC721Signature ( chain , address ) ;
1620 }
1721
1822 /// READ FUNCTIONS
1923
20-
2124 public async Task < NFT > Get ( string tokenId )
2225 {
2326 return await Bridge . InvokeRoute < NFT > ( getRoute ( "get" ) , new string [ ] { tokenId } ) ;
@@ -105,8 +108,85 @@ public async Task<TransactionResult> MintTo(string address, NFTMetadata nft)
105108 return await Bridge . InvokeRoute < TransactionResult > ( getRoute ( "mintTo" ) , Utils . ToJsonStringArray ( address , nft ) ) ;
106109 }
107110
111+ public async Task < TransactionResult > GenerateSignature ( NFTMetadata nft )
112+ {
113+ return await Bridge . InvokeRoute < TransactionResult > ( getRoute ( "signature.generate" ) , Utils . ToJsonStringArray ( nft ) ) ;
114+ }
115+
116+ /// PRIVATE
117+
108118 private string getRoute ( string functionPath ) {
109119 return this . address + ".erc721." + functionPath ;
110120 }
111121 }
122+
123+ [ System . Serializable ]
124+ #nullable enable
125+ public class ERC721MintPayload
126+ {
127+ public string to ;
128+ public string price ;
129+ public string currencyAddress ;
130+ public string primarySaleRecipient ;
131+ public string royaltyRecipient ;
132+ public int royaltyBps ;
133+ public int quantity ;
134+ public NFTMetadata ? metadata ;
135+ public string uid ;
136+ // TODO implement these, needs JS bridging support
137+ public DateTime ? mintStartTime ;
138+ public DateTime ? mintEndTime ;
139+
140+ public ERC721MintPayload ( ) {
141+ this . to = Utils . AddressZero ;
142+ this . price = "0" ;
143+ this . currencyAddress = Utils . AddressZero ;
144+ this . primarySaleRecipient = Utils . AddressZero ;
145+ this . royaltyRecipient = Utils . AddressZero ;
146+ this . royaltyBps = 0 ;
147+ this . quantity = 1 ;
148+ this . metadata = null ;
149+ this . mintEndTime = null ;
150+ this . mintEndTime = null ;
151+ this . uid = Utils . ToBytes32HexString ( Guid . NewGuid ( ) . ToByteArray ( ) ) ;
152+ }
153+ }
154+
155+ [ System . Serializable ]
156+ public struct ERC721SignedPayload
157+ {
158+ public string signature ;
159+ public ERC721MintPayload payload ;
160+ }
161+
162+ public class ERC721Signature
163+ {
164+ public string chain ;
165+ public string address ;
166+
167+ public ERC721Signature ( string chain , string address )
168+ {
169+ this . chain = chain ;
170+ this . address = address ;
171+ }
172+
173+ public async Task < ERC721SignedPayload > Generate ( ERC721MintPayload payloadToSign )
174+ {
175+ return await Bridge . InvokeRoute < ERC721SignedPayload > ( getRoute ( "generate" ) , Utils . ToJsonStringArray ( payloadToSign ) ) ;
176+ }
177+
178+ public async Task < bool > Verify ( ERC721SignedPayload signedPayload )
179+ {
180+ return await Bridge . InvokeRoute < bool > ( getRoute ( "verify" ) , Utils . ToJsonStringArray ( signedPayload ) ) ;
181+ }
182+
183+ public async Task < TransactionResult > Mint ( ERC721SignedPayload signedPayload )
184+ {
185+ return await Bridge . InvokeRoute < TransactionResult > ( getRoute ( "mint" ) , Utils . ToJsonStringArray ( signedPayload ) ) ;
186+ }
187+
188+ private string getRoute ( string functionPath ) {
189+ return this . address + ".erc721.signature." + functionPath ;
190+ }
191+ }
112192}
0 commit comments