Last active
October 4, 2023 16:10
-
-
Save d3mage/e62261c77faa607022d506024865699d to your computer and use it in GitHub Desktop.
verify-debug
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(namespace "free") | |
(enforce-guard (keyset-ref-guard "free.bridge-admin")) | |
(module gas-oracle GOVERNANCE | |
(implements gas-oracle-iface) | |
(use gas-oracle-iface [remote-gas-data-input remote-gas-data]) | |
;; Tables | |
(deftable gas-data-table:{remote-gas-data}) | |
;; Capabilities | |
(defcap GOVERNANCE () (enforce-guard "free.bridge-admin")) | |
(defcap ONLY_ADMIN () (enforce-guard "free.bridge-admin")) | |
;; Events | |
(defcap REMOTE_GAS_DATA_SET | |
( | |
domain:string | |
token-exchange-rate:integer | |
gas-price:integer | |
) | |
@doc "Emitted when an entry in `remoteGasData` is set." | |
@event true | |
) | |
(defun set-remote-gas-data-configs:bool (configs:[object{remote-gas-data-input}]) | |
(map (set-remote-gas-data) configs) | |
true | |
) | |
(defun set-remote-gas-data:bool (config:object{remote-gas-data-input}) | |
(with-capability (ONLY_ADMIN) | |
(bind config | |
{ | |
"domain" := domain, | |
"token-exchange-rate" := token-exchange-rate, | |
"gas-price" := gas-price | |
} | |
(insert gas-data-table domain | |
{ | |
"token-exchange-rate": token-exchange-rate, | |
"gas-price": gas-price | |
} | |
) | |
(emit-event (REMOTE_GAS_DATA_SET domain token-exchange-rate gas-price)) | |
true | |
) | |
) | |
) | |
(defun get-exchange-rate-and-gas-price:object{remote-gas-data} (destinationDomain:string) | |
(read gas-data-table destinationDomain) | |
) | |
) | |
(if (read-msg "init") | |
[ (create-table free.gas-oracle.gas-data-table) ] | |
"Upgrade complete") | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(load "../utils/init.repl") | |
(begin-tx) | |
(load "../interfaces/i-gas-oracle.pact") | |
(commit-tx) | |
(begin-tx) | |
(env-data { "init": true }) | |
(env-sigs [ { "key": test-keys.a, "caps": [] } ]) | |
(load "gas-oracle.pact") | |
(commit-tx) | |
(print "Loaded Gas Oracle") | |
;set-remote-gas-data: failure | |
(begin-tx) | |
(namespace "free") | |
(env-sigs [ { "key": "default_key", "caps": [ (gas-oracle.ONLY_ADMIN) ] } ]) | |
(expect-failure "Can only be called by admin" (gas-oracle.set-remote-gas-data-configs [{ | |
"domain": "1", | |
"token-exchange-rate": 5, | |
"gas-price": 20 | |
} { | |
"domain": "2", | |
"token-exchange-rate": 8, | |
"gas-price": 15 | |
}])) | |
(commit-tx) | |
;set-remote-gas-data-configs: success | |
(begin-tx) | |
(namespace "free") | |
(env-sigs [ { "key": test-keys.a, "caps": [ (gas-oracle.ONLY_ADMIN) ] } ]) | |
(gas-oracle.set-remote-gas-data-configs [{ | |
"domain": "1", | |
"token-exchange-rate": 5, | |
"gas-price": 20 | |
} { | |
"domain": "2", | |
"token-exchange-rate": 8, | |
"gas-price": 15 | |
}]) | |
(let | |
( | |
(result:object{gas-oracle-iface.remote-gas-data} (gas-oracle.get-exchange-rate-and-gas-price "1")) | |
) | |
(expect "Token Exchange Rate Set" 5 (at "token-exchange-rate" result)) | |
(expect "Gas Price Set" 20 (at "gas-price" result)) | |
) | |
(let | |
( | |
(result:object{gas-oracle-iface.remote-gas-data} (gas-oracle.get-exchange-rate-and-gas-price "2")) | |
) | |
(expect "Token Exchange Rate Set" 8 (at "token-exchange-rate" result)) | |
(expect "Gas Price Set" 15 (at "gas-price" result)) | |
) | |
(commit-tx) | |
;set-remote-gas-data: failure | |
(begin-tx) | |
(namespace "free") | |
(env-sigs [ { "key": "default_key", "caps": [ (gas-oracle.ONLY_ADMIN) ] } ]) | |
(expect-failure "Can only be called by admin" (gas-oracle.set-remote-gas-data { | |
"domain": 1, | |
"token-exchange-rate": 5, | |
"gas-price": 20 | |
})) | |
(commit-tx) | |
;set-remote-gas-data: success | |
(begin-tx) | |
(namespace "free") | |
(env-sigs [ { "key": test-keys.a, "caps": [ (gas-oracle.ONLY_ADMIN) ] } ]) | |
(expect "GasOracle sets gas data" true (gas-oracle.set-remote-gas-data { | |
"domain": "10", | |
"token-exchange-rate": 40, | |
"gas-price": 110 | |
})) | |
(let | |
( | |
(result:object{gas-oracle-iface.remote-gas-data} (gas-oracle.get-exchange-rate-and-gas-price "10")) | |
) | |
(expect "Token Exchange Rate Set" 40 (at "token-exchange-rate" result)) | |
(expect "Gas Price Set" 110 (at "gas-price" result)) | |
) | |
(commit-tx) | |
(verify "free.gas-oracle" true) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(namespace "free") | |
(interface gas-oracle-iface | |
(defschema remote-gas-data-input | |
domain:string | |
token-exchange-rate:integer | |
gas-price:integer | |
) | |
(defschema remote-gas-data | |
token-exchange-rate:integer | |
gas-price:integer | |
) | |
(defun set-remote-gas-data-configs:bool | |
(configs:[object{remote-gas-data-input}]) | |
@doc "Sets the remote gas data for many remotes at a time." | |
) | |
(defun set-remote-gas-data:bool | |
(config:object{remote-gas-data-input}) | |
@doc " Sets the remote gas data using the values in `config`" | |
) | |
(defun get-exchange-rate-and-gas-price:object{remote-gas-data} | |
(destinationDomain:string) | |
@doc "Returns the stored `remoteGasData` for the `_destinationDomain`" | |
) | |
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(begin-tx) | |
(module test-ns GOVERNANCE | |
(defcap GOVERNANCE () true) | |
(defconst NAMESPACE_GUARD (create-user-guard (succeed))) | |
(defun succeed () true) | |
) | |
(define-namespace "free" test-ns.NAMESPACE_GUARD test-ns.NAMESPACE_GUARD) | |
(define-namespace "user" test-ns.NAMESPACE_GUARD test-ns.NAMESPACE_GUARD) | |
(commit-tx) | |
(begin-tx) | |
(module test-keys GOVERNANCE | |
(defcap GOVERNANCE () true) | |
(defconst a "368820f80c324bbc7c2b0610688a7da43e39f91d118732671cd9c7500ff43cca") | |
(defconst b "6be2f485a7af75fedb4b7f153a903f7e6000ca4aa501179c91a2450b777bd2a7") | |
(defconst c "3a9dd532d73dace195dbb64d1dba6572fb783d0fdd324685e32fbda2f89f99a6") | |
) | |
(commit-tx) | |
(begin-tx) | |
(namespace "free") | |
(env-data { "bridge-admin-keyset": { "keys": [ test-keys.a ], "pred": "keys-all" } }) | |
(define-keyset "free.bridge-admin" (read-keyset "bridge-admin-keyset")) | |
(commit-tx) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment