* move staleness to new endpoint
* actually send the response
* Add schema
* Fix freshness metric to use publish time instead of attestation Time
* Rename endpoint to /api/ + small fix
* Bump version
Co-authored-by: Jayant Krishnamurthy <jkrishnamurthy@jumptrading.com>
Co-authored-by: Ali Behjati <bahjatia@gmail.com>
* Add out-of-tree dependency on wormhole v2.8.9
This lets us outsource all wormhole/solitaire code to the upstream
certusone repo
* Docker.client: Use cargo-install to install binaries from github
* p2w: fix solana-program wasm-bindgen
* pyth2wormhole: Fix code-level errors against newer solitaire
* p2w: Use upstream wormhole rust code, bump guardian to 2.8.9
* guardian: ensure solana is on, spy: bump image to 2.8.9
Co-authored-by: Reisen <reisen@morphism.org>
* Implement the new IPyth events and methods
* Check contracts gets the fees in tests
* Fix the fee variable position to avoid conflict
* Add migration files.
* Add events to migration names and docs
* Fix pyth contract address in tests
Very strangely after adding migration steps the old address
used in evm relay became wormhole implementation address
I looked at eth-0/tests container logs and saw the
address is entirely different (before and after the change)
* Fix previous migration bug.
* rename instance to proxy to be more clear
* Update Deploying.md
* Bump version of cw packages from 0.16.0 to 1.0.0
* Fix build
* Update wormhole details
* Update js packages
* Update dockers, configs, to use cosmwasm 2 in tilt
* Update wormhole and pyth addresses everywhere
The migration file is probably not necessary for us.
To be deleted later.
* Update gh action name
Before this change, a fresh build from scratch would cause a guardian
software compilation error ("Failure: empty digest") that would
normally be hidden by caching in CI.
* Add initial working ws
* Add tests
* Add prom metrics + improve logging
* Handle ids with leading 0x
* Add a multi client test
* Minor code format
* Fix Typo
* rename PriceFeedPriceInfo to PriceStore
It is because in the future we might have multiple spies and this
will be a middleware store
* format the code
* Make Migrations contract Ownable
* Add prod deployment migrations
* Add BSC Testnet deployment configuration
* Add documentation for deploying contracts to production
* Fix test environment script for deployment to development network
* Fix tilt issues + refactor
Co-authored-by: Ali Behjati <bahjatia@gmail.com>
* Move js sdk on p2w-sdk to js folder
Also modifies other dependencies to correct path
* Reversed removal of wasm build for nodejs
* Add newline to a file
* pyth2wormhole: Fix attestation validation bug
commit-id:567942d7
* Add p2w sdk
It uses Pyth clients structs and cleans some of definitions for Pyth2Wormhole structures.
* Add emitter type and add wasm function for it
- It requires solitaire and it requires nightly rust
- No logic is applied, code is from p2w solana contract. (Eventually will be removed from there)
* Add new line
* Move WASM gen docker to root
It is because wasm is going to be used for p2w-sdk too.
* Fix unchanged cache mount paths
* Move terra relayer into the repo
* Update readme
* p2w-client: Add lib target, make helpers into lib functions there
commit-id:3aeb9ee6
* pyth2wormhole-client: Implement retries
commit-id:462677a2
* Make p2w-sdk js use p2w-sdk rust wasm bindings (#65)
* Make p2w-sdk js use p2w-sdk rust wasm bindings (instead of solana contract bindings)
- Removes `wasm.rs` in solana contract too.
* p2w attester contract use p2w-sdk (#68)
* Make solana pyth2wormhole contract to use the sdk
* Use threadpool to set up price symbols (#69)
* Add solana feature flag for p2w sdk (#71)
* Pyth bridge terra contract support batch attestation + use p2w sdk (#72)
* Make terra contract to use pyth2wormhole-sdk and support batch attestation
* Update packages + code format
* Move terra dockerfile out to support third-party dependency
* pyth2wormhole-client: Add polling-based concurrent tx confirmation
commit-id:5d16d035
* chore: p2w spy guarding improve Dockerfile
* fix: p2w_autoattest don't die after initialization
also minimal formatting
* add P2W_EXIT_ON_ERROR
* set P2W_EXIT_ON_ERROR default to True
* Remove bool test
* hopefully this time.
* add tilt p2w-attest P2W_EXIT_ON_ERROR
* convert P2W_EXIT_ON_ERROR to "true"
* Fix pyth test publisher (#76)
* Fix test pyth publisher to actually publish price
- Uses newer pyth images and removes existing hacks for old versions. It essentially makes dockers cleaner.
- Also improve some adds in dockers to cache more efficiently
* Support Batch Price attestation for terra relay (#75)
* Support Batch Price attestation for terra relay
* Abehjati/update p2w sdk to pyth sdk (#83)
* Make p2w-sdk use pyth-sdk
* Correct test values to reflect .env.test
* update p2w sdk to use ema instead of twa (#84)
* Rename twa to ema in terra relay (#85)
* Bring PythStructs.PriceAttestation struct in line with new API
* Add ability to parse batch price attestations
* Pyth terra remove wormhole governance (#87)
* Pyth in terra: remove wormhole governance
* [WIP] p2w-relay-iface: Add NPM package with relayer interface PoC
commit-id:efcb9b34
* Define Pyth SDK Price struct
* Define internal PythStructs.PriceInfo struct
* Cache price updates in standardised PriceInfo format
* Cache price updates from batch attestations
* p2w-relay-iface -> p2w-relay-terra/src/relay/iface.ts
commit-id:ed9846e3
* p2w relay interface: remove config from Relay iface
commit-id:0359d886
* Remove now unnused parsePriceAttestation function
* Pyth terra bridge: add contract deployment script (#88)
* Add pyth deployment script
- Also updates build.sh to build pyth completely
- Add a readme for deployment guide
* Add test for partial update behaviour
* update p2w sdk to new pyth (#91)
* p2w-sdk/rust use pyth sdk solana v2
* Dockerfile.client: solana 1.8.1 -> 1.9.4
commit-id:643299d3
* p2w-terra-relay: ignore lib and node, own project dir in docker
commit-id:b084bc40
* p2w-terra-relay: iface.ts review nits, naive impl for Terra
commit-id:0ecbfdd6
* Terra contract public api (#79)
* Use pyth-sdk in terra contract
* Update terra contract according to agreed API
- Also adds v2 suffix to price_info key because this migration is breaking.
* p2w-terra-relay: apply review nits
commit-id:aec39c85
* p2w-terra-relay: make worker.ts generic w.r.t. Relay interface
commit-id:5937a08c
* terra.ts: add missing return statement
commit-id:ba0365e6
* Update worket to handle timeout in callback correctly (#97)
* Remove wormhole-based governance
* Remove now unused legacy governance state and variables
* Remove Pyth Implementation implementation
* p2w-terra-relay: run formatter
commit-id:df311e23
* p2w-terra-relay: apply review nits
commit-id:5034b061
* Run formatter to trigger CI
commit-id:7c643d79
* p2w-terra-relay: EVM boilerplate
commit-id:8ad73ded
* Remove old PythProxy inheritance hierarchy
* Remove now unnused initialized implementations map
* Remove old mock bridge implementation
* Remove dependency to wormhole sdk as path and cleanup wrong eth copies (#104)
* Dockerfile.pyth_relay: Fix lockfile issue in ethereum
This commit fixes a lockfile issue resulting from newer NPM in our
container.
Specifically, our Dockerfile is pinned, relaxes Ethereum's
lockfile (npm ci -> npm install) and hardens our lockfile (npm install
-> npm ci)
commit-id:3381c8ec
* p2w-terra-relay: Admit loss against mkdir -p
commit-id:3abdb58d
* Remove unused components from wormhole (#108)
* Remove unused components from wormhole
Removes the following:
- explorer
- e2e
- bridge_ui
- algorand stuff (teal dockerfile and third_party/algorand)
- ci_tests (testing directory) which are for JS/Bridge UI
* Remove unused terra contracts (#109)
- Note: Terra contract addresses are changed by this PR due to deterministic ordering.
- Removed unused nft and token bridge, and migration contracts in Terra
- Modified documentation to remove info regarding removed contracts.(docs/devnet.md)
* Remove unused solana contracts and their wasm creations (#110)
Removes token bridge, nft bridge, migration. Also removes them from deployments and docs.
* Add fee estimate for terra relay (#112)
* Removes directores which are not related to p2w (#111)
Removes
- audits
- dashboards (dashboard is removed from Tilt)
- event_database (all of it's dependencies are removed from Tilt and it's not for p2w)
- lp_ui: a project (pressumably liquidity pool) not related to p2w
- sdk: wormhole sdk, p2w depends on it's npm package and there is no dependency to rust one
- spydk: it's not anywhere in p2w
- staging/algorand: these are for alrogrand which is not used in p2w
- whitepapers: these are for wormhole
* Add and update openzeppelin packages
* Add initializer to Pyth contract
* Add upgradable PythProxy contract
* Update tests to work with new proxy setup
* Update migrate script to work with new proxy setup
* Add tests for new proxy setup
* Inline PythStorage.Provider struct
* Make Pyth.verifyPythVM function internal
* Fix struct field names
* Rename Price to PriceFeed to be consistent with SDK
* Replace PythGetters.latestPriceInfo with Pyth.queryPriceFeed in public API
* p2w-terra-relay: Add a query() EVM call and Tilt boilerplate
commit-id:f97d0c16
* Clarify test comments
* Add health probe (#107)
* Rename PythProxy to PythUpgradable
* p2w-evm-relay: Backport the proxy address change from debug session
commit-id:55b63ed5
* p2w-terra-relay -> p2w-relay, split EVM relay into new service
commit-id:36d0db6e
* Tiltfile: typo
commit-id:3bbba986
* p2w-evm-relay.yaml: typo
commit-id:35c87c79
* p2w-evm-relay.yaml: typo 2: electric boogaloo
commit-id:40892265
* Add build folder to dockerignore
* Rename attestPriceBatch to updatePriceBatchFromVm
* Update comment on time check
* Trigger Build
* Tiltfile: Fix port forwards for p2w-evm-relay
commit-id:6e5e9c14
* p2w-relay: PythImplementation -> PythUpgradable
commit-id:bfea7eb5
* Remove unused Pyth Chain ID metadata
* Add the query() call
commit-id:02966ce5
* p2w-terra-relay: Fix evm.ts after contract rename
commit-id:87381bec
* Make truffle migrations directory configurable
* p2w-evm-relay: Fix wrong EVM contract ID, add a check for it
This commit takes care of an outdated pyth2wormhole EVM contract
address and implements a contract/non-contract check using
web3.eth.getCode() (empty for non-contracts).
This problem cost us several hours of debugging and resulted from an
EVM gotcha - a contract call to a non-contract address will simply
ignore the call payload and make a plain transfer. Additionally, ETH
accounts don't have a notion of initialization - used and unused
addresses are equally valid tx recipients. Resulting from both
properties, any unused address could potentially yield wrongly
successful calls, wasting funds and debug time over p2w-relay. Thus
the heuristic to protect us from this is to see if the address' code
storage is populated.
commit-id:b655a720
* p2w-relay: Also implement the contract check in EVM relay()
commit-id:e28709e5
* evm.ts: Fix wording in changed/unchanged logs
commit-id:13c81625
* Make terra relayer more resillient (#120)
- Increase retry attempts (4 to 6) and retry_delay (250ms to 1s) to be more resillient
- This is because when account sequence mismatch happens it might take some time be fixed
- Removed estimate fee because it's being done in wallet.createAndSignTx (less requests)
- Improved logging on when error happens
* Update dockerfile to chown less files (#121)
* Update dockerfile to chown sooner
* p2w-relay: review nits
* p2w-evm-relay: make feed verification queries configurable
* p2w-relay: cache wormhole import
* p2w-relay: formatter, remove getcode() from relay(), add comments
commit-id:1a65c52c
* p2w-relay: typos and leftovers
commit-id:9b523b25
* Change websocket to json socket to support bsc testnet + improves env vars (#139)
* Change websocket to json socket to support bsc testnet + imporving env vars
* Add unit test to Pyth Terra Contract (#123)
* Add unit test to the terra contract
- Refactors the code into multiple functions to make unit testing easier
- Adds build and test of terra contract to CI according to #73
* p2w-relay: harden exception handling, yell about uncaught stuff
commit-id:24e14835
* p2w-relay: Correct outdated comment
commit-id:d0b57d33
* p2w-evm-relay: s/async (e)/(e)/
commit-id:11b3a474
* Modify proto docker and tiltfile to stop creating unnecessary files (#144)
* Remove sdk/spydk from wasm and remove buf gen web yaml (#145)
* Remove wormhole contract from wasm generation (#160)
* pyth2wormhole: Add num_publishers to libraries and contracts
commit-id:f7263eed
* pyth2wormhole: add max_num_publishers to cross-chain metadata
commit-id:7550fa50
* Move p2w relayer parsing to p2w sdk js (#162)
* Move Price Attestation parsing logic to the sdk
* pyth2wormhole: Add contract testing boilerplate for attest()
commit-id:51949fbe
* Create p2w-api base (from p2w-relay) (#142)
* Create p2w-api base (from p2w-relay)
* Refactor project structure
* Rename p2w to pyth price service (#166)
* Abehjati/price-service-add-rest-layer (#167)
* Add rest api for latest vaa
Co-authored-by: Stan Drozd <stan@nexantic.com>
Co-authored-by: Eran Davidovich <edavidovich@jumptrading.com>
Co-authored-by: Eran Davidovich <erancx@users.noreply.github.com>
Co-authored-by: Tom Pointon <tom@teepeestudios.net>
Co-authored-by: Stan Drozd <drozdziak1@gmail.com>
* ethereum: p2w contract -> p2w emitter, fill in essential envs
Change-Id: I6fa9364a96738d2cc02ec829a31fedba0586d8e8
commit-id:0a56f1f8
* Add p2w-relay, a p2w-sdk integration test
commit-id:6bfab639
* p2w-sdk: Expand README
Change-Id: I17cb547d6aaddc240588923561c26d11a787df2e
commit-id:6ebd6a22
* p2w-sdk: don't build ETH contracts, only the types
Change-Id: I7cbd18328227700635d7688aa24a9671e8919fcd
commit-id:adf079f7
* p2w: configurability and sane envs
commit-id:f10fd90e
* Solitaire: Implement Option<T> support in structs
commit-id:31aa12d6
* bridge/governance.rs: Stop pestering about EMITTER_ADDRESS
commit-id:d5bd7234
* p2w-attest: price batching
This commit introduces support for multiple Pyth product/price pairs
per call. The initial maximum batch size is 5 and is enforced using a
`P2W_MAX_BATCH_SIZE` constant.
solana/pyth2wormhole/program:
* On-chain batching logic
* Batch message parsing logic
solana/pyth2wormhole/client:
* Off-chain batching logic - divides any number of symbols into
largest possible batches
* Use a multi-symbol config file instead of CLI arguments
third_party/pyth/p2w-sdk:
* Expose batch parsing logic
third_party/pyth/p2w-relay:
* Comment out target chain calls until ETH contract supports batching
* Test the batch parsing function
third_party/pyth/p2w_autoattest.py:
* Generate and use the symbol config file with pyth2wormhole-client
third_party/pyth/pyth_publisher.py:
* Add a configurable number of mock Pyth symbols
* Adjust HTTP endpoint for multiple symbols
commit-id:73787a61
* p2w-attest: mention attestation size in batch
This commit ensures that no matter the attestation format, a batch
will never contain attestations of different sizes. This guarantee
enables forward compatibility by adding new constant-size fields at
the end of a batch at all times. An older implementation will simply
not consume the remaining newer values while respecting the stated
batch member alignment.
commit-id:210da230
* pyth2wormhole-client: use fresh blockhashes, harden batch errors
This commit makes sure we don't have to deal with expired transactions
due to stale blockhashes. The problem existed with larger symbol
configs as well as on Solana mainnet. Additionally, the attestation logic
now treats transaction errors as non-critical - a failure for a batch
does not prevent attestation attempts for batches farther in the queue
commit-id:5e704f8b
* tests run in tilt / ci
* changed bridge_ui test process
* tests use kube proxy when in ci
* fix: allTests.sh permission
* fix: bridge_ui dockerfile sha for amd64
* fix: bridge_ui should use cra test
* fix: ci tests
Co-authored-by: Evan Gray <battledingo@gmail.com>
* Stub out algorand support in wormhole
1) Introduce the algorand chain constant in all the appropriate places
2) Deploy pyth/hernandc algorand smart contracts into devnet
3) Fund all the correct contracts for devnet testing
Change-Id: I6e4402b5b21223b32ea89653f8c7606f5c7f2843
* pr/jsiegel/algorand-v1: ALGORAND is not a EVM chain @ gusc1a-ossdev-jsl1
* pr/jsiegel/algorand-v1: fix lint @ gusc1a-ossdev-jsl1
* pr/jsiegel/algorand-v1: put the requirements into the image @ gusc1a-ossdev-jsl1
* jsiegel/algorand: make the watcher hang forever @ gusc1a-ossdev-jsl1
* jsiegel/algorand: comment these out @ gusc1a-ossdev-jsl1
* jsiegel/algorand: put this back in @ gusc1a-ossdev-jsl1
* jsiegel/algorand: fix guardian example @ gusc1a-ossdev-jsl1
* Generate teal source code
commit-id:a537a109
* jsiegel/algorand: it builds @ gusc1a-ossdev-jsl1
* pr/jsiegel/algorand-v1: add Dockerfile.teal @ gusc1a-ossdev-jsl1
* jsiegel/algorand: improve the dependencies @ gusc1a-ossdev-jsl1
* pr/jsiegel/algorand-v1: Fix up build @ gusc1a-ossdev-jsl1
* dead file
* pr/jsiegel/algorand-v1: remove more stuff @ gusc1a-ossdev-jsl1
* pr/jsiegel/algorand-v1: fix build @ gusc1a-ossdev-jsl1
* pr/jsiegel/algorand-v1: freeze the requirements @ gusc1a-ossdev-jsl1
* pr/jsiegel/algorand-v1: Fix teal to use pipenv @ gusc1a-ossdev-jsl1
* pr/jsiegel/algorand-v1: fix miss-merge @ gusc1a-ossdev-jsl1
Co-authored-by: Leo <leo@certus.one>
As far as I can tell, both primary and node are happy. We can't use
https://github.com/algorand/sandbox since it makes too many
assumptions about its environment (docker-compose, interactive
development vs. reproducible CI usage).
Instead, use the official mainnet Docker images and ship our own config.
Caveat: "goal network create" is not reproducible and each Docker
build will generate a new set of root keys. We can presumably avoid
this by hardcoding the output of "goal network create"
(using --noimportkeys to avoid having to vendor a SQLite DB.. we'd
just re-import them to kmd at runtime, which is what goal is doing
internally: f51d2d7d5a/netdeploy/networkTemplate.go (L131))
Change-Id: I8c99c6150c9c244c9f12b68a58184c2d5697cee8
Change-Id: Ia7bf98bac2b4a0daa5541f09a9c9e4b1e2d56bba
examples: rest_relayer, add support for all chains
Change-Id: Idbcf48f4c891383e16a9f1f460d6e02aa3149a48
- Add Cloud Functions:
- "Recent" gap list, can filter and/or group by chain or address.
- "Totals" counts 24h, 30d, rolling daily. can filter and group.
- "Transaction" lookup row by chain-native transaction identifier.
- Pad sequence in rowkey to fixed length, for sequential row order.
- Add Cloud Function deploy instructions.
- Fix#410 Buildpack image cleanup
Change-Id: Ifa3110a3d58e2f94adb48ccb451c27ab3add0611
This adds the explorer and Pyth as optional components to improve
Tilt startup times, as originally suggested by Justin.
Defaults to true in CI.
Change-Id: Id9fffe5b11311baadc042815c0cc747de037554e