@@ -60,6 +60,9 @@ public static async Task<TransactionReceipt> ThirdwebWriteRawResult<TWFunction>(
60
60
string relayerUrl = ThirdwebManager . Instance . SDK . options . gasless . Value . openzeppelin ? . relayerUrl ;
61
61
string relayerForwarderAddress = ThirdwebManager . Instance . SDK . options . gasless . Value . openzeppelin ? . relayerForwarderAddress ;
62
62
63
+ ContractBuilder b = new ContractBuilder ( functionMessage . GetType ( ) , contractAddress ) ;
64
+ var f = b . GetFunctionBuilder < TWFunction > ( ) ;
65
+
63
66
var request = new MinimalForwarder . ForwardRequest ( )
64
67
{
65
68
From = functionMessage . FromAddress ,
@@ -68,32 +71,34 @@ public static async Task<TransactionReceipt> ThirdwebWriteRawResult<TWFunction>(
68
71
Gas = functionMessage . Gas . Value ,
69
72
Nonce = (
70
73
await ThirdwebRead < MinimalForwarder . GetNonceFunction , MinimalForwarder . GetNonceOutputDTO > (
71
- "0x5001A14CA6163143316a7C614e30e6041033Ac20" ,
74
+ relayerForwarderAddress ,
72
75
new MinimalForwarder . GetNonceFunction ( ) { From = functionMessage . FromAddress }
73
76
)
74
77
) . ReturnValue1 ,
75
- Data = functionMessage . GetCallData ( )
78
+ Data = f . GetDataAsBytes ( functionMessage )
76
79
} ;
77
80
78
81
var signature = await EIP712 . GenerateSignature_MinimalForwarder ( "GSNv2 Forwarder" , "0.0.1" , ThirdwebManager . Instance . SDK . nativeSession . lastChainId , relayerForwarderAddress , request ) ;
79
82
80
83
var postData = new RelayerRequest ( request , signature , relayerForwarderAddress ) ;
81
84
82
85
string txHash = null ;
83
- using ( UnityWebRequest req = UnityWebRequest . Post ( relayerUrl , JsonConvert . SerializeObject ( postData ) ) )
84
- {
85
- await req . SendWebRequest ( ) ;
86
86
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 ;
97
102
}
98
103
99
104
return await ThirdwebManager . Instance . SDK . nativeSession . web3 . TransactionReceiptPolling . PollForReceiptAsync ( txHash ) ;
@@ -104,6 +109,7 @@ public static async Task<TransactionReceipt> ThirdwebWriteRawResult<TWFunction>(
104
109
}
105
110
}
106
111
112
+ [ System . Serializable ]
107
113
public struct RelayerRequest
108
114
{
109
115
public MinimalForwarder . ForwardRequest request ;
0 commit comments