Browse Source

Use the assert / mutate pattern to make it clearer where an error return is handled vs the final ok return, which is now placed at the end

feat/emotion-core-ui
Adam Dunkels 5 years ago
committed by Thomas Osmonson
parent
commit
6c55068fb9
  1. 10
      src/pages/smart-contracts/principals.md

10
src/pages/smart-contracts/principals.md

@ -111,11 +111,11 @@ faucet" could be implemented as so:
(define-constant stx-amount u1)
(define-public (claim-from-faucet)
(if (is-none (map-get? claimed-before {sender: tx-sender}))
(let ((requester tx-sender))
(map-set claimed-before {sender: requester} {claimed: true})
(as-contract (stx-transfer? u1 tx-sender requester)))
(err u0)))
(let ((requester tx-sender)) ;; set a local variable requester = tx-sender
(asserts! (is-none (map-get? claimed-before {sender: requester})) (err err-already-claimed))
(unwrap! (as-contract (stx-transfer? stx-amount tx-sender requester)) (err err-faucet-empty))
(map-set claimed-before {sender: requester} {claimed: true})
(ok stx-amount)))
```
In this example, the public function `claim-from-faucet`:

Loading…
Cancel
Save