Skip to content

Instantly share code, notes, and snippets.

@d3mage
Last active October 4, 2023 16:10
Show Gist options
  • Save d3mage/e62261c77faa607022d506024865699d to your computer and use it in GitHub Desktop.
Save d3mage/e62261c77faa607022d506024865699d to your computer and use it in GitHub Desktop.
verify-debug
(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")
(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)
(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`"
)
)
(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