|
1 | 1 | using System; |
| 2 | +using System.Collections.Generic; |
2 | 3 | using System.Linq; |
3 | 4 | using System.Net.Http; |
4 | 5 | using System.Reflection; |
@@ -240,24 +241,45 @@ public Task<GetLedgerEntriesResponse> GetLedgerEntry(LedgerKey key) |
240 | 241 | /// </remarks> |
241 | 242 | /// </param> |
242 | 243 | /// <param name="resourceConfig">Contains configuration for how resources will be calculated when simulating transactions.</param> |
| 244 | + /// <param name="authMode">Explicitly allows users to opt in to non-root authorization in recording mode. |
| 245 | + /// <p>Leaving this field unset will default to <see cref="AuthMode.ENFORCE"/> if auth entries are present, |
| 246 | + /// <see cref="AuthMode.RECORD"/> otherwise.</p> |
| 247 | + /// </param> |
243 | 248 | /// <returns>A <see cref="SimulateTransactionResponse" /> object.</returns> |
244 | | - public Task<SimulateTransactionResponse> SimulateTransaction(Transaction transaction, uint? resourceConfig = null) |
| 249 | + public Task<SimulateTransactionResponse> SimulateTransaction( |
| 250 | + Transaction transaction, |
| 251 | + uint? resourceConfig = null, |
| 252 | + AuthMode? authMode = null) |
| 253 | + { |
| 254 | + var requestParams = BuildSimulateTransactionRequest(transaction, resourceConfig, authMode); |
| 255 | + |
| 256 | + return SendRequest<object, SimulateTransactionResponse>( |
| 257 | + "simulateTransaction", |
| 258 | + requestParams |
| 259 | + ); |
| 260 | + } |
| 261 | + |
| 262 | + private static Dictionary<string, object> BuildSimulateTransactionRequest( |
| 263 | + Transaction transaction, |
| 264 | + uint? resourceConfig, |
| 265 | + AuthMode? authMode) |
245 | 266 | { |
| 267 | + var request = new Dictionary<string, object> |
| 268 | + { |
| 269 | + ["transaction"] = transaction.ToUnsignedEnvelopeXdrBase64() |
| 270 | + }; |
| 271 | + |
246 | 272 | if (resourceConfig != null) |
247 | 273 | { |
248 | | - return SendRequest<object, SimulateTransactionResponse>("simulateTransaction", |
249 | | - new |
250 | | - { |
251 | | - transaction = transaction.ToUnsignedEnvelopeXdrBase64(), |
252 | | - resourceConfig = new { instructionLeeway = resourceConfig }, |
253 | | - }); |
| 274 | + request["resourceConfig"] = new { instructionLeeway = resourceConfig }; |
| 275 | + } |
| 276 | + |
| 277 | + if (authMode != null) |
| 278 | + { |
| 279 | + request["authMode"] = authMode; |
254 | 280 | } |
255 | 281 |
|
256 | | - return SendRequest<object, SimulateTransactionResponse>("simulateTransaction", |
257 | | - new |
258 | | - { |
259 | | - transaction = transaction.ToUnsignedEnvelopeXdrBase64(), |
260 | | - }); |
| 282 | + return request; |
261 | 283 | } |
262 | 284 |
|
263 | 285 | /// <summary> |
|
0 commit comments