Skip to content

Commit

Permalink
feat: add set flags for classic asset (#165)
Browse files Browse the repository at this point in the history
* feat: add set flags for classic asset

* chore: bump version to 0.12.0
  • Loading branch information
fazzatti authored Aug 2, 2024
1 parent baafc34 commit 02503dd
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 2 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "stellar-plus",
"version": "0.11.0",
"version": "0.12.0",
"description": "beta version of stellar-plus, an all-in-one sdk for the Stellar blockchain",
"main": "./lib/index.js",
"types": "./lib/index.d.ts",
Expand Down
46 changes: 45 additions & 1 deletion src/stellar-plus/asset/classic/index.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,18 @@
import { Horizon as HorizonNamespace, Operation, Asset as StellarAsset } from '@stellar/stellar-sdk'
import {
AuthClawbackEnabledFlag,
AuthFlag,
AuthImmutableFlag,
AuthRequiredFlag,
AuthRevocableFlag,
Horizon as HorizonNamespace,
Operation,
Asset as StellarAsset,
} from '@stellar/stellar-sdk'

import { AccountHandler } from 'stellar-plus/account/account-handler/types'
import {
ClassicAssetHandlerConstructorArgs,
ControlFlags,
ClassicAssetHandler as IClassicAssetHandler,
} from 'stellar-plus/asset/classic/types'
import { AssetTypes } from 'stellar-plus/asset/types'
Expand Down Expand Up @@ -242,6 +252,40 @@ export class ClassicAssetHandler implements IClassicAssetHandler {
return result.response
}

public async setFlags(
args: {
controlFlags: ControlFlags
} & TransactionInvocation
): Promise<HorizonNamespace.HorizonApi.SubmitTransactionResponse> {
this.requireIssuerAccount() // Enforces the issuer account to be set.

const { controlFlags } = args

const txInvocation = args as TransactionInvocation
const updatedTxInvocation = {
...txInvocation,
signers: [...txInvocation.signers, this.issuerAccount!], // Adds the issuer account as a signer. Issue account initialization is already verified by requireIssuerAccount().
}

let flags = 0
if (controlFlags.authorizationRequired) flags |= AuthRequiredFlag
if (controlFlags.authorizationRevocable) flags |= AuthRevocableFlag
if (controlFlags.authorizationImmutable) flags |= AuthImmutableFlag
if (controlFlags.clawbackEnabled) flags |= AuthClawbackEnabledFlag

const setFlags = Operation.setOptions({
setFlags: flags as AuthFlag,
source: this.asset.getIssuer(),
})

const result = (await this.classicTransactionPipeline.execute({
txInvocation: updatedTxInvocation,
operations: [setFlags],
})) as ClassicTransactionPipelineOutputSimple

return result.response
}

public async clawback(): Promise<void> {
throw new Error('Method not implemented.')
}
Expand Down
11 changes: 11 additions & 0 deletions src/stellar-plus/asset/classic/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,10 @@ export type ClassicTokenInterfaceManagement = {
amount: number
} & TransactionInvocation
) => Promise<Horizon.HorizonApi.SubmitTransactionResponse>

setFlags: (
args: { controlFlags: ControlFlags } & TransactionInvocation
) => Promise<Horizon.HorizonApi.SubmitTransactionResponse>
}

export type ClassicTokenInterfaceUser = {
Expand All @@ -49,3 +53,10 @@ export type ClassicUtils = {
args: { to: string; amount: number } & TransactionInvocation
) => Promise<Horizon.HorizonApi.SubmitTransactionResponse>
}

export type ControlFlags = {
authorizationRequired?: boolean
authorizationRevocable?: boolean
clawbackEnabled?: boolean
authorizationImmutable?: boolean
}

0 comments on commit 02503dd

Please sign in to comment.