Skip to content

Commit c5cb7ef

Browse files
authored
migrate to algosdk v3 (#43)
* migrate to algosdk v3 * update algosdk usage:
1 parent 8dc736a commit c5cb7ef

9 files changed

Lines changed: 65 additions & 74 deletions

File tree

.changeset/fresh-files-tap.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@folks-router/js-sdk": minor
3+
---
4+
5+
migrate to algosdk v3

packages/folks-router-js-sdk/examples/swap.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ async function main() {
1919
const quote = await client.fetchSwapQuote(params);
2020

2121
// prepare swap
22-
const base64txns = await client.prepareSwapTransactions(params, user.addr, BigInt(10), quote);
22+
const base64txns = await client.prepareSwapTransactions(params, user.addr.toString(), BigInt(10), quote);
2323
const unsignedTxns = base64txns.map((txn) => decodeUnsignedTransaction(Buffer.from(txn, "base64")));
2424
const signedTxns = unsignedTxns.map((txn) => txn.signTxn(user.sk));
2525

packages/folks-router-js-sdk/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
"check-exports": "check-export-map"
3838
},
3939
"dependencies": {
40-
"algosdk": "^2.9.0",
40+
"algosdk": "^3.5.2",
4141
"axios": "^1.11.0"
4242
},
4343
"devDependencies": {

packages/folks-router-js-sdk/src/FolksRouterClient.ts

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,7 @@
1-
import {
2-
ABIType,
3-
decodeAddress,
4-
decodeUnsignedTransaction,
5-
encodeAddress,
6-
getApplicationAddress,
7-
OnApplicationComplete,
8-
Transaction,
9-
TransactionType,
10-
} from "algosdk";
1+
import { decodeUnsignedTransaction, Transaction } from "algosdk";
112
import axios, { AxiosInstance } from "axios";
12-
import { MainnetFolksRouterAppId } from "./constants/mainnetConstants";
13-
import { TestnetFolksRouterAppId } from "./constants/testnetConstants";
14-
import { Network, SwapMode, SwapParams, SwapQuote, SwapTransactions } from "./types";
15-
import { routerABIContract } from "./abiContracts";
16-
import { mulScale, ONE_4_DP } from "./utils";
17-
import {checkSwapTransactions} from "./checks";
3+
import { Network, SwapParams, SwapQuote, SwapTransactions } from "./types";
4+
import { checkSwapTransactions } from "./checks";
185

196
const BASE_URL = "https://api.folksrouter.io";
207

packages/folks-router-js-sdk/src/checks.ts

Lines changed: 29 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import {
22
ABIType,
3-
decodeAddress,
43
encodeAddress,
54
getApplicationAddress,
65
OnApplicationComplete,
@@ -33,40 +32,53 @@ export function checkSwapTransactions(
3332
const swapEndTxn = unsignedTxns[unsignedTxns.length - 1]!;
3433

3534
// send algo/asset
36-
if (sendAssetTxn.reKeyTo !== undefined) throw Error("Unexpected rekey");
37-
if (sendAssetTxn.closeRemainderTo !== undefined) throw Error("Unexpected close remainder to");
38-
if (encodeAddress(sendAssetTxn.from.publicKey) !== userAddress) throw Error("Incorrect sender");
39-
if (encodeAddress(sendAssetTxn.to.publicKey) !== folksRouterAddr) throw Error("Incorrect receiver");
35+
if (sendAssetTxn.rekeyTo !== undefined) throw Error("Unexpected rekey");
36+
if (sendAssetTxn.payment?.closeRemainderTo !== undefined) throw Error("Unexpected close remainder to");
37+
if (encodeAddress(sendAssetTxn.sender.publicKey) !== userAddress) throw Error("Incorrect sender");
38+
if (sendAssetTxn.payment && encodeAddress(sendAssetTxn.payment.receiver.publicKey) !== folksRouterAddr.toString())
39+
throw Error("Incorrect receiver");
40+
if (
41+
sendAssetTxn.assetTransfer &&
42+
encodeAddress(sendAssetTxn.assetTransfer.receiver.publicKey) !== folksRouterAddr.toString()
43+
)
44+
throw Error("Incorrect receiver");
4045
if (
4146
!(fromAssetId === 0 && sendAssetTxn.type == TransactionType.pay) &&
42-
!(fromAssetId === sendAssetTxn.assetIndex && sendAssetTxn.type === TransactionType.axfer)
47+
!(
48+
sendAssetTxn.type === TransactionType.axfer &&
49+
sendAssetTxn.assetTransfer &&
50+
BigInt(fromAssetId) === sendAssetTxn.assetTransfer.assetIndex
51+
)
4352
)
4453
throw Error("Sending incorrect algo/asset");
45-
const sendAmount = BigInt(sendAssetTxn.amount);
54+
const sendAmount = sendAssetTxn.payment ? sendAssetTxn.payment.amount : sendAssetTxn.assetTransfer!.amount;
4655

4756
// swap forward txns
4857
swapForwardTxns.forEach((txn, i) => {
49-
if (encodeAddress(txn.from.publicKey) !== userAddress) throw Error("Incorrect sender");
50-
if (txn.appIndex !== folksRouterAppId) throw Error("Incorrect application index");
51-
if (txn.type !== TransactionType.appl && txn.appOnComplete !== OnApplicationComplete.NoOpOC)
58+
if (encodeAddress(txn.sender.publicKey) !== userAddress) throw Error("Incorrect sender");
59+
if (txn.applicationCall?.appIndex !== BigInt(folksRouterAppId)) throw Error("Incorrect application index");
60+
if (txn.type !== TransactionType.appl && txn.applicationCall.onComplete !== OnApplicationComplete.NoOpOC)
5261
throw Error("Incorrect transaction type");
53-
const swapForwardSelector = uint8ArrayToHex(txn.appArgs!.at(0)!);
62+
const swapForwardSelector = uint8ArrayToHex(txn.applicationCall.appArgs.at(0)!);
5463
if (swapForwardSelector !== getHexSelector("swap_forward")) throw Error("Incorrect selector");
5564
});
5665

5766
// receive algo/asset
58-
if (encodeAddress(swapEndTxn.from.publicKey) !== userAddress) throw Error("Incorrect sender");
59-
if (swapEndTxn.appIndex !== folksRouterAppId) throw Error("Incorrect application index");
60-
if (swapEndTxn.type !== TransactionType.appl && swapEndTxn.appOnComplete !== OnApplicationComplete.NoOpOC)
67+
if (encodeAddress(swapEndTxn.sender.publicKey) !== userAddress) throw Error("Incorrect sender");
68+
if (swapEndTxn.applicationCall?.appIndex !== BigInt(folksRouterAppId)) throw Error("Incorrect application index");
69+
if (
70+
swapEndTxn.type !== TransactionType.appl &&
71+
swapEndTxn.applicationCall.onComplete !== OnApplicationComplete.NoOpOC
72+
)
6173
throw Error("Incorrect transaction type");
62-
const swapEndSelector = uint8ArrayToHex(swapEndTxn.appArgs!.at(0)!);
74+
const swapEndSelector = uint8ArrayToHex(swapEndTxn.applicationCall.appArgs.at(0)!);
6375
const isFixedInput = swapEndSelector === getHexSelector("fi_end_swap");
6476
const isFixedOutput = swapEndSelector === getHexSelector("fo_end_swap");
6577
if ((isFixedInput && swapMode !== SwapMode.FIXED_INPUT) || (isFixedOutput && swapMode !== SwapMode.FIXED_OUTPUT))
6678
throw Error("Incorrect swap mode");
67-
if (ABIType.from("uint64").decode(swapEndTxn.appArgs!.at(1)!) !== BigInt(toAssetId))
79+
if (ABIType.from("uint64").decode(swapEndTxn.applicationCall.appArgs.at(1)!) !== BigInt(toAssetId))
6880
throw Error("Receiving incorrect algo/asset");
69-
const receiveAmount = ABIType.from("uint64").decode(swapEndTxn.appArgs!.at(2)!) as bigint;
81+
const receiveAmount = ABIType.from("uint64").decode(swapEndTxn.applicationCall.appArgs.at(2)!) as bigint;
7082

7183
// check amounts
7284
const slippageAmount = mulScale(swapQuote.quoteAmount, BigInt(slippageBps), ONE_4_DP);

packages/folks-router-js-sdk/src/referrer.ts

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ function getReferrerLogicSig(referrerAddr: string): LogicSigAccount {
2727
const buildReferrerGroupTransaction = (txns: Transaction[], lsig: LogicSigAccount): ReferrerGroupTransaction =>
2828
assignGroupID(txns).map((txn) => ({
2929
unsignedTxn: encodeUnsignedTransaction(txn),
30-
lsig: encodeAddress(txn.from.publicKey) === lsig.address() ? lsig.toByte() : undefined,
30+
lsig: encodeAddress(txn.sender.publicKey) === lsig.address().toString() ? lsig.toByte() : undefined,
3131
}));
3232

3333
function prepareReferrerOptIntoAsset(
@@ -40,8 +40,14 @@ function prepareReferrerOptIntoAsset(
4040

4141
// generate transactions
4242
const MIN_BALANCE = BigInt(0.1e6);
43-
const minBalancePayment = transferAlgoOrAsset(0, senderAddr, lsig.address(), MIN_BALANCE, { ...params, fee: 2000 });
44-
const assetOptIn = transferAlgoOrAsset(assetId, lsig.address(), lsig.address(), 0, { ...params, fee: 0 });
43+
const minBalancePayment = transferAlgoOrAsset(0, senderAddr, lsig.address().toString(), MIN_BALANCE, {
44+
...params,
45+
fee: 2000,
46+
});
47+
const assetOptIn = transferAlgoOrAsset(assetId, lsig.address().toString(), lsig.address().toString(), 0, {
48+
...params,
49+
fee: 0,
50+
});
4551

4652
// group, encode and attach lsig
4753
return buildReferrerGroupTransaction([minBalancePayment, assetOptIn], lsig);
@@ -58,7 +64,7 @@ function prepareClaimReferrerFees(
5864

5965
// generate transactions
6066
const groupFeePayment = transferAlgoOrAsset(0, senderAddr, senderAddr, 0, { ...params, fee: 2000 });
61-
const claim = transferAlgoOrAsset(assetId, lsig.address(), referrerAddr, amount, { ...params, fee: 0 });
67+
const claim = transferAlgoOrAsset(assetId, lsig.address().toString(), referrerAddr, amount, { ...params, fee: 0 });
6268

6369
// group, encode and attach lsig
6470
return buildReferrerGroupTransaction([groupFeePayment, claim], lsig);

packages/folks-router-js-sdk/src/swap.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ function prepareEnableAssetToBeSwapped(
1717
): Transaction[] {
1818
// payment txn
1919
const amount = assetIds.length * 0.1e6;
20-
const paymentTxn = transferAlgoOrAsset(0, senderAddr, getApplicationAddress(appId), amount, params);
20+
const paymentTxn = transferAlgoOrAsset(0, senderAddr, getApplicationAddress(appId).toString(), amount, params);
2121

2222
// opt in txn
2323
const atc = new AtomicTransactionComposer();

packages/folks-router-js-sdk/src/utils.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,20 +12,20 @@ const signer = async () => [];
1212
*/
1313
function transferAlgoOrAsset(
1414
assetId: number,
15-
from: string,
16-
to: string,
15+
sender: string,
16+
receiver: string,
1717
amount: number | bigint,
1818
params: SuggestedParams,
1919
): Transaction {
2020
return assetId !== 0
2121
? makeAssetTransferTxnWithSuggestedParamsFromObject({
22-
from,
23-
to,
22+
sender,
23+
receiver,
2424
amount,
2525
suggestedParams: params,
2626
assetIndex: assetId,
2727
})
28-
: makePaymentTxnWithSuggestedParamsFromObject({ from, to, amount, suggestedParams: params });
28+
: makePaymentTxnWithSuggestedParamsFromObject({ sender, receiver, amount, suggestedParams: params });
2929
}
3030

3131
const ONE_4_DP = BigInt(1e4);

pnpm-lock.yaml

Lines changed: 10 additions & 29 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)