1- import { Algodv2 , encodeUint64 , makeApplicationNoOpTxnFromObject } from "algosdk" ;
1+ import {
2+ Algodv2 ,
3+ assignGroupID ,
4+ encodeUint64 ,
5+ makeApplicationNoOpTxnFromObject ,
6+ SuggestedParams
7+ } from "algosdk" ;
28
39import { SignerTransaction , SupportedNetwork } from "./util/commonTypes" ;
410import { 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