Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "algo-tools",
"version": "5.0.18",
"version": "5.1.0",
"type": "module",
"scripts": {
"dev": "vite",
Expand All @@ -10,15 +10,15 @@
},
"dependencies": {
"@algorandfoundation/algokit-utils": "^9.2.0",
"@lucide/vue": "^1.31.0",
"@lucide/vue": "^1.34.0",
"@tailwindcss/vite": "^4.3.3",
"@tanstack/vue-table": "^8.21.3",
"@txnlab/use-wallet-defly": "^5.0.0",
"@txnlab/use-wallet-lute": "^5.0.0",
"@txnlab/use-wallet-pera": "^5.0.0",
"@txnlab/use-wallet-vue": "^5.0.0",
"@vueuse/core": "^14.4.0",
"algosdk": "^3.6.0",
"algosdk": "^3.7.0",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
"core-js": "^3.50.0",
Expand All @@ -37,7 +37,7 @@
"vue-sonner": "^2.0.9"
},
"devDependencies": {
"@tsconfig/node22": "^22.0.5",
"@tsconfig/node22": "^22.0.6",
"@types/node": "^26.2.0",
"@vitejs/plugin-vue": "^6.0.8",
"@vue/eslint-config-typescript": "^14.9.0",
Expand All @@ -48,10 +48,10 @@
"unplugin-auto-import": "^21.1.0",
"unplugin-fonts": "^1.4.0",
"unplugin-vue-components": "^32.1.0",
"vite": "^8.2.1",
"vite": "^8.2.2",
"vite-plugin-node-polyfills": "^0.28.0",
"vite-plugin-vue-devtools": "^8.2.1",
"vue-tsc": "^3.3.9"
"vue-tsc": "^3.3.11"
},
"engines": {
"node": ">=22"
Expand Down
488 changes: 249 additions & 239 deletions pnpm-lock.yaml

Large diffs are not rendered by default.

6 changes: 0 additions & 6 deletions pnpm-workspace.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,6 @@ allowBuilds:
esbuild: true
vue-demi: true
minimumReleaseAge: 1440
minimumReleaseAgeExclude:
- "@txnlab/use-wallet@5.0.0"
- "@txnlab/use-wallet-defly@5.0.0"
- "@txnlab/use-wallet-lute@5.0.0"
- "@txnlab/use-wallet-pera@5.0.0"
- "@txnlab/use-wallet-vue@5.0.0"
overrides:
"ws": ">=7.5.10"
"bn.js": ">=4.12.3"
17 changes: 13 additions & 4 deletions src/components/AppCard.vue
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<script lang="ts" setup>
import { execAtc, fetchAsync } from "@/utils";
import { execAtc, fetchAsync, getSuggestedParams } from "@/utils";
import { useWallet } from "@txnlab/use-wallet-vue";
import algosdk, { modelsv2 } from "algosdk";
import { CircleOff, Delete, Info, X } from "@lucide/vue";
Expand Down Expand Up @@ -69,7 +69,10 @@ async function closeOut() {
warningDialog.value.show = false;
try {
const atc = new algosdk.AtomicTransactionComposer();
const suggestedParams = await algodClient.value.getTransactionParams().do();
const suggestedParams = await getSuggestedParams(
algodClient.value,
store.pqMode
);
const txn = algosdk.makeApplicationCloseOutTxnFromObject({
sender: activeAddress.value!,
suggestedParams,
Expand All @@ -87,7 +90,10 @@ async function clearState() {
warningDialog.value.show = false;
try {
const atc = new algosdk.AtomicTransactionComposer();
const suggestedParams = await algodClient.value.getTransactionParams().do();
const suggestedParams = await getSuggestedParams(
algodClient.value,
store.pqMode
);
const txn = algosdk.makeApplicationClearStateTxnFromObject({
sender: activeAddress.value!,
suggestedParams,
Expand All @@ -105,7 +111,10 @@ async function deleteApp() {
warningDialog.value.show = false;
try {
const atc = new algosdk.AtomicTransactionComposer();
const suggestedParams = await algodClient.value.getTransactionParams().do();
const suggestedParams = await getSuggestedParams(
algodClient.value,
store.pqMode
);
const txn = algosdk.makeApplicationDeleteTxnFromObject({
sender: activeAddress.value!,
suggestedParams,
Expand Down
17 changes: 14 additions & 3 deletions src/components/AssetCard.vue
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
<script lang="ts" setup>
import { execAtc, getAssetInfo, resolveProtocol } from "@/utils";
import {
execAtc,
getAssetInfo,
getSuggestedParams,
resolveProtocol,
} from "@/utils";
import { useWallet } from "@txnlab/use-wallet-vue";
import algosdk, { modelsv2 } from "algosdk";
import { Delete, Info, X } from "@lucide/vue";
Expand Down Expand Up @@ -73,7 +78,10 @@ async function setReceiver() {
async function destroy() {
try {
const atc = new algosdk.AtomicTransactionComposer();
const suggestedParams = await algodClient.value.getTransactionParams().do();
const suggestedParams = await getSuggestedParams(
algodClient.value,
store.pqMode
);
const txn = algosdk.makeAssetDestroyTxnWithSuggestedParamsFromObject({
sender: activeAddress.value!,
suggestedParams,
Expand All @@ -96,7 +104,10 @@ async function closeOut() {
try {
const atc = new algosdk.AtomicTransactionComposer();
showReceiver.value = false;
const suggestedParams = await algodClient.value.getTransactionParams().do();
const suggestedParams = await getSuggestedParams(
algodClient.value,
store.pqMode
);
let txn;
if (props.asset.assetId) {
txn = algosdk.makeAssetTransferTxnWithSuggestedParamsFromObject({
Expand Down
7 changes: 5 additions & 2 deletions src/components/DonateDialog.vue
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<script lang="ts" setup>
import { bigintAmount, execAtc } from "@/utils";
import { bigintAmount, execAtc, getSuggestedParams } from "@/utils";
import { useWallet } from "@txnlab/use-wallet-vue";
import algosdk from "algosdk";
import { X } from "@lucide/vue";
Expand Down Expand Up @@ -28,7 +28,10 @@ async function donate() {
if (!valid) return;
const atc = new algosdk.AtomicTransactionComposer();
const enc = new TextEncoder();
const suggestedParams = await algodClient.value.getTransactionParams().do();
const suggestedParams = await getSuggestedParams(
algodClient.value,
store.pqMode
);
const note64 = note ? enc.encode(note.value) : undefined;
const microAlgo = bigintAmount(amount.value!, 6);
const txn = algosdk.makePaymentTxnWithSuggestedParamsFromObject({
Expand Down
25 changes: 18 additions & 7 deletions src/components/InboxAsset.vue
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<script lang="ts" setup>
import { Arc59Factory } from "@/clients/Arc59Client";
import { getAssetInfo, resolveProtocol } from "@/utils";
import { getAssetInfo, getSuggestedParams, resolveProtocol } from "@/utils";
import { AlgorandClient } from "@algorandfoundation/algokit-utils";
import { useWallet } from "@txnlab/use-wallet-vue";
import algosdk, { modelsv2 } from "algosdk";
Expand Down Expand Up @@ -71,13 +71,18 @@ async function claim() {
const claimerOptedIn = store.account?.assets?.some(
(a) => a.assetId === asset.assetId
);
let totalTxns = 3;
let outerTxnCount = 1;
let innerTxnCount = 2;
if (props.inboxInfo.minBalance < props.inboxInfo.amount) {
totalTxns += 2;
outerTxnCount++;
innerTxnCount++;
composer.arc59ClaimAlgo({ args: {}, staticFee: (0).algo() });
}
// If the claimer hasn't already opted in, add a transaction to do so
const suggestedParams = await algodClient.value.getTransactionParams().do();
const suggestedParams = await getSuggestedParams(
algodClient.value,
store.pqMode
);
if (!claimerOptedIn) {
const txn = algosdk.makeAssetTransferTxnWithSuggestedParamsFromObject({
sender: store.account.address,
Expand All @@ -88,7 +93,10 @@ async function claim() {
});
composer.addTransaction(txn, transactionSigner);
}
const fee = (Number(suggestedParams.minFee) * totalTxns).microAlgos();
const fee = (
Number(suggestedParams.minFee) * outerTxnCount +
innerTxnCount * 1000
).microAlgos();
composer.arc59Claim({ args: { asa: asset.assetId }, staticFee: fee });
toastId = toast.info("Processing...", {
duration: Infinity,
Expand All @@ -110,8 +118,11 @@ async function reject() {
try {
store.overlay = true;
const appClient = getAppClient();
const suggestedParams = await algodClient.value.getTransactionParams().do();
const fee = (Number(suggestedParams.minFee) * 3).microAlgos();
const suggestedParams = await getSuggestedParams(
algodClient.value,
store.pqMode
);
const fee = (Number(suggestedParams.minFee) + 2000).microAlgos();
toastId = toast.info("Processing...", {
duration: Infinity,
});
Expand Down
17 changes: 17 additions & 0 deletions src/components/NavWallet.vue
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import { bigintToString, formatAddr } from "@/lib/utils";
import { useWallet } from "@txnlab/use-wallet-vue";
import { Clipboard, LogOut, Wallet2 } from "@lucide/vue";
import { toast } from "vue-sonner";
import { set } from "idb-keyval";

const store = useAppStore();
const { activeAddress, activeWallet } = useWallet();
Expand Down Expand Up @@ -32,6 +33,11 @@ async function handleDisconnect() {
}
}

async function setPqMode() {
await set("pqMode", !store.pqMode);
await store.getCache();
}

const activeAvatar = computed<string>(
() => getAvatarUrl(activeAddress.value) || ""
);
Expand Down Expand Up @@ -135,6 +141,17 @@ function getAvatarUrl(addr: string | null) {
</DropdownMenuGroup>
<DropdownMenuSeparator />
</template>
<DropdownMenuItem>
<div class="flex space-x-2" @click.stop>
<Checkbox
id="pqMode"
v-model="store.pqMode"
class="border-gray-500"
@click.prevent="setPqMode()"
/>
<Label for="pqMode">PQ Mode (3x fee)</Label>
</div>
</DropdownMenuItem>
<DropdownMenuItem @click="handleCopyAddress()">
<Clipboard />
Copy Address
Expand Down
11 changes: 7 additions & 4 deletions src/components/VanitySell.vue
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<script lang="ts" setup>
import { vanityAbi } from "@/data";
import { bigintAmount, delay, execAtc } from "@/utils";
import { bigintAmount, delay, execAtc, getSuggestedParams } from "@/utils";
import { useWallet } from "@txnlab/use-wallet-vue";
import algosdk from "algosdk";
import { X } from "@lucide/vue";
Expand Down Expand Up @@ -70,10 +70,11 @@ async function sell() {
.accountInformation(m2a.value.addr)
.do();
const atc = new algosdk.AtomicTransactionComposer();
const suggestedParams = await algodClient.value.getTransactionParams().do();
const suggestedParams = await getSuggestedParams(
algodClient.value,
store.pqMode
);

suggestedParams.fee = suggestedParams.minFee * 2n;
suggestedParams.flatFee = true;
const appAddr = algosdk.getApplicationAddress(store.network.vanityId);
const price = bigintAmount(vanity.value.price!, 6);
const tax = Math.floor(Number(price) / 20);
Expand All @@ -84,6 +85,7 @@ async function sell() {
receiver: appAddr,
amount: tax,
});
payTxn.fee += 1000n;

const txnWithSigner = { txn: payTxn, signer: transactionSigner };
const key = m2a.value.sk.slice(0, 32);
Expand All @@ -93,6 +95,7 @@ async function sell() {
const optinOrNoop = optedIn
? algosdk.OnApplicationComplete.NoOpOC
: algosdk.OnApplicationComplete.OptInOC;
suggestedParams.flatFee = true;
suggestedParams.fee = 0n;
const method = vanityAbi.methods.find((m) => m.name == "post");
if (!method) throw Error("Invalid Method");
Expand Down
16 changes: 7 additions & 9 deletions src/pages/burn.vue
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<script lang="ts" setup>
import router from "@/router";
import burnTeal from "@/teal/burn.teal?raw";
import { bigintAmount, execAtc } from "@/utils";
import { bigintAmount, execAtc, getSuggestedParams } from "@/utils";
import { useWallet } from "@txnlab/use-wallet-vue";
import algosdk, {
IntDecoding,
Expand Down Expand Up @@ -109,12 +109,12 @@ async function burn() {
const valid = validate();
if (!valid) return;
const atc = new algosdk.AtomicTransactionComposer();
const suggestedParams = await algodClient.value.getTransactionParams().do();
const suggestedParams = await getSuggestedParams(
algodClient.value,
store.pqMode
);

if (!opted.value && needFunding.value) {
suggestedParams.flatFee = true;
suggestedParams.fee = suggestedParams.minFee;

const txn = algosdk.makePaymentTxnWithSuggestedParamsFromObject({
receiver: lsig.value.hash,
sender: activeAddress.value!,
Expand All @@ -125,8 +125,6 @@ async function burn() {
}

if (!opted.value) {
suggestedParams.flatFee = true;
suggestedParams.fee = 0n;
const lsigAcct = new algosdk.LogicSigAccount(
new Uint8Array(Buffer.from(lsig.value.result, "base64"))
);
Expand All @@ -138,11 +136,10 @@ async function burn() {
assetIndex: assetId.value,
amount: 0,
});
txn.fee = 0n;
atc.addTransaction({ txn, signer: lsigSigner });
}

suggestedParams.flatFee = true;
suggestedParams.fee = suggestedParams.minFee * 2n;
if (amount.value || closeout.value) {
const burnObj: any = {
sender: activeAddress.value!,
Expand All @@ -156,6 +153,7 @@ async function burn() {
if (closeout.value) burnObj.closeRemainderTo = lsig.value.hash;
const txn =
algosdk.makeAssetTransferTxnWithSuggestedParamsFromObject(burnObj);
if (!opted.value) txn.fee += 1000n;
atc.addTransaction({ txn, signer: transactionSigner });
}
await execAtc(atc, algodClient.value, "Asset Burned");
Expand Down
12 changes: 9 additions & 3 deletions src/pages/keyreg.vue
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<script lang="ts" setup>
import type { KeyRegTxn } from "@/types";
import { execAtc } from "@/utils";
import { execAtc, getSuggestedParams } from "@/utils";
import { useWallet } from "@txnlab/use-wallet-vue";
import algosdk from "algosdk";
import { ClipboardPaste } from "@lucide/vue";
Expand Down Expand Up @@ -75,7 +75,10 @@ async function compose() {
console.log(Object.values(part.value));
if (!Object.values(part.value).every((val) => val))
throw Error("All fields are required");
const suggestedParams = await algodClient.value.getTransactionParams().do();
const suggestedParams = await getSuggestedParams(
algodClient.value,
store.pqMode
);
const atc = new algosdk.AtomicTransactionComposer();
part.value.sender = activeAddress.value!;
if (incentiveEligible.value) {
Expand Down Expand Up @@ -116,7 +119,10 @@ async function calcAvgBlockTime() {

async function offline() {
try {
const suggestedParams = await algodClient.value.getTransactionParams().do();
const suggestedParams = await getSuggestedParams(
algodClient.value,
store.pqMode
);
const atc = new algosdk.AtomicTransactionComposer();
const txn = algosdk.makeKeyRegistrationTxnWithSuggestedParamsFromObject({
sender: activeAddress.value!,
Expand Down
Loading
Loading