-
Notifications
You must be signed in to change notification settings - Fork 1
/
DistributeNFT721CollateralCondition.ts
77 lines (72 loc) · 2.53 KB
/
DistributeNFT721CollateralCondition.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
74
75
76
77
import { InstantiableConfig } from '../../../Instantiable.abstract'
import { didZeroX, zeroX } from '../../../utils/index'
import {
Condition,
ConditionContext,
ProviderCondition
} from '../conditions/Condition.abstract'
import Account from '../../../nevermined/Account'
import { TxParameters } from '../ContractBase'
export interface DistributeNFTCollateralConditionContext extends ConditionContext {
vaultAddress: string
nftContractAddress: string
}
/**
* Condition allowing to transfer an NFT either to the original owner or a lender
* depending on the loan status.
*/
export class DistributeNFTCollateralCondition extends ProviderCondition<DistributeNFTCollateralConditionContext> {
public static async getInstance(
config: InstantiableConfig
): Promise<DistributeNFTCollateralCondition> {
return Condition.getInstance(
config,
'DistributeNFTCollateralCondition',
DistributeNFTCollateralCondition,
true
)
}
/**
* Generates the ash of condition inputs.
* @param did - The DID of the asset with NFTs.
* @param vaultAddress - The address of the vault contract where the NFT is locked.
* @param nftContractAddress - The address of the NFT721 contract
* @returns Hash of all the values
*/
public params(did: string, vaultAddress: string, nftContractAddress: string) {
return super.params(didZeroX(did), zeroX(vaultAddress), zeroX(nftContractAddress))
}
public async paramsFromDDO({
ddo,
vaultAddress,
nftContractAddress
}: DistributeNFTCollateralConditionContext) {
return this.params(ddo.shortId(), vaultAddress, nftContractAddress)
}
/**
* Fulfill the distribute NFT collateral condition.
* Only the borrower or the lender can call this method.
*
* @param agreementId - The agreement identifier.
* @param did - The DID of the asset with NFTs.
* @param vaultAddress - The address of the vault contract where the NFT is locked.
* @param nftContractAddress - The address of the NFT721 contract
* @param from -
* @returns Condition state.
*/
public fulfill(
agreementId: string,
did: string,
vaultAddress: string,
nftContractAddress: string,
from?: Account,
txParams?: TxParameters
) {
return super.fulfillPlain(
agreementId,
[didZeroX(did), zeroX(vaultAddress), zeroX(nftContractAddress)],
from,
txParams
)
}
}