mirror of
https://github.com/IT4Change/gradido.git
synced 2026-04-06 01:25:28 +00:00
75 lines
2.7 KiB
TypeScript
75 lines
2.7 KiB
TypeScript
import {
|
|
AuthenticatedEncryption,
|
|
EncryptedMemo,
|
|
GradidoTransactionBuilder,
|
|
GradidoTransfer,
|
|
TransferAmount,
|
|
} from 'gradido-blockchain-js'
|
|
import * as v from 'valibot'
|
|
import { KeyPairIdentifierLogic } from '../../data/KeyPairIdentifier.logic'
|
|
import {
|
|
DeferredTransferTransaction,
|
|
deferredTransferTransactionSchema,
|
|
Transaction,
|
|
} from '../../schemas/transaction.schema'
|
|
import { HieroId, IdentifierSeed, identifierSeedSchema } from '../../schemas/typeGuard.schema'
|
|
import { ResolveKeyPair } from '../resolveKeyPair/ResolveKeyPair.context'
|
|
import { AbstractTransactionRole } from './AbstractTransaction.role'
|
|
|
|
export class DeferredTransferTransactionRole extends AbstractTransactionRole {
|
|
private readonly seed: IdentifierSeed
|
|
private readonly deferredTransferTransaction: DeferredTransferTransaction
|
|
constructor(transaction: Transaction) {
|
|
super()
|
|
this.deferredTransferTransaction = v.parse(deferredTransferTransactionSchema, transaction)
|
|
this.seed = v.parse(identifierSeedSchema, this.deferredTransferTransaction.linkedUser.seed)
|
|
}
|
|
|
|
getSenderCommunityTopicId(): HieroId {
|
|
return this.deferredTransferTransaction.user.communityTopicId
|
|
}
|
|
|
|
getRecipientCommunityTopicId(): HieroId {
|
|
throw new Error('deferred transfer: cannot be used as cross group transaction yet')
|
|
}
|
|
|
|
public async getGradidoTransactionBuilder(): Promise<GradidoTransactionBuilder> {
|
|
const builder = new GradidoTransactionBuilder()
|
|
const senderKeyPair = await ResolveKeyPair(
|
|
new KeyPairIdentifierLogic(this.deferredTransferTransaction.user),
|
|
)
|
|
const recipientKeyPair = await ResolveKeyPair(
|
|
new KeyPairIdentifierLogic({
|
|
communityTopicId: this.deferredTransferTransaction.linkedUser.communityTopicId,
|
|
communityId: this.deferredTransferTransaction.linkedUser.communityId,
|
|
seed: this.seed,
|
|
}),
|
|
)
|
|
|
|
builder
|
|
.setCreatedAt(this.deferredTransferTransaction.createdAt)
|
|
.addMemo(
|
|
new EncryptedMemo(
|
|
this.deferredTransferTransaction.memo,
|
|
new AuthenticatedEncryption(senderKeyPair),
|
|
new AuthenticatedEncryption(recipientKeyPair),
|
|
),
|
|
)
|
|
.setDeferredTransfer(
|
|
new GradidoTransfer(
|
|
new TransferAmount(
|
|
senderKeyPair.getPublicKey(),
|
|
this.deferredTransferTransaction.amount.calculateCompoundInterest(
|
|
this.deferredTransferTransaction.timeoutDuration.getSeconds(),
|
|
),
|
|
this.deferredTransferTransaction.user.communityId,
|
|
),
|
|
recipientKeyPair.getPublicKey(),
|
|
),
|
|
this.deferredTransferTransaction.timeoutDuration,
|
|
)
|
|
.sign(senderKeyPair)
|
|
return builder
|
|
}
|
|
}
|