test_helpers.js 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import * as StellarSdk from '@stellar/stellar-sdk';
  2. export async function call_contract_function(method, server, keypair, contract) {
  3. let res;
  4. let builtTransaction = new StellarSdk.TransactionBuilder(await server.getAccount(keypair.publicKey()), {
  5. fee: StellarSdk.BASE_FEE,
  6. networkPassphrase: StellarSdk.Networks.TESTNET,
  7. }).addOperation(contract.call(method)).setTimeout(30).build();
  8. let preparedTransaction = await server.prepareTransaction(builtTransaction);
  9. // Sign the transaction with the source account's keypair.
  10. preparedTransaction.sign(keypair);
  11. try {
  12. let sendResponse = await server.sendTransaction(preparedTransaction);
  13. if (sendResponse.status === "PENDING") {
  14. let getResponse = await server.getTransaction(sendResponse.hash);
  15. // Poll `getTransaction` until the status is not "NOT_FOUND"
  16. while (getResponse.status === "NOT_FOUND") {
  17. console.log("Waiting for transaction confirmation...");
  18. // See if the transaction is complete
  19. getResponse = await server.getTransaction(sendResponse.hash);
  20. // Wait one second
  21. await new Promise((resolve) => setTimeout(resolve, 1000));
  22. }
  23. if (getResponse.status === "SUCCESS") {
  24. // Make sure the transaction's resultMetaXDR is not empty
  25. if (!getResponse.resultMetaXdr) {
  26. throw "Empty resultMetaXDR in getTransaction response";
  27. }
  28. // Find the return value from the contract and return it
  29. let transactionMeta = getResponse.resultMetaXdr;
  30. let returnValue = transactionMeta.v3().sorobanMeta().returnValue();
  31. console.log(`Transaction result: ${returnValue.value()}`);
  32. res = returnValue.value();
  33. } else {
  34. throw `Transaction failed: ${getResponse.resultXdr}`;
  35. }
  36. } else {
  37. throw sendResponse.errorResultXdr;
  38. }
  39. } catch (err) {
  40. // Catch and report any errors we've thrown
  41. console.log("Sending transaction failed");
  42. console.log(err);
  43. }
  44. return res;
  45. }