Skip to content

Commit

Permalink
fix dependency cyle and other fmt fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
BlaineHeffron committed Jun 17, 2024
1 parent e53d907 commit 81d5631
Show file tree
Hide file tree
Showing 7 changed files with 91 additions and 87 deletions.
7 changes: 2 additions & 5 deletions src/contract/assembled_transaction.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,17 +24,14 @@ import { assembleTransaction } from "../rpc/transaction";
import type { Client } from "./client";
import { Err } from "./rust_result";
import {
DEFAULT_TIMEOUT,
contractErrorPattern,
implementsToString,
getAccount
} from "./utils";
import { DEFAULT_TIMEOUT } from "./types";
import { SentTransaction } from "./sent_transaction";
import { Spec } from "./spec";

export const NULL_ACCOUNT =
"GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWHF";

/**
* The main workhorse of {@link Client}. This class is used to wrap a
* transaction-under-construction and provide high-level interfaces to the most
Expand Down Expand Up @@ -909,7 +906,7 @@ export class AssembledTransaction<T> {
* Client initialization.
* @throws {AssembledTransaction.Errors.RestoreFailure} - Throws a custom error if the
* restore transaction fails, providing the details of the failure.
*/
*/
async restoreFootprint(
/**
* The preamble object containing data required to
Expand Down
3 changes: 1 addition & 2 deletions src/contract/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,4 @@ export * from "./client";
export * from "./rust_result";
export * from "./sent_transaction";
export * from "./spec";
export * from "./types";
export { DEFAULT_TIMEOUT } from "./utils";
export * from "./types";
3 changes: 2 additions & 1 deletion src/contract/sent_transaction.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@
import type { MethodOptions } from "./types";
import { Server } from "../rpc/server"
import { Api } from "../rpc/api"
import { DEFAULT_TIMEOUT, withExponentialBackoff } from "./utils";
import { withExponentialBackoff } from "./utils";
import { DEFAULT_TIMEOUT } from "./types";
import type { AssembledTransaction } from "./assembled_transaction";

/**
Expand Down
10 changes: 8 additions & 2 deletions src/contract/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import { BASE_FEE, Memo, MemoType, Operation, Transaction, xdr } from "@stellar/stellar-base";
import type { Client } from "./client";
import type { AssembledTransaction } from "./assembled_transaction";
import { DEFAULT_TIMEOUT } from "./utils";

export type XDR_BASE64 = string;
export type u32 = number;
Expand Down Expand Up @@ -122,4 +121,11 @@ export type AssembledTransactionOptions<T = string> = MethodOptions &
method: string;
args?: any[];
parseResultXdr: (xdr: xdr.ScVal) => T;
};
};/**
* The default timeout for waiting for a transaction to be included in a block.
*/


export const DEFAULT_TIMEOUT = 5 * 60;
export const NULL_ACCOUNT = "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWHF";

13 changes: 4 additions & 9 deletions src/contract/utils.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,7 @@
import { xdr, cereal, Account } from "@stellar/stellar-base";
import { Server } from "../rpc/server";
import { NULL_ACCOUNT, type AssembledTransaction } from "./assembled_transaction";
import { AssembledTransactionOptions } from "./types";


/**
* The default timeout for waiting for a transaction to be included in a block.
*/
export const DEFAULT_TIMEOUT = 5 * 60;
import { type AssembledTransaction } from "./assembled_transaction";
import { NULL_ACCOUNT , AssembledTransactionOptions } from "./types";

/**
* Keep calling a `fn` for `timeoutInSeconds` seconds, if `keepWaitingIf` is
Expand Down Expand Up @@ -111,11 +105,12 @@ export function processSpecEntryStream(buffer: Buffer) {
return res;
}

//eslint-disable-next-line require-await
export async function getAccount<T>(
options: AssembledTransactionOptions<T>,
server: Server
): Promise<Account> {
return options.publicKey
? await server.getAccount(options.publicKey)
? server.getAccount(options.publicKey)
: new Account(NULL_ACCOUNT, "0");
}
40 changes: 23 additions & 17 deletions test/e2e/src/test-swap.js
Original file line number Diff line number Diff line change
Expand Up @@ -81,16 +81,22 @@ describe("Swap Contract Tests", function () {
amount_b: amountBToSwap,
min_b_for_a: amountBToSwap,
});
await expect(tx.signAndSend()).to.be.rejectedWith(contract.AssembledTransaction.Errors.NeedsMoreSignatures).then((error) => {
// Further assertions on the error object
expect(error).to.be.instanceOf(contract.AssembledTransaction.Errors.NeedsMoreSignatures,
`error is not of type 'NeedsMoreSignaturesError'; instead it is of type '${error?.constructor.name}'`);
await expect(tx.signAndSend())
.to.be.rejectedWith(
contract.AssembledTransaction.Errors.NeedsMoreSignatures,
)
.then((error) => {
// Further assertions on the error object
expect(error).to.be.instanceOf(
contract.AssembledTransaction.Errors.NeedsMoreSignatures,
`error is not of type 'NeedsMoreSignaturesError'; instead it is of type '${error?.constructor.name}'`,
);

if (error) {
// Using regex to check the error message
expect(error.message).to.match(/needsNonInvokerSigningBy/);
}
});
if (error) {
// Using regex to check the error message
expect(error.message).to.match(/needsNonInvokerSigningBy/);
}
});
});

it("modified & re-simulated transactions show updated data", async function () {
Expand All @@ -114,25 +120,25 @@ describe("Swap Contract Tests", function () {
});

const originalResourceFee = Number(
tx.simulationData.transactionData.resourceFee()
tx.simulationData.transactionData.resourceFee(),
);
const bumpedResourceFee = originalResourceFee + 10000;

tx.raw = TransactionBuilder.cloneFrom(tx.built, {
fee: tx.built.fee,
sorobanData: new SorobanDataBuilder(
tx.simulationData.transactionData.toXDR()
tx.simulationData.transactionData.toXDR(),
)
.setResourceFee(
xdr.Int64.fromString(bumpedResourceFee.toString()).toBigInt()
xdr.Int64.fromString(bumpedResourceFee.toString()).toBigInt(),
)
.build(),
});

await tx.simulate();

const newSimulatedResourceFee = Number(
tx.simulationData.transactionData.resourceFee()
tx.simulationData.transactionData.resourceFee(),
);

expect(originalResourceFee).to.not.equal(newSimulatedResourceFee);
Expand Down Expand Up @@ -160,25 +166,25 @@ describe("Swap Contract Tests", function () {
});

const originalResourceFee = Number(
tx.simulationData.transactionData.resourceFee()
tx.simulationData.transactionData.resourceFee(),
);
const bumpedResourceFee = originalResourceFee + 10000;

tx.raw = TransactionBuilder.cloneFrom(tx.built, {
fee: tx.built.fee,
sorobanData: new SorobanDataBuilder(
tx.simulationData.transactionData.toXDR()
tx.simulationData.transactionData.toXDR(),
)
.setResourceFee(
xdr.Int64.fromString(bumpedResourceFee.toString()).toBigInt()
xdr.Int64.fromString(bumpedResourceFee.toString()).toBigInt(),
)
.build(),
});

await tx.simulate();

const newSimulatedResourceFee = Number(
tx.simulationData.transactionData.resourceFee()
tx.simulationData.transactionData.resourceFee(),
);

expect(originalResourceFee).to.not.equal(newSimulatedResourceFee);
Expand Down
102 changes: 51 additions & 51 deletions test/unit/server/soroban/assembled_transaction_test.js
Original file line number Diff line number Diff line change
@@ -1,29 +1,24 @@
const {
Account,
Keypair,
Networks,
rpc,
SorobanDataBuilder,
xdr,
contract,
} = StellarSdk;
const { Account, Keypair, Networks, rpc, SorobanDataBuilder, xdr, contract } =
StellarSdk;
const { Server, AxiosClient, parseRawSimulation } = StellarSdk.rpc;

const restoreTxnData = StellarSdk.SorobanDataBuilder.fromXDR("AAAAAAAAAAAAAAAEAAAABgAAAAHZ4Y4l0GNoS97QH0fa5Jbbm61Ou3t9McQ09l7wREKJYwAAAA8AAAAJUEVSU19DTlQxAAAAAAAAAQAAAAYAAAAB2eGOJdBjaEve0B9H2uSW25utTrt7fTHENPZe8ERCiWMAAAAPAAAACVBFUlNfQ05UMgAAAAAAAAEAAAAGAAAAAdnhjiXQY2hL3tAfR9rkltubrU67e30xxDT2XvBEQoljAAAAFAAAAAEAAAAH+BoQswzzGTKRzrdC6axxKaM4qnyDP8wgQv8Id3S4pbsAAAAAAAAGNAAABjQAAAAAAADNoQ==");
const restoreTxnData = StellarSdk.SorobanDataBuilder.fromXDR(
"AAAAAAAAAAAAAAAEAAAABgAAAAHZ4Y4l0GNoS97QH0fa5Jbbm61Ou3t9McQ09l7wREKJYwAAAA8AAAAJUEVSU19DTlQxAAAAAAAAAQAAAAYAAAAB2eGOJdBjaEve0B9H2uSW25utTrt7fTHENPZe8ERCiWMAAAAPAAAACVBFUlNfQ05UMgAAAAAAAAEAAAAGAAAAAdnhjiXQY2hL3tAfR9rkltubrU67e30xxDT2XvBEQoljAAAAFAAAAAEAAAAH+BoQswzzGTKRzrdC6axxKaM4qnyDP8wgQv8Id3S4pbsAAAAAAAAGNAAABjQAAAAAAADNoQ==",
);

describe("AssembledTransaction.buildFootprintRestoreTransaction", () => {
const keypair = Keypair.random();
const contractId = "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM";
const networkPassphrase = "Standalone Network ; February 2017";
const wallet = contract.basicNodeSigner(keypair, networkPassphrase);
const options = {
networkPassphrase,
contractId,
rpcUrl: serverUrl,
allowHttp: true,
publicKey: keypair.publicKey(),
...wallet,
}
networkPassphrase,
contractId,
rpcUrl: serverUrl,
allowHttp: true,
publicKey: keypair.publicKey(),
...wallet,
};

beforeEach(function () {
this.server = new Server(serverUrl);
Expand All @@ -35,8 +30,6 @@ describe("AssembledTransaction.buildFootprintRestoreTransaction", () => {
this.axiosMock.restore();
});



it("makes expected RPC calls", function (done) {
const simulateTransactionResponse = {
transactionData: restoreTxnData,
Expand All @@ -46,10 +39,10 @@ describe("AssembledTransaction.buildFootprintRestoreTransaction", () => {
};

const sendTransactionResponse = {
"status": "PENDING",
"hash": "05870e35fc94e5424f72d125959760b5f60631d91452bde2d11126fb5044e35d",
"latestLedger": 17034,
"latestLedgerCloseTime": "1716483573"
status: "PENDING",
hash: "05870e35fc94e5424f72d125959760b5f60631d91452bde2d11126fb5044e35d",
latestLedger: 17034,
latestLedgerCloseTime: "1716483573",
};
const getTransactionResponse = {
status: "SUCCESS",
Expand All @@ -58,9 +51,11 @@ describe("AssembledTransaction.buildFootprintRestoreTransaction", () => {
oldestLedger: 15598,
oldestLedgerCloseTime: "1716482133",
applicationOrder: 1,
envelopeXdr: "AAAAAgAAAAARwpJYOq4lKj/RdtS7ds3ciGSMfZUp+7d4xgg9vsN7qQABm0IAAAvWAAAAAwAAAAEAAAAAAAAAAAAAAABmT3cbAAAAAAAAAAEAAAAAAAAAGgAAAAAAAAABAAAAAAAAAAAAAAAEAAAABgAAAAHZ4Y4l0GNoS97QH0fa5Jbbm61Ou3t9McQ09l7wREKJYwAAAA8AAAAJUEVSU19DTlQxAAAAAAAAAQAAAAYAAAAB2eGOJdBjaEve0B9H2uSW25utTrt7fTHENPZe8ERCiWMAAAAPAAAACVBFUlNfQ05UMgAAAAAAAAEAAAAGAAAAAdnhjiXQY2hL3tAfR9rkltubrU67e30xxDT2XvBEQoljAAAAFAAAAAEAAAAH+BoQswzzGTKRzrdC6axxKaM4qnyDP8wgQv8Id3S4pbsAAAAAAAAGNAAABjQAAAAAAADNoQAAAAG+w3upAAAAQGBfsx+gyi/2Dh6i+7Vbb6Ongw3HDcFDZ48eoadkUUvkq97zdPe3wYGFswZgT5/GXPqGDBi+iqHuZiYx5eSy3Qk=",
envelopeXdr:
"AAAAAgAAAAARwpJYOq4lKj/RdtS7ds3ciGSMfZUp+7d4xgg9vsN7qQABm0IAAAvWAAAAAwAAAAEAAAAAAAAAAAAAAABmT3cbAAAAAAAAAAEAAAAAAAAAGgAAAAAAAAABAAAAAAAAAAAAAAAEAAAABgAAAAHZ4Y4l0GNoS97QH0fa5Jbbm61Ou3t9McQ09l7wREKJYwAAAA8AAAAJUEVSU19DTlQxAAAAAAAAAQAAAAYAAAAB2eGOJdBjaEve0B9H2uSW25utTrt7fTHENPZe8ERCiWMAAAAPAAAACVBFUlNfQ05UMgAAAAAAAAEAAAAGAAAAAdnhjiXQY2hL3tAfR9rkltubrU67e30xxDT2XvBEQoljAAAAFAAAAAEAAAAH+BoQswzzGTKRzrdC6axxKaM4qnyDP8wgQv8Id3S4pbsAAAAAAAAGNAAABjQAAAAAAADNoQAAAAG+w3upAAAAQGBfsx+gyi/2Dh6i+7Vbb6Ongw3HDcFDZ48eoadkUUvkq97zdPe3wYGFswZgT5/GXPqGDBi+iqHuZiYx5eSy3Qk=",
resultXdr: "AAAAAAAAiRkAAAAAAAAAAQAAAAAAAAAaAAAAAAAAAAA=",
resultMetaXdr: "AAAAAwAAAAAAAAACAAAAAwAAQowAAAAAAAAAABHCklg6riUqP9F21Lt2zdyIZIx9lSn7t3jGCD2+w3upAAAAF0h1Pp0AAAvWAAAAAgAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAMAAAAAAAAMMQAAAABmTz9yAAAAAAAAAAEAAEKMAAAAAAAAAAARwpJYOq4lKj/RdtS7ds3ciGSMfZUp+7d4xgg9vsN7qQAAABdIdT6dAAAL1gAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAADAAAAAAAAQowAAAAAZk919wAAAAAAAAABAAAACAAAAAMAAAwrAAAACc4pIDe7y0sRFHAghrdpB7ypfj4BVuZStvX4u0BC1S/YAAANVgAAAAAAAAABAABCjAAAAAnOKSA3u8tLERRwIIa3aQe8qX4+AVbmUrb1+LtAQtUv2AAAQ7cAAAAAAAAAAwAADCsAAAAJikpmJa7Pr3lTb+dhRP2N4TOYCqK4tL4tQhDYnNEijtgAAA1WAAAAAAAAAAEAAEKMAAAACYpKZiWuz695U2/nYUT9jeEzmAqiuLS+LUIQ2JzRIo7YAABDtwAAAAAAAAADAAAMMQAAAAlT7LdEin/CaQA3iscHqkwnEFlSh8jfTPTIhSQ5J8Ao0wAADVwAAAAAAAAAAQAAQowAAAAJU+y3RIp/wmkAN4rHB6pMJxBZUofI30z0yIUkOSfAKNMAAEO3AAAAAAAAAAMAAAwxAAAACQycyCYjh7j9CHnTm9OKCYXhgmXw6jdtoMsGHyPk8Aa+AAANXAAAAAAAAAABAABCjAAAAAkMnMgmI4e4/Qh505vTigmF4YJl8Oo3baDLBh8j5PAGvgAAQ7cAAAAAAAAAAgAAAAMAAEKMAAAAAAAAAAARwpJYOq4lKj/RdtS7ds3ciGSMfZUp+7d4xgg9vsN7qQAAABdIdT6dAAAL1gAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAADAAAAAAAAQowAAAAAZk919wAAAAAAAAABAABCjAAAAAAAAAAAEcKSWDquJSo/0XbUu3bN3IhkjH2VKfu3eMYIPb7De6kAAAAXSHWDiQAAC9YAAAADAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAwAAAAAAAEKMAAAAAGZPdfcAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAA",
resultMetaXdr:
"AAAAAwAAAAAAAAACAAAAAwAAQowAAAAAAAAAABHCklg6riUqP9F21Lt2zdyIZIx9lSn7t3jGCD2+w3upAAAAF0h1Pp0AAAvWAAAAAgAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAMAAAAAAAAMMQAAAABmTz9yAAAAAAAAAAEAAEKMAAAAAAAAAAARwpJYOq4lKj/RdtS7ds3ciGSMfZUp+7d4xgg9vsN7qQAAABdIdT6dAAAL1gAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAADAAAAAAAAQowAAAAAZk919wAAAAAAAAABAAAACAAAAAMAAAwrAAAACc4pIDe7y0sRFHAghrdpB7ypfj4BVuZStvX4u0BC1S/YAAANVgAAAAAAAAABAABCjAAAAAnOKSA3u8tLERRwIIa3aQe8qX4+AVbmUrb1+LtAQtUv2AAAQ7cAAAAAAAAAAwAADCsAAAAJikpmJa7Pr3lTb+dhRP2N4TOYCqK4tL4tQhDYnNEijtgAAA1WAAAAAAAAAAEAAEKMAAAACYpKZiWuz695U2/nYUT9jeEzmAqiuLS+LUIQ2JzRIo7YAABDtwAAAAAAAAADAAAMMQAAAAlT7LdEin/CaQA3iscHqkwnEFlSh8jfTPTIhSQ5J8Ao0wAADVwAAAAAAAAAAQAAQowAAAAJU+y3RIp/wmkAN4rHB6pMJxBZUofI30z0yIUkOSfAKNMAAEO3AAAAAAAAAAMAAAwxAAAACQycyCYjh7j9CHnTm9OKCYXhgmXw6jdtoMsGHyPk8Aa+AAANXAAAAAAAAAABAABCjAAAAAkMnMgmI4e4/Qh505vTigmF4YJl8Oo3baDLBh8j5PAGvgAAQ7cAAAAAAAAAAgAAAAMAAEKMAAAAAAAAAAARwpJYOq4lKj/RdtS7ds3ciGSMfZUp+7d4xgg9vsN7qQAAABdIdT6dAAAL1gAAAAMAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAADAAAAAAAAQowAAAAAZk919wAAAAAAAAABAABCjAAAAAAAAAAAEcKSWDquJSo/0XbUu3bN3IhkjH2VKfu3eMYIPb7De6kAAAAXSHWDiQAAC9YAAAADAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAwAAAAAAAEKMAAAAAGZPdfcAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAA",
ledger: 17036,
createdAt: "1716483575",
};
Expand All @@ -72,49 +67,54 @@ describe("AssembledTransaction.buildFootprintRestoreTransaction", () => {
jsonrpc: "2.0",
id: 1,
method: "simulateTransaction",
})
}),
)
.returns(Promise.resolve({ data: { result: simulateTransactionResponse } }));
.returns(
Promise.resolve({ data: { result: simulateTransactionResponse } }),
);
this.axiosMock
.expects("post")
.withArgs(serverUrl,
.withArgs(
serverUrl,
sinon.match({
jsonrpc: "2.0",
id: 1,
method: "getTransaction",
})
}),
)
.returns(Promise.resolve({ data: { result: getTransactionResponse } }));

this.axiosMock
.expects("post")
.withArgs(serverUrl,
.withArgs(
serverUrl,
sinon.match({
jsonrpc: "2.0",
id: 1,
method: "sendTransaction",
})
}),
)
.returns(Promise.resolve({ data: { result: sendTransactionResponse } }));

contract.AssembledTransaction.buildFootprintRestoreTransaction(
options,
restoreTxnData,
new StellarSdk.Account(
"GBZXN7PIRZGNMHGA7MUUUF4GWPY5AYPV6LY4UV2GL6VJGIQRXFDNMADI",
"1",
),
52641,
)
.then((txn) => txn.signAndSend({ ...wallet }))
.then((result) => {
expect(result.getTransactionResponse.status).to.equal(rpc.Api.GetTransactionStatus.SUCCESS);
done();
})
.catch((error) => {
// handle any errors that occurred during the promise chain
done(error);
});

})
contract.AssembledTransaction.buildFootprintRestoreTransaction(
options,
restoreTxnData,
new StellarSdk.Account(
"GBZXN7PIRZGNMHGA7MUUUF4GWPY5AYPV6LY4UV2GL6VJGIQRXFDNMADI",
"1",
),
52641,
)
.then((txn) => txn.signAndSend({ ...wallet }))
.then((result) => {
expect(result.getTransactionResponse.status).to.equal(
rpc.Api.GetTransactionStatus.SUCCESS,
);
done();
})
.catch((error) => {
// handle any errors that occurred during the promise chain
done(error);
});
});
});

0 comments on commit 81d5631

Please sign in to comment.