@@ -3,6 +3,9 @@ import { Cardano } from '@cardano-sdk/core';
33import { OutputValidator , createOutputValidator } from '../../src' ;
44
55describe ( 'createOutputValidator' , ( ) => {
6+ const address = Cardano . PaymentAddress (
7+ 'addr_test1qqydn46r6mhge0kfpqmt36m6q43knzsd9ga32n96m89px3nuzcjqw982pcftgx53fu5527z2cj2tkx2h8ux2vxsg475qypp3m9'
8+ ) ;
69 let validator : OutputValidator ;
710
811 beforeAll ( ( ) => {
@@ -14,67 +17,101 @@ describe('createOutputValidator', () => {
1417 } ) ;
1518 } ) ;
1619
17- it ( 'validateValue validates minimum coin quantity' , async ( ) => {
18- expect ( ( await validator . validateValue ( { coins : 2_000_000n } ) ) . coinMissing ) . toBe ( 0n ) ;
19- expect ( ( await validator . validateValue ( { coins : 500_000n } ) ) . coinMissing ) . toBeGreaterThan ( 0n ) ;
20- } ) ;
20+ describe ( 'validateOutput' , ( ) => {
21+ it ( 'validates minimum coin quantity' , async ( ) => {
22+ expect ( ( await validator . validateOutput ( { address, value : { coins : 2_000_000n } } ) ) . coinMissing ) . toBe ( 0n ) ;
23+ expect ( ( await validator . validateOutput ( { address, value : { coins : 500_000n } } ) ) . coinMissing ) . toBeGreaterThan ( 0n ) ;
24+ } ) ;
2125
22- it ( 'validateValue validates bundle size' , async ( ) => {
23- expect (
24- (
25- await validator . validateValue ( {
26- assets : new Map ( [
27- [ Cardano . AssetId ( 'b01fb3b8c3dd6b3705a5dc8bcd5a70759f70ad5d97a72005caeac3c652657675746f31333237' ) , 1n ]
28- ] ) ,
29- coins : 2_000_000n
30- } )
31- ) . tokenBundleSizeExceedsLimit
32- ) . toBe ( false ) ;
33- expect (
34- (
35- await validator . validateValue ( {
36- assets : new Map ( [
37- [ Cardano . AssetId ( 'b01fb3b8c3dd6b3705a5dc8bcd5a70759f70ad5d97a72005caeac3c652657675746f31333237' ) , 1n ] ,
38- [ Cardano . AssetId ( 'c01fb3b8c3dd6b3705a5dc8bcd5a70759f70ad5d97a72005caeac3c652657675746f31333237' ) , 2n ]
39- ] ) ,
40- coins : 2_000_000n
41- } )
42- ) . tokenBundleSizeExceedsLimit
43- ) . toBe ( true ) ;
44- } ) ;
26+ it ( 'validates bundle size' , async ( ) => {
27+ expect (
28+ (
29+ await validator . validateOutput ( {
30+ address,
31+ value : {
32+ assets : new Map ( [
33+ [ Cardano . AssetId ( 'b01fb3b8c3dd6b3705a5dc8bcd5a70759f70ad5d97a72005caeac3c652657675746f31333237' ) , 1n ]
34+ ] ) ,
35+ coins : 2_000_000n
36+ }
37+ } )
38+ ) . tokenBundleSizeExceedsLimit
39+ ) . toBe ( false ) ;
40+ expect (
41+ (
42+ await validator . validateOutput ( {
43+ address,
44+ value : {
45+ assets : new Map ( [
46+ [ Cardano . AssetId ( 'b01fb3b8c3dd6b3705a5dc8bcd5a70759f70ad5d97a72005caeac3c652657675746f31333237' ) , 1n ] ,
47+ [ Cardano . AssetId ( 'c01fb3b8c3dd6b3705a5dc8bcd5a70759f70ad5d97a72005caeac3c652657675746f31333237' ) , 2n ]
48+ ] ) ,
49+ coins : 2_000_000n
50+ }
51+ } )
52+ ) . tokenBundleSizeExceedsLimit
53+ ) . toBe ( true ) ;
54+ } ) ;
4555
46- it ( 'validateValue validates negative asset quantity' , async ( ) => {
47- expect (
48- (
49- await validator . validateValue ( {
50- assets : new Map ( [
51- [ Cardano . AssetId ( 'b01fb3b8c3dd6b3705a5dc8bcd5a70759f70ad5d97a72005caeac3c652657675746f31333237' ) , 1n ]
52- ] ) ,
53- coins : 2_000_000n
54- } )
55- ) . negativeAssetQty
56- ) . toBe ( false ) ;
57- expect (
58- (
59- await validator . validateValue ( {
60- assets : new Map ( [
61- [ Cardano . AssetId ( 'b01fb3b8c3dd6b3705a5dc8bcd5a70759f70ad5d97a72005caeac3c652657675746f31333237' ) , 1n ] ,
62- [ Cardano . AssetId ( 'c01fb3b8c3dd6b3705a5dc8bcd5a70759f70ad5d97a72005caeac3c652657675746f31333237' ) , - 2n ]
63- ] ) ,
64- coins : 2_000_000n
65- } )
66- ) . negativeAssetQty
67- ) . toBe ( true ) ;
68- expect (
69- (
70- await validator . validateValue ( {
71- assets : new Map ( [
72- [ Cardano . AssetId ( 'b01fb3b8c3dd6b3705a5dc8bcd5a70759f70ad5d97a72005caeac3c652657675746f31333237' ) , 1n ] ,
73- [ Cardano . AssetId ( 'c01fb3b8c3dd6b3705a5dc8bcd5a70759f70ad5d97a72005caeac3c652657675746f31333237' ) , 0n ]
74- ] ) ,
75- coins : 2_000_000n
76- } )
77- ) . negativeAssetQty
78- ) . toBe ( true ) ;
56+ it ( 'validates negative asset quantity' , async ( ) => {
57+ expect (
58+ (
59+ await validator . validateOutput ( {
60+ address,
61+ value : {
62+ assets : new Map ( [
63+ [ Cardano . AssetId ( 'b01fb3b8c3dd6b3705a5dc8bcd5a70759f70ad5d97a72005caeac3c652657675746f31333237' ) , 1n ]
64+ ] ) ,
65+ coins : 2_000_000n
66+ }
67+ } )
68+ ) . negativeAssetQty
69+ ) . toBe ( false ) ;
70+ expect (
71+ (
72+ await validator . validateOutput ( {
73+ address,
74+ value : {
75+ assets : new Map ( [
76+ [ Cardano . AssetId ( 'b01fb3b8c3dd6b3705a5dc8bcd5a70759f70ad5d97a72005caeac3c652657675746f31333237' ) , 1n ] ,
77+ [ Cardano . AssetId ( 'c01fb3b8c3dd6b3705a5dc8bcd5a70759f70ad5d97a72005caeac3c652657675746f31333237' ) , - 2n ]
78+ ] ) ,
79+ coins : 2_000_000n
80+ }
81+ } )
82+ ) . negativeAssetQty
83+ ) . toBe ( true ) ;
84+ expect (
85+ (
86+ await validator . validateOutput ( {
87+ address,
88+ value : {
89+ assets : new Map ( [
90+ [ Cardano . AssetId ( 'b01fb3b8c3dd6b3705a5dc8bcd5a70759f70ad5d97a72005caeac3c652657675746f31333237' ) , 1n ] ,
91+ [ Cardano . AssetId ( 'c01fb3b8c3dd6b3705a5dc8bcd5a70759f70ad5d97a72005caeac3c652657675746f31333237' ) , 0n ]
92+ ] ) ,
93+ coins : 2_000_000n
94+ }
95+ } )
96+ ) . negativeAssetQty
97+ ) . toBe ( true ) ;
98+ } ) ;
99+
100+ it ( 'uses output address size as minimum coin computation parameter' , async ( ) => {
101+ const value : Cardano . Value = { coins : 123n } ;
102+ const { minimumCoin : byronAddressMinimumCoin } = await validator . validateOutput ( {
103+ address : Cardano . PaymentAddress (
104+ 'DdzFFzCqrht4PWfBGtmrQz4x1GkZHYLVGbK7aaBkjWxujxzz3L5GxCgPiTsks5RjUr3yX9KvwKjNJBt7ZzPCmS3fUQrGeRvo9Y1YBQKQ'
105+ ) ,
106+ value
107+ } ) ;
108+ const { minimumCoin : shelleyAddressMinimumCoin } = await validator . validateOutput ( {
109+ address : Cardano . PaymentAddress (
110+ 'addr_test1qqydn46r6mhge0kfpqmt36m6q43knzsd9ga32n96m89px3nuzcjqw982pcftgx53fu5527z2cj2tkx2h8ux2vxsg475qypp3m9'
111+ ) ,
112+ value
113+ } ) ;
114+ expect ( byronAddressMinimumCoin ) . toBeGreaterThan ( shelleyAddressMinimumCoin ) ;
115+ } ) ;
79116 } ) ;
80117} ) ;
0 commit comments