1
- import { Cell , CellMessage , CommonMessageInfo , ExternalMessage , InternalMessage , toNano } from "ton" ;
1
+ import { Cell , CellMessage , CommonMessageInfo , ExternalMessage , fromNano , InternalMessage , toNano } from "ton" ;
2
2
import { randomAddress } from "../../utils/randomAddress" ;
3
3
import { SbtItemData , SbtSingleData , OperationCodes , Queries } from "./SbtItem.data" ;
4
4
import { SbtItemLocal } from "./SbtItemLocal" ;
@@ -399,66 +399,9 @@ describe('sbt item smc', () => {
399
399
400
400
let op = response . readUintNumber ( 32 )
401
401
let queryId = response . readUintNumber ( 64 )
402
- let index = response . readUintNumber ( 256 )
403
- let owner = response . readAddress ( ) as Address
404
- let data = response . readRef ( )
405
- let revokedAt = response . readUintNumber ( 64 )
406
- response . readBit ( )
407
-
408
402
409
403
expect ( op ) . toEqual ( OperationCodes . OwnershipProofBounced )
410
404
expect ( queryId ) . toEqual ( 0 )
411
- expect ( index ) . toEqual ( 777 )
412
- expect ( owner . toFriendly ( ) ) . toEqual ( defaultConfig . ownerAddress . toFriendly ( ) )
413
- expect ( data . readUint ( 16 ) . toNumber ( ) ) . toEqual ( 888 )
414
- expect ( revokedAt ) . toEqual ( 0 )
415
- } )
416
-
417
- it ( 'should prove proof bounce to initiator' , async ( ) => {
418
- let sbt = await SbtItemLocal . createFromConfig ( defaultConfig )
419
-
420
- let dataCell = new Cell ( )
421
- dataCell . bits . writeUint ( 888 , 16 )
422
-
423
- let initer = randomAddress ( )
424
-
425
- let res = await sbt . contract . sendInternalMessage ( new InternalMessage ( {
426
- bounced : true ,
427
- to : sbt . address ,
428
- from : randomAddress ( ) ,
429
- value : toNano ( 1 ) ,
430
- bounce : false ,
431
- body : new CommonMessageInfo ( {
432
- body : new CellMessage ( Queries . ownerInfo ( {
433
- id : 777 ,
434
- initiator : initer ,
435
- owner : defaultConfig . ownerAddress ,
436
- data : dataCell ,
437
- } , true ) )
438
- } )
439
- } ) )
440
-
441
- expect ( res . exit_code ) . toEqual ( 0 )
442
-
443
- let [ responseMessage ] = res . actionList as [ SendMsgAction ]
444
- let response = responseMessage . message . body . beginParse ( )
445
-
446
- let op = response . readUintNumber ( 32 )
447
- let queryId = response . readUintNumber ( 64 )
448
- let index = response . readUintNumber ( 256 )
449
- let initiator = response . readAddress ( ) as Address
450
- let owner = response . readAddress ( ) as Address
451
- let data = response . readRef ( )
452
- let revokedAt = response . readUintNumber ( 64 )
453
- response . readBit ( )
454
-
455
- expect ( op ) . toEqual ( OperationCodes . OwnerInfoBounced )
456
- expect ( queryId ) . toEqual ( 0 )
457
- expect ( index ) . toEqual ( 777 )
458
- expect ( initiator . toFriendly ( ) ) . toEqual ( initer . toFriendly ( ) )
459
- expect ( owner . toFriendly ( ) ) . toEqual ( defaultConfig . ownerAddress . toFriendly ( ) )
460
- expect ( data . readUint ( 16 ) . toNumber ( ) ) . toEqual ( 888 )
461
- expect ( revokedAt ) . toEqual ( 0 )
462
405
} )
463
406
464
407
it ( 'should not verify ownership non bounced' , async ( ) => {
@@ -519,6 +462,45 @@ describe('sbt item smc', () => {
519
462
520
463
expect ( res . exit_code ) . toEqual ( 401 )
521
464
} )
465
+
466
+ it ( 'should not take excess' , async ( ) => {
467
+ let sbt = await SbtItemLocal . createFromConfig ( defaultConfig )
468
+ let res = await sbt . contract . sendInternalMessage ( new InternalMessage ( {
469
+ to : sbt . address ,
470
+ from : defaultConfig . authorityAddress ,
471
+ value : toNano ( 1 ) ,
472
+ bounce : false ,
473
+ body : new CommonMessageInfo ( {
474
+ body : new CellMessage ( Queries . takeExcess ( { } ) )
475
+ } )
476
+ } ) )
477
+
478
+ expect ( res . exit_code ) . toEqual ( 401 )
479
+ } )
480
+
481
+ it ( 'should take excess' , async ( ) => {
482
+ let sbt = await SbtItemLocal . createFromConfig ( defaultConfig )
483
+ let res = await sbt . contract . sendInternalMessage ( new InternalMessage ( {
484
+ to : sbt . address ,
485
+ from : defaultConfig . ownerAddress ,
486
+ value : toNano ( 1 ) ,
487
+ bounce : false ,
488
+ body : new CommonMessageInfo ( {
489
+ body : new CellMessage ( Queries . takeExcess ( { } ) )
490
+ } )
491
+ } ) )
492
+
493
+ expect ( res . exit_code ) . toEqual ( 0 )
494
+
495
+ let [ reserve , responseMessage ] = res . actionList as [ ReserveCurrencyAction , SendMsgAction ]
496
+ expect ( reserve . mode ) . toEqual ( 0 )
497
+ expect ( fromNano ( reserve . currency . coins ) ) . toEqual ( "0.05" )
498
+
499
+ let response = responseMessage . message . body . beginParse ( )
500
+ let op = response . readUintNumber ( 32 )
501
+ expect ( op ) . toEqual ( OperationCodes . excesses )
502
+ expect ( responseMessage . mode ) . toEqual ( 128 )
503
+ } )
522
504
} )
523
505
524
506
describe ( 'single sbt' , ( ) => {
@@ -858,65 +840,9 @@ describe('single sbt', () => {
858
840
859
841
let op = response . readUintNumber ( 32 )
860
842
let queryId = response . readUintNumber ( 64 )
861
- let index = response . readUintNumber ( 256 )
862
- let owner = response . readAddress ( ) as Address
863
- let data = response . readRef ( )
864
- let revokedAt = response . readUintNumber ( 64 )
865
- response . readBit ( )
866
843
867
844
expect ( op ) . toEqual ( OperationCodes . OwnershipProofBounced )
868
845
expect ( queryId ) . toEqual ( 0 )
869
- expect ( index ) . toEqual ( 777 )
870
- expect ( owner . toFriendly ( ) ) . toEqual ( defaultConfig . ownerAddress . toFriendly ( ) )
871
- expect ( data . readUint ( 16 ) . toNumber ( ) ) . toEqual ( 888 )
872
- expect ( revokedAt ) . toEqual ( 0 )
873
- } )
874
-
875
- it ( 'should prove proof bounce to initiator' , async ( ) => {
876
- let sbt = await SbtItemLocal . createSingle ( singleConfig )
877
-
878
- let dataCell = new Cell ( )
879
- dataCell . bits . writeUint ( 888 , 16 )
880
-
881
- let initer = randomAddress ( )
882
-
883
- let res = await sbt . contract . sendInternalMessage ( new InternalMessage ( {
884
- bounced : true ,
885
- to : sbt . address ,
886
- from : randomAddress ( ) ,
887
- value : toNano ( 1 ) ,
888
- bounce : false ,
889
- body : new CommonMessageInfo ( {
890
- body : new CellMessage ( Queries . ownerInfo ( {
891
- id : 777 ,
892
- initiator : initer ,
893
- owner : singleConfig . ownerAddress ,
894
- data : dataCell ,
895
- } , true ) )
896
- } )
897
- } ) )
898
-
899
- expect ( res . exit_code ) . toEqual ( 0 )
900
-
901
- let [ responseMessage ] = res . actionList as [ SendMsgAction ]
902
- let response = responseMessage . message . body . beginParse ( )
903
-
904
- let op = response . readUintNumber ( 32 )
905
- let queryId = response . readUintNumber ( 64 )
906
- let index = response . readUintNumber ( 256 )
907
- let initiator = response . readAddress ( ) as Address
908
- let owner = response . readAddress ( ) as Address
909
- let data = response . readRef ( )
910
- let revokedAt = response . readUintNumber ( 64 )
911
- response . readBit ( )
912
-
913
- expect ( op ) . toEqual ( OperationCodes . OwnerInfoBounced )
914
- expect ( queryId ) . toEqual ( 0 )
915
- expect ( index ) . toEqual ( 777 )
916
- expect ( initiator . toFriendly ( ) ) . toEqual ( initer . toFriendly ( ) )
917
- expect ( owner . toFriendly ( ) ) . toEqual ( defaultConfig . ownerAddress . toFriendly ( ) )
918
- expect ( data . readUint ( 16 ) . toNumber ( ) ) . toEqual ( 888 )
919
- expect ( revokedAt ) . toEqual ( 0 )
920
846
} )
921
847
922
848
it ( 'should not pass prove ownership non bounced' , async ( ) => {
@@ -1006,4 +932,43 @@ describe('single sbt', () => {
1006
932
1007
933
expect ( res . exit_code ) . toEqual ( 401 )
1008
934
} )
935
+
936
+ it ( 'should not take excess' , async ( ) => {
937
+ let sbt = await SbtItemLocal . createSingle ( singleConfig )
938
+ let res = await sbt . contract . sendInternalMessage ( new InternalMessage ( {
939
+ to : sbt . address ,
940
+ from : defaultConfig . authorityAddress ,
941
+ value : toNano ( 1 ) ,
942
+ bounce : false ,
943
+ body : new CommonMessageInfo ( {
944
+ body : new CellMessage ( Queries . takeExcess ( { } ) )
945
+ } )
946
+ } ) )
947
+
948
+ expect ( res . exit_code ) . toEqual ( 401 )
949
+ } )
950
+
951
+ it ( 'should take excess' , async ( ) => {
952
+ let sbt = await SbtItemLocal . createSingle ( singleConfig )
953
+ let res = await sbt . contract . sendInternalMessage ( new InternalMessage ( {
954
+ to : sbt . address ,
955
+ from : defaultConfig . ownerAddress ,
956
+ value : toNano ( 1 ) ,
957
+ bounce : false ,
958
+ body : new CommonMessageInfo ( {
959
+ body : new CellMessage ( Queries . takeExcess ( { } ) )
960
+ } )
961
+ } ) )
962
+
963
+ expect ( res . exit_code ) . toEqual ( 0 )
964
+
965
+ let [ reserve , responseMessage ] = res . actionList as [ ReserveCurrencyAction , SendMsgAction ]
966
+ expect ( reserve . mode ) . toEqual ( 0 )
967
+ expect ( fromNano ( reserve . currency . coins ) ) . toEqual ( "0.05" )
968
+
969
+ let response = responseMessage . message . body . beginParse ( )
970
+ let op = response . readUintNumber ( 32 )
971
+ expect ( op ) . toEqual ( OperationCodes . excesses )
972
+ expect ( responseMessage . mode ) . toEqual ( 128 )
973
+ } )
1009
974
} )
0 commit comments