-
Notifications
You must be signed in to change notification settings - Fork 458
/
transfer.ts
73 lines (64 loc) 路 1.82 KB
/
transfer.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
/*
* Copyright 漏 2023 Lisk Foundation
*
* See the LICENSE file at the top-level directory of this distribution
* for licensing information.
*
* Unless otherwise agreed in a custom licensing agreement with the Lisk Foundation,
* no part of this software, including this file, may be copied, modified,
* propagated, or distributed except according to the terms contained in the
* LICENSE file.
*
* Removal or modification of this copyright notice is prohibited.
*/
import {
CommandExecuteContext,
CommandVerifyContext,
VerificationResult,
VerifyStatus,
} from '../../../state_machine';
import { BaseCommand } from '../../base_command';
import { transferParamsSchema } from '../schemas';
import { InternalMethod } from '../internal_method';
export interface TransferParams {
nftID: Buffer;
recipientAddress: Buffer;
data: string;
}
/**
* The Transfer command of the NFT modules transfers an NFT from one account to another.
*
*/
export class TransferCommand extends BaseCommand {
public schema = transferParamsSchema;
private _internalMethod!: InternalMethod;
public init(args: { internalMethod: InternalMethod }) {
this._internalMethod = args.internalMethod;
}
public async verify(context: CommandVerifyContext<TransferParams>): Promise<VerificationResult> {
const { params } = context;
try {
await this._internalMethod.verifyTransfer(
context.getMethodContext(),
context.transaction.senderAddress,
params.nftID,
);
} catch (error) {
return {
status: VerifyStatus.FAIL,
error: error as Error,
};
}
return {
status: VerifyStatus.OK,
};
}
public async execute(context: CommandExecuteContext<TransferParams>): Promise<void> {
const { params } = context;
await this._internalMethod.transfer(
context.getMethodContext(),
params.recipientAddress,
params.nftID,
);
}
}