cross-bridge-registry-v1-03
SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9Source Code
(impl-trait .trait-ownable.ownable-trait)
(use-trait ft-trait .trait-sip-010.sip-010-trait)
(define-constant ERR-NOT-AUTHORIZED (err u1000))
(define-constant ERR-TOKEN-NOT-AUTHORIZED (err u1001))
(define-constant ERR-UNKNOWN-USER-ID (err u1005))
(define-constant ERR-UNKNOWN-VALIDATOR-ID (err u1006))
(define-constant ERR-USER-ALREADY-REGISTERED (err u1007))
(define-constant ERR-VALIDATOR-ALREADY-REGISTERED (err u1008))
(define-constant ERR-REQUIRED-VALIDATORS (err u1013))
(define-constant ERR-UNKNOWN-CHAIN-ID (err u1018))
(define-constant ERR-INVALID-AMOUNT (err u1019))
(define-constant ERR-INVALID-INPUT (err u1020))
(define-constant MAX_UINT u340282366920938463463374607431768211455)
(define-constant ONE_8 u100000000)
(define-data-var contract-owner principal tx-sender)
(define-map approved-operators principal bool)
(define-map approved-relayers principal bool)
(define-map accrued-fee uint uint)
(define-map order-sent (buff 32) bool)
(define-map order-validated-by { order-hash: (buff 32), validator: principal } bool)
(define-public (register-user (user principal))
(contract-call? .bridge-endpoint-v1-02 register-user user))
(define-read-only (get-contract-owner)
(ok (var-get contract-owner)))
(define-read-only (get-accrued-fee-or-default (token-id uint))
(default-to u0 (map-get? accrued-fee token-id)))
(define-read-only (get-approved-token-by-id-or-fail (token-id uint))
(let (
(token-details (try! (contract-call? .bridge-endpoint-v1-02 get-approved-token-by-id-or-fail token-id))))
(ok (merge token-details { accrued-fee: (get-accrued-fee-or-default token-id) }))))
(define-read-only (get-approved-token-or-fail (token principal))
(get-approved-token-by-id-or-fail (try! (get-approved-token-id-or-fail token))))
(define-read-only (is-approved-operator-or-default (operator principal))
(default-to false (map-get? approved-operators operator)))
(define-read-only (is-approved-relayer-or-default (relayer principal))
(default-to false (map-get? approved-relayers relayer)))
(define-read-only (is-order-sent-or-default (order-hash (buff 32)))
(default-to false (map-get? order-sent order-hash)))
(define-read-only (is-order-validated-by-or-default (order-hash (buff 32)) (validator principal))
(default-to false (map-get? order-validated-by {order-hash: order-hash, validator: validator})))
(define-read-only (get-user-id (user principal))
(contract-call? .bridge-endpoint-v1-02 get-user-id user))
(define-read-only (get-user-id-or-fail (user principal))
(contract-call? .bridge-endpoint-v1-02 get-user-id-or-fail user))
(define-read-only (user-from-id (id uint))
(contract-call? .bridge-endpoint-v1-02 user-from-id id))
(define-read-only (user-from-id-or-fail (id uint))
(contract-call? .bridge-endpoint-v1-02 user-from-id-or-fail id))
(define-read-only (get-validator-id (validator principal))
(contract-call? .bridge-endpoint-v1-02 get-validator-id validator))
(define-read-only (get-validator-id-or-fail (validator principal))
(contract-call? .bridge-endpoint-v1-02 get-validator-id-or-fail validator))
(define-read-only (validator-from-id (id uint))
(contract-call? .bridge-endpoint-v1-02 validator-from-id id))
(define-read-only (validator-from-id-or-fail (id uint))
(contract-call? .bridge-endpoint-v1-02 validator-from-id-or-fail id))
(define-read-only (get-required-validators)
(contract-call? .bridge-endpoint-v1-02 get-required-validators))
(define-read-only (get-approved-chain-or-fail (the-chain-id uint))
(contract-call? .bridge-endpoint-v1-02 get-approved-chain-or-fail the-chain-id))
(define-read-only (get-token-reserve-or-default (the-token-id uint) (the-chain-id uint))
(contract-call? .bridge-endpoint-v1-02 get-token-reserve-or-default the-token-id the-chain-id))
(define-read-only (get-min-fee-or-default (the-token-id uint) (the-chain-id uint))
(contract-call? .bridge-endpoint-v1-02 get-min-fee-or-default the-token-id the-chain-id))
(define-read-only (get-approved-token-id-or-fail (token principal))
(contract-call? .bridge-endpoint-v1-02 get-approved-token-id-or-fail token))
(define-read-only (check-is-approved-token (token principal))
(contract-call? .bridge-endpoint-v1-02 check-is-approved-token token))
(define-public (set-paused-bridge-endpoint-v1-02 (paused bool))
(begin
(try! (check-is-owner))
(as-contract (contract-call? .bridge-endpoint-v1-02 set-paused paused))))
(define-public (set-contract-owner-briodge-endpoint-v1-02 (new-contract-owner principal))
(begin
(try! (check-is-owner))
(as-contract (contract-call? .bridge-endpoint-v1-02 set-contract-owner new-contract-owner))))
(define-public (approve-operator (operator principal) (approved bool))
(begin
(try! (check-is-owner))
(ok (map-set approved-operators operator approved))))
(define-public (add-validator (validator-pubkey (buff 33)) (validator principal))
(begin
(try! (check-is-owner))
(as-contract (contract-call? .bridge-endpoint-v1-02 add-validator validator-pubkey validator))))
(define-public (remove-validator (validator principal))
(begin
(try! (check-is-owner))
(as-contract (contract-call? .bridge-endpoint-v1-02 remove-validator validator))))
(define-public (approve-relayer (relayer principal) (approved bool))
(begin
(try! (check-is-owner))
(ok (map-set approved-relayers relayer approved))))
(define-public (set-required-validators (new-required-validators uint))
(begin
(try! (check-is-owner))
(as-contract (contract-call? .bridge-endpoint-v1-02 set-required-validators new-required-validators))))
(define-public (set-approved-chain (the-chain-id uint) (chain-details { name: (string-utf8 256), buff-length: uint }))
(begin
(try! (check-is-owner))
(as-contract (contract-call? .bridge-endpoint-v1-02 set-approved-chain the-chain-id chain-details))))
(define-public (set-min-fee (the-token-id uint) (the-chain-id uint) (the-min-fee uint))
(begin
(try! (check-is-owner))
(as-contract (contract-call? .bridge-endpoint-v1-02 set-min-fee the-token-id the-chain-id the-min-fee))))
(define-public (collect-accrued-fee (token-trait <ft-trait>))
(let (
(token (contract-of token-trait))
(token-id (try! (get-approved-token-id-or-fail token)))
(token-details (try! (get-approved-token-by-id-or-fail token-id)))
(token-details-legacy (try! (contract-call? .bridge-endpoint-v1-02 get-approved-token-by-id-or-fail token-id))))
(try! (check-is-owner))
(and (> (get accrued-fee token-details) u0) (as-contract (try! (contract-call? token-trait transfer-fixed (get accrued-fee token-details) tx-sender (var-get contract-owner) none))))
(and
(> (get accrued-fee token-details-legacy) u0)
(is-ok (as-contract (contract-call? .bridge-endpoint-v1-02 collect-accrued-fee token-trait)))
(as-contract (try! (contract-call? token-trait transfer-fixed (get accrued-fee token-details-legacy) tx-sender (var-get contract-owner) none)))
)
(set-token-registry token-id (merge token-details { accrued-fee: u0 }))))
(define-public (set-contract-owner (owner principal))
(begin
(try! (check-is-owner))
(ok (var-set contract-owner owner))))
(define-public (transfer-all-to-owner (token-trait <ft-trait>))
(let (
(balance (try! (contract-call? token-trait get-balance-fixed (as-contract tx-sender)))))
(try! (check-is-owner))
(and (> balance u0) (as-contract (try! (contract-call? token-trait transfer-fixed balance tx-sender (var-get contract-owner) none))))
(ok true)))
(define-public (transfer-fixed (token-trait <ft-trait>) (amount uint) (recipient principal))
(begin
(try! (check-is-approved))
(as-contract (contract-call? token-trait transfer-fixed amount tx-sender recipient none))))
(define-public (set-token-reserve (the-token-id { token-id: uint, chain-id: uint }) (the-reserve uint))
(begin
(try! (check-is-approved))
(as-contract (contract-call? .bridge-endpoint-v1-02 set-token-reserve (get token-id the-token-id) (get chain-id the-token-id) the-reserve))))
(define-public (set-accrued-fee (the-token-id uint) (the-accrued-fee uint))
(begin
(try! (check-is-approved))
(ok (map-set accrued-fee the-token-id the-accrued-fee))))
(define-public (add-accrued-fee (the-token-id uint) (fee-to-add uint))
(let (
(fee-after (+ (get-accrued-fee-or-default the-token-id) fee-to-add)))
(try! (check-is-approved))
(map-set accrued-fee the-token-id fee-after)
(ok fee-after)))
(define-public (remove-accrued-fee (the-token-id uint) (fee-to-remove uint))
(let (
(fee-before (get-accrued-fee-or-default the-token-id))
(fee-ok (asserts! (<= fee-to-remove fee-before) ERR-INVALID-AMOUNT))
(fee-after (- fee-before fee-to-remove)))
(try! (check-is-approved))
(map-set accrued-fee the-token-id fee-after)
(ok fee-after)))
(define-public (set-approved-token (token principal) (approved bool) (burnable bool) (fee uint) (min-amount uint) (max-amount uint))
(begin
(try! (check-is-approved))
(as-contract (contract-call? .bridge-endpoint-v1-02 set-approved-token token approved burnable fee min-amount max-amount))))
(define-public (set-token-registry (the-token-id uint) (token-details { token: principal, approved: bool, burnable: bool, fee: uint, min-amount: uint, max-amount: uint, accrued-fee: uint }))
(begin
(try! (set-approved-token (get token token-details) (get approved token-details) (get burnable token-details) (get fee token-details) (get min-amount token-details) (get max-amount token-details)))
(ok (map-set accrued-fee the-token-id (get accrued-fee token-details)))))
(define-public (set-order-sent (order-hash (buff 32)) (sent bool))
(begin
(try! (check-is-approved))
(ok (map-set order-sent order-hash true))))
(define-public (set-order-sent-many (order-hashes (list 1000 (buff 32))) (sents (list 1000 bool)))
(begin
(asserts! (is-eq (len order-hashes) (len sents)) ERR-INVALID-INPUT)
(ok (map set-order-sent order-hashes sents))))
(define-public (set-order-validated-by (order-tuple { order-hash: (buff 32), validator: principal }) (validated bool))
(begin
(try! (check-is-approved))
(ok (map-set order-validated-by order-tuple true))))
(define-private (check-is-owner)
(ok (asserts! (is-eq tx-sender (var-get contract-owner)) ERR-NOT-AUTHORIZED)))
(define-private (check-is-approved)
(ok (asserts! (or (is-approved-operator-or-default tx-sender) (is-ok (check-is-owner))) ERR-NOT-AUTHORIZED)))
(define-private (mul-down (a uint) (b uint))
(/ (* a b) ONE_8))
(define-private (div-down (a uint) (b uint))
(if (is-eq a u0) u0 (/ (* a ONE_8) b)))
(define-private (max (a uint) (b uint))
(if (<= a b) b a))Functions (48)
| Function | Access | Args |
|---|---|---|
| check-is-approved | private | |
| register-user | public | user: principal |
| get-contract-owner | read-only | |
| get-accrued-fee-or-default | read-only | token-id: uint |
| get-approved-token-by-id-or-fail | read-only | token-id: uint |
| get-approved-token-or-fail | read-only | token: principal |
| is-approved-operator-or-default | read-only | operator: principal |
| is-approved-relayer-or-default | read-only | relayer: principal |
| is-order-sent-or-default | read-only | order-hash: (buff 32 |
| is-order-validated-by-or-default | read-only | order-hash: (buff 32 |
| get-user-id | read-only | user: principal |
| get-user-id-or-fail | read-only | user: principal |
| user-from-id | read-only | id: uint |
| user-from-id-or-fail | read-only | id: uint |
| get-validator-id | read-only | validator: principal |
| get-validator-id-or-fail | read-only | validator: principal |
| validator-from-id | read-only | id: uint |
| validator-from-id-or-fail | read-only | id: uint |
| get-required-validators | read-only | |
| get-approved-chain-or-fail | read-only | the-chain-id: uint |
| get-token-reserve-or-default | read-only | the-token-id: uint, the-chain-id: uint |
| get-min-fee-or-default | read-only | the-token-id: uint, the-chain-id: uint |
| get-approved-token-id-or-fail | read-only | token: principal |
| check-is-approved-token | read-only | token: principal |
| set-paused-bridge-endpoint-v1-02 | public | paused: bool |
| set-contract-owner-briodge-endpoint-v1-02 | public | new-contract-owner: principal |
| approve-operator | public | operator: principal, approved: bool |
| add-validator | public | validator-pubkey: (buff 33 |
| remove-validator | public | validator: principal |
| approve-relayer | public | relayer: principal, approved: bool |
| set-required-validators | public | new-required-validators: uint |
| set-min-fee | public | the-token-id: uint, the-chain-id: uint, the-min-fee: uint |
| collect-accrued-fee | public | token-trait: <ft-trait> |
| set-contract-owner | public | owner: principal |
| transfer-all-to-owner | public | token-trait: <ft-trait> |
| transfer-fixed | public | token-trait: <ft-trait>, amount: uint, recipient: principal |
| set-token-reserve | public | the-token-id: { token-id: uint, chain-id: uint }, the-reserve: uint |
| set-accrued-fee | public | the-token-id: uint, the-accrued-fee: uint |
| add-accrued-fee | public | the-token-id: uint, fee-to-add: uint |
| remove-accrued-fee | public | the-token-id: uint, fee-to-remove: uint |
| set-approved-token | public | token: principal, approved: bool, burnable: bool, fee: uint, min-amount: uint, max-amount: uint |
| set-token-registry | public | the-token-id: uint, token-details: { token: principal, approved: bool, burnable: bool, fee: uint, min-amount: uint, max-amount: uint, accrued-fee: uint } |
| set-order-sent | public | order-hash: (buff 32 |
| set-order-sent-many | public | order-hashes: (list 1000 (buff 32 |
| check-is-owner | private | |
| mul-down | private | a: uint, b: uint |
| div-down | private | a: uint, b: uint |
| max | private | a: uint, b: uint |