Skip to content

Commit

Permalink
Merge pull request #268 from tqtezos/rinn7e/#257-prevent-zero-tez
Browse files Browse the repository at this point in the history
  • Loading branch information
rinn7e authored May 26, 2021
2 parents 9d2d3c1 + 77a0f13 commit 14c1f16
Show file tree
Hide file tree
Showing 4 changed files with 70 additions and 9 deletions.
21 changes: 21 additions & 0 deletions haskell/test/Test/Ligo/RegistryDAO.hs
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,27 @@ test_RegistryDAO =
baseDao (Call @"Propose") (ProposeParams proposalSize proposalMeta)
& expectFailProposalCheck baseDao

, nettestScenarioCaps "proposal_check: fail when xtz transfer contains 0 mutez" $
withOriginated 2
(\(admin: wallet1:_) ->
initialStorageWithExplictRegistryDAOConfig admin [wallet1]
& setExtra @Natural [mt|min_xtz_amount|] 0
) $
\(_:wallet1:_) _ baseDao _ -> do
let proposalMeta = lPackValueRaw @RegistryDaoProposalMetadata $
Transfer_proposal $
TransferProposal 1 [ xtzTransferType 0 wallet1 ] []
let proposalSize = metadataSize proposalMeta
withSender wallet1 $
call baseDao (Call @"Freeze") (#amount .! proposalSize)

-- Advance one voting period to a proposing stage.
advanceTime (sec $ 11)

withSender wallet1 $ call baseDao (Call @"Propose")
(ProposeParams proposalSize proposalMeta)
& expectFailProposalCheck baseDao

, nettestScenarioCaps "checks it fails if required tokens are not frozen" $
withOriginated 2
(\(admin: wallet1:_) -> initialStorageWithExplictRegistryDAOConfig admin [wallet1]) $
Expand Down
50 changes: 43 additions & 7 deletions haskell/test/Test/Ligo/TreasuryDAO.hs
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,13 @@ test_TreasuryDAO = testGroup "TreasuryDAO Tests"
\_emulated -> flushTokenTransfer
, nettestScenarioOnEmulator "can flush a Xtz transfer proposal" $
\_emulated -> flushXtzTransfer
]

, testGroup "proposal_check:"
[ nettestScenarioOnEmulator "fail when xtz transfer contains 0 mutez" $
\_emulated -> proposalCheckFailZeroMutez

-- -- TODO #260: check all fail scenario of proposal_check
-- TODO #260: check all fail scenario of proposal_check
]
]

Expand All @@ -62,7 +67,7 @@ metadataSize md = fromIntegral $ BS.length md
validProposal :: HasCallStack => NettestScenario m
validProposal = uncapsNettest $ withFrozenCallStack do
DaoOriginateData{..} <-
originateTreasuryDaoWithBalance $ \owner1_ owner2_ ->
originateTreasuryDaoWithBalance id $ \owner1_ owner2_ ->
[ ((owner1_, frozenTokenId), 200)
, ((owner2_, frozenTokenId), 200)
]
Expand Down Expand Up @@ -93,7 +98,7 @@ validProposal = uncapsNettest $ withFrozenCallStack do
flushTokenTransfer :: HasCallStack => NettestScenario m
flushTokenTransfer = uncapsNettest $ withFrozenCallStack $ do
DaoOriginateData{..} <-
originateTreasuryDaoWithBalance $ \_ owner2_ ->
originateTreasuryDaoWithBalance id $ \_ owner2_ ->
[ ((owner2_, frozenTokenId), 100)
]

Expand Down Expand Up @@ -140,7 +145,7 @@ flushTokenTransfer = uncapsNettest $ withFrozenCallStack $ do
flushXtzTransfer :: HasCallStack => NettestScenario m
flushXtzTransfer = uncapsNettest $ withFrozenCallStack $ do
DaoOriginateData{..} <-
originateTreasuryDaoWithBalance $ \_ _ ->
originateTreasuryDaoWithBalance id $ \_ _ ->
[]

sendXtz (toAddress dodDao) (unsafeBuildEpName "callCustom") ([mt|receive_xtz|], lPackValueRaw ())
Expand Down Expand Up @@ -190,7 +195,36 @@ flushXtzTransfer = uncapsNettest $ withFrozenCallStack $ do
advanceTime (sec 10)
withSender dodAdmin $ call dodDao (Call @"Flush") 100

-- -- TODO: check xtz balance
-- TODO: check xtz balance


proposalCheckFailZeroMutez :: HasCallStack => NettestScenario m
proposalCheckFailZeroMutez = uncapsNettest $ withFrozenCallStack do
DaoOriginateData{..} <-
originateTreasuryDaoWithBalance
(\store -> setExtra @Natural [mt|min_xtz_amount|] 0 store) $
\owner1_ owner2_ ->
[ ((owner1_, frozenTokenId), 200)
, ((owner2_, frozenTokenId), 200)
]
let
proposalMeta = lPackValueRaw @TreasuryDaoProposalMetadata $
TransferProposal
{ tpAgoraPostId = 1
, tpTransfers = [ xtzTransferType 0 dodOwner2 ]
}
proposalSize = metadataSize proposalMeta

-- Freeze in voting stage.
withSender dodOwner1 $
call dodDao (Call @"Freeze") (#amount .! proposalSize)

-- Advance one voting period to a proposing stage.
advanceTime (sec 10)

withSender dodOwner1 $
call dodDao (Call @"Propose") (ProposeParams proposalSize proposalMeta)
& expectCustomErrorNoArg #fAIL_PROPOSAL_CHECK dodDao

--------------------------------------------------------------------------
-- Helper
Expand Down Expand Up @@ -218,8 +252,9 @@ tokenTransferType contractAddr fromAddr toAddr = Token_transfer_type TokenTransf

originateTreasuryDaoWithBalance
:: forall caps base m. (MonadNettest caps base m)
=> (Address -> Address -> [(LedgerKey, LedgerValue)]) -> OriginateFn m
originateTreasuryDaoWithBalance bal =
=> (FullStorage -> FullStorage)
-> (Address -> Address -> [(LedgerKey, LedgerValue)]) -> OriginateFn m
originateTreasuryDaoWithBalance modifyStorageFn bal =
let fs = fromVal ($(fetchValue @FullStorage "haskell/test/treasuryDAO_storage.tz" "TREASURY_STORAGE_PATH"))
FullStorage'{..} = fs
& setExtra @Natural [mt|frozen_scale_value|] 1
Expand All @@ -229,6 +264,7 @@ originateTreasuryDaoWithBalance bal =
& setExtra @Natural [mt|max_proposal_size|] 1000
& setExtra @Natural [mt|min_xtz_amount|] 2
& setExtra @Natural [mt|max_xtz_amount|] 5
& modifyStorageFn

in originateLigoDaoWithBalance (sExtra fsStorage)
(fsConfig
Expand Down
4 changes: 3 additions & 1 deletion src/registryDAO.mligo
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,9 @@ let registry_DAO_proposal_check (params, extras : propose_params * contract_extr
let is_all_transfers_valid (is_valid, transfer_type: bool * transfer_type) =
match transfer_type with
| Token_transfer_type _tt -> is_valid
| Xtz_transfer_type xt -> is_valid && min_xtz_amount <= xt.amount && xt.amount <= max_xtz_amount
| Xtz_transfer_type xt ->
is_valid && xt.amount <> 0mutez
&& min_xtz_amount <= xt.amount && xt.amount <= max_xtz_amount
in
List.fold is_all_transfers_valid tp.transfers has_correct_token_lock
| Update_receivers_proposal _urp -> has_correct_token_lock
Expand Down
4 changes: 3 additions & 1 deletion src/treasuryDAO.mligo
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,9 @@ let treasury_DAO_proposal_check (params, extras : propose_params * contract_extr
let is_all_transfers_valid (is_valid, transfer_type: bool * transfer_type) =
match transfer_type with
| Token_transfer_type _tt -> is_valid
| Xtz_transfer_type xt -> is_valid && min_xtz_amount <= xt.amount && xt.amount <= max_xtz_amount
| Xtz_transfer_type xt ->
is_valid && xt.amount <> 0mutez
&& min_xtz_amount <= xt.amount && xt.amount <= max_xtz_amount
in
List.fold is_all_transfers_valid pm.transfers true
else
Expand Down

0 comments on commit 14c1f16

Please sign in to comment.