1
+ (define-constant ERR-NOT-AUTHORIZED (err u1000 ))
2
+ (define-fungible-token bridged-btc )
3
+ (define-data-var contract-owner principal tx-sender )
4
+ (define-map approved-contracts principal bool )
5
+ (define-data-var token-name (string-ascii 32 ) " aBTC" )
6
+ (define-data-var token-symbol (string-ascii 10 ) " aBTC" )
7
+ (define-data-var token-uri (optional (string-utf8 256 )) (some u " https://cdn.alexlab.co/metadata/token-abtc.json" ))
8
+ (define-data-var token-decimals uint u8 )
9
+ (define-read-only (get-contract-owner )
10
+ (ok (var-get contract-owner )))
11
+ (define-public (set-contract-owner (owner principal ))
12
+ (begin
13
+ (try! (check-is-owner ))
14
+ (ok (var-set contract-owner owner))))
15
+ (define-private (check-is-owner )
16
+ (ok (asserts! (is-eq tx-sender (var-get contract-owner )) ERR-NOT-AUTHORIZED)))
17
+ (define-private (check-is-approved )
18
+ (ok (asserts! (default-to false (map-get? approved-contracts tx-sender )) ERR-NOT-AUTHORIZED)))
19
+ (define-public (set-name (new-name (string-ascii 32 )))
20
+ (begin
21
+ (try! (check-is-owner ))
22
+ (ok (var-set token-name new-name))))
23
+ (define-public (set-symbol (new-symbol (string-ascii 10 )))
24
+ (begin
25
+ (try! (check-is-owner ))
26
+ (ok (var-set token-symbol new-symbol))
27
+ )
28
+ )
29
+ (define-public (set-decimals (new-decimals uint ))
30
+ (begin
31
+ (try! (check-is-owner ))
32
+ (ok (var-set token-decimals new-decimals))))
33
+ (define-public (set-token-uri (new-uri (optional (string-utf8 256 ))))
34
+ (begin
35
+ (try! (check-is-owner ))
36
+ (ok (var-set token-uri new-uri))))
37
+ (define-public (add-approved-contract (new-approved-contract principal ))
38
+ (begin
39
+ (try! (check-is-owner ))
40
+ (ok (map-set approved-contracts new-approved-contract true ))))
41
+ (define-public (set-approved-contract (owner principal ) (approved bool ))
42
+ (begin
43
+ (try! (check-is-owner ))
44
+ (ok (map-set approved-contracts owner approved))))
45
+ (define-public (transfer (amount uint ) (sender principal ) (recipient principal ) (memo (optional (buff 34 ))))
46
+ (begin
47
+ (asserts! (is-eq sender tx-sender ) ERR-NOT-AUTHORIZED)
48
+ (try! (ft-transfer? bridged-btc amount sender recipient))
49
+ (match memo to-print (print to-print) 0x )
50
+ (ok true )))
51
+ (define-read-only (get-name )
52
+ (ok (var-get token-name )))
53
+ (define-read-only (get-symbol )
54
+ (ok (var-get token-symbol )))
55
+ (define-read-only (get-decimals )
56
+ (ok (var-get token-decimals )))
57
+ (define-read-only (get-balance (who principal ))
58
+ (ok (ft-get-balance bridged-btc who)))
59
+ (define-read-only (get-total-supply )
60
+ (ok (ft-get-supply bridged-btc)))
61
+ (define-read-only (get-token-uri )
62
+ (ok (var-get token-uri )))
63
+ (define-constant ONE_8 u100000000 )
64
+ (define-public (mint (amount uint ) (recipient principal ))
65
+ (begin
66
+ (asserts! (or (is-ok (check-is-approved )) (is-ok (check-is-owner ))) ERR-NOT-AUTHORIZED)
67
+ (ft-mint? bridged-btc amount recipient)))
68
+ (define-public (burn (amount uint ) (sender principal ))
69
+ (begin
70
+ (asserts! (or (is-ok (check-is-approved )) (is-ok (check-is-owner ))) ERR-NOT-AUTHORIZED)
71
+ (ft-burn? bridged-btc amount sender)))
72
+ (define-private (pow-decimals )
73
+ (pow u10 (unwrap-panic (get-decimals ))))
74
+ (define-read-only (fixed-to-decimals (amount uint ))
75
+ (/ (* amount (pow-decimals )) ONE_8))
76
+ (define-private (decimals-to-fixed (amount uint ))
77
+ (/ (* amount ONE_8) (pow-decimals )))
78
+ (define-read-only (get-total-supply-fixed )
79
+ (ok (decimals-to-fixed (unwrap-panic (get-total-supply )))))
80
+ (define-read-only (get-balance-fixed (account principal ))
81
+ (ok (decimals-to-fixed (unwrap-panic (get-balance account)))))
82
+ (define-public (transfer-fixed (amount uint ) (sender principal ) (recipient principal ) (memo (optional (buff 34 ))))
83
+ (transfer (fixed-to-decimals amount) sender recipient memo))
84
+ (define-public (mint-fixed (amount uint ) (recipient principal ))
85
+ (mint (fixed-to-decimals amount) recipient))
86
+ (define-public (burn-fixed (amount uint ) (sender principal ))
87
+ (burn (fixed-to-decimals amount) sender))
88
+ (define-private (burn-fixed-many-iter (item {amount : uint , sender : principal }))
89
+ (burn-fixed (get amount item) (get sender item)))
90
+ (define-public (burn-fixed-many (senders (list 200 {amount : uint , sender : principal })))
91
+ (begin
92
+ (asserts! (or (is-ok (check-is-approved )) (is-ok (check-is-owner ))) ERR-NOT-AUTHORIZED)
93
+ (ok (map burn-fixed-many-iter senders))))
0 commit comments