Skip to content

Commit a145722

Browse files
authored
Merge pull request #58 from tinymanorg/feat/compensation-staking-program-txns
feat(staking): Extend commit txn util to support required asset programs
2 parents e454c8f + be42cbd commit a145722

File tree

5 files changed

+103
-40
lines changed

5 files changed

+103
-40
lines changed

dist/index.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/stake.d.ts

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,7 @@
1-
import {Algodv2} from "algosdk";
1+
import {Algodv2, SuggestedParams} from "algosdk";
22
import {SignerTransaction, SupportedNetwork} from "./util/commonTypes";
3-
declare function prepareCommitTransactions({
4-
client,
5-
stakingAppID,
6-
initiatorAddr,
7-
liquidityAssetID,
8-
program,
9-
amount
10-
}: {
11-
client: Algodv2;
3+
interface CreateCommitTxnOptions {
4+
suggestedParams: SuggestedParams;
125
stakingAppID: number;
136
initiatorAddr: string;
147
liquidityAssetID: number;
@@ -17,6 +10,18 @@ declare function prepareCommitTransactions({
1710
id: number;
1811
};
1912
amount: number | bigint;
13+
}
14+
declare function prepareCommitTransactions({
15+
client,
16+
stakingAppID,
17+
program,
18+
requiredAssetID,
19+
liquidityAssetID,
20+
amount,
21+
initiatorAddr
22+
}: Omit<CreateCommitTxnOptions, "suggestedParams"> & {
23+
client: Algodv2;
24+
requiredAssetID?: number;
2025
}): Promise<SignerTransaction[]>;
2126
declare function getStakingAppID(network: SupportedNetwork): 51948952 | 649588853;
2227
export {prepareCommitTransactions, getStakingAppID};

package-lock.json

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

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "tinyman",
3-
"version": "1.1.1",
3+
"version": "1.2.0",
44
"description": "Tinyman JS SDK",
55
"author": "Tinyman Core Team",
66
"license": "MIT",

src/stake.ts

Lines changed: 84 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,16 @@
1-
import {Algodv2, encodeUint64, makeApplicationNoOpTxnFromObject} from "algosdk";
1+
import {
2+
Algodv2,
3+
assignGroupID,
4+
encodeUint64,
5+
makeApplicationNoOpTxnFromObject,
6+
SuggestedParams
7+
} from "algosdk";
28

39
import {SignerTransaction, SupportedNetwork} from "./util/commonTypes";
410
import {encodeString, joinByteArrays} from "./util/util";
511

6-
async function prepareCommitTransactions({
7-
client,
8-
stakingAppID,
9-
initiatorAddr,
10-
liquidityAssetID,
11-
program,
12-
amount
13-
}: {
14-
client: Algodv2;
12+
interface CreateCommitTxnOptions {
13+
suggestedParams: SuggestedParams;
1514
stakingAppID: number;
1615
initiatorAddr: string;
1716
liquidityAssetID: number;
@@ -20,28 +19,87 @@ async function prepareCommitTransactions({
2019
id: number;
2120
};
2221
amount: number | bigint;
23-
}): Promise<SignerTransaction[]> {
24-
const suggestedParams = await client.getTransactionParams().do();
22+
}
2523

24+
function createCommitTxnWithSuggestedParams({
25+
suggestedParams,
26+
stakingAppID,
27+
initiatorAddr,
28+
liquidityAssetID,
29+
program,
30+
amount
31+
}: CreateCommitTxnOptions) {
2632
const amountEncoded = encodeUint64(amount);
2733
const programIdEncoded = encodeUint64(program.id);
2834

35+
return makeApplicationNoOpTxnFromObject({
36+
appIndex: stakingAppID,
37+
from: initiatorAddr,
38+
suggestedParams,
39+
foreignAssets: [liquidityAssetID],
40+
accounts: [program.accountAddress],
41+
appArgs: [encodeString("commit"), amountEncoded],
42+
note: joinByteArrays([
43+
encodeString("tinymanStaking/v1:b"),
44+
programIdEncoded,
45+
encodeUint64(liquidityAssetID),
46+
amountEncoded
47+
])
48+
});
49+
}
50+
51+
async function prepareCommitTransactions({
52+
client,
53+
stakingAppID,
54+
program,
55+
requiredAssetID,
56+
liquidityAssetID,
57+
amount,
58+
initiatorAddr
59+
}: Omit<CreateCommitTxnOptions, "suggestedParams"> & {
60+
client: Algodv2;
61+
requiredAssetID?: number;
62+
}): Promise<SignerTransaction[]> {
63+
const suggestedParams = await client.getTransactionParams().do();
64+
65+
const commitTxn = createCommitTxnWithSuggestedParams({
66+
suggestedParams,
67+
stakingAppID,
68+
program,
69+
liquidityAssetID,
70+
initiatorAddr,
71+
amount
72+
});
73+
74+
let txnGroup = [commitTxn];
75+
76+
if (typeof requiredAssetID === "number") {
77+
const logBalanceTxn = makeApplicationNoOpTxnFromObject({
78+
appIndex: stakingAppID,
79+
from: initiatorAddr,
80+
suggestedParams,
81+
foreignAssets: [requiredAssetID],
82+
accounts: [program.accountAddress],
83+
appArgs: [encodeString("log_balance")]
84+
});
85+
86+
txnGroup = assignGroupID([commitTxn, logBalanceTxn]);
87+
88+
return [
89+
{
90+
txn: txnGroup[0],
91+
signers: [initiatorAddr]
92+
},
93+
{
94+
txn: txnGroup[1],
95+
signers: [initiatorAddr]
96+
}
97+
];
98+
}
99+
29100
return [
30101
{
31-
txn: makeApplicationNoOpTxnFromObject({
32-
appIndex: stakingAppID,
33-
from: initiatorAddr,
34-
suggestedParams,
35-
foreignAssets: [liquidityAssetID],
36-
accounts: [program.accountAddress],
37-
appArgs: [encodeString("commit"), amountEncoded],
38-
note: joinByteArrays([
39-
encodeString("tinymanStaking/v1:b"),
40-
programIdEncoded,
41-
encodeUint64(liquidityAssetID),
42-
amountEncoded
43-
])
44-
}),
102+
txn: txnGroup[0],
45103
signers: [initiatorAddr]
46104
}
47105
];

0 commit comments

Comments
 (0)