@@ -60,6 +60,9 @@ public static async Task<TransactionReceipt> ThirdwebWriteRawResult<TWFunction>(
6060 string relayerUrl = ThirdwebManager . Instance . SDK . options . gasless . Value . openzeppelin ? . relayerUrl ;
6161 string relayerForwarderAddress = ThirdwebManager . Instance . SDK . options . gasless . Value . openzeppelin ? . relayerForwarderAddress ;
6262
63+ ContractBuilder b = new ContractBuilder ( functionMessage . GetType ( ) , contractAddress ) ;
64+ var f = b . GetFunctionBuilder < TWFunction > ( ) ;
65+
6366 var request = new MinimalForwarder . ForwardRequest ( )
6467 {
6568 From = functionMessage . FromAddress ,
@@ -68,32 +71,34 @@ public static async Task<TransactionReceipt> ThirdwebWriteRawResult<TWFunction>(
6871 Gas = functionMessage . Gas . Value ,
6972 Nonce = (
7073 await ThirdwebRead < MinimalForwarder . GetNonceFunction , MinimalForwarder . GetNonceOutputDTO > (
71- "0x5001A14CA6163143316a7C614e30e6041033Ac20" ,
74+ relayerForwarderAddress ,
7275 new MinimalForwarder . GetNonceFunction ( ) { From = functionMessage . FromAddress }
7376 )
7477 ) . ReturnValue1 ,
75- Data = functionMessage . GetCallData ( )
78+ Data = f . GetDataAsBytes ( functionMessage )
7679 } ;
7780
7881 var signature = await EIP712 . GenerateSignature_MinimalForwarder ( "GSNv2 Forwarder" , "0.0.1" , ThirdwebManager . Instance . SDK . nativeSession . lastChainId , relayerForwarderAddress , request ) ;
7982
8083 var postData = new RelayerRequest ( request , signature , relayerForwarderAddress ) ;
8184
8285 string txHash = null ;
83- using ( UnityWebRequest req = UnityWebRequest . Post ( relayerUrl , JsonConvert . SerializeObject ( postData ) ) )
84- {
85- await req . SendWebRequest ( ) ;
8686
87- if ( req . result != UnityWebRequest . Result . Success )
88- {
89- throw new UnityException (
90- $ "Forward Request Failed!\n Error: { req . downloadHandler . text } \n Relayer URL: { relayerUrl } \n Relayer Forwarder Address: { relayerForwarderAddress } \n Request: { request } \n Signature: { signature } \n Post Data: { postData } "
91- ) ;
92- }
93- else
94- {
95- txHash = req . downloadHandler . text ;
96- }
87+ var req = new UnityWebRequest ( relayerUrl , "POST" ) ;
88+ byte [ ] bodyRaw = System . Text . Encoding . UTF8 . GetBytes ( JsonConvert . SerializeObject ( postData ) ) ;
89+ req . uploadHandler = ( UploadHandler ) new UploadHandlerRaw ( bodyRaw ) ;
90+ req . downloadHandler = ( DownloadHandler ) new DownloadHandlerBuffer ( ) ;
91+ req . SetRequestHeader ( "Content-Type" , "application/json" ) ;
92+ await req . SendWebRequest ( ) ;
93+ if ( req . result != UnityWebRequest . Result . Success )
94+ {
95+ throw new UnityException (
96+ $ "Forward Request Failed!\n Error: { req . downloadHandler . text } \n Relayer URL: { relayerUrl } \n Relayer Forwarder Address: { relayerForwarderAddress } \n Request: { request } \n Signature: { signature } \n Post Data: { postData } "
97+ ) ;
98+ }
99+ else
100+ {
101+ txHash = req . downloadHandler . text ;
97102 }
98103
99104 return await ThirdwebManager . Instance . SDK . nativeSession . web3 . TransactionReceiptPolling . PollForReceiptAsync ( txHash ) ;
@@ -104,6 +109,7 @@ public static async Task<TransactionReceipt> ThirdwebWriteRawResult<TWFunction>(
104109 }
105110 }
106111
112+ [ System . Serializable ]
107113 public struct RelayerRequest
108114 {
109115 public MinimalForwarder . ForwardRequest request ;
0 commit comments