* Refactor to make this change easier
* stop mutating AttestationConfig
* get the product names also
* ok
* refactor
* cleanup
* more cleanup
* more cleanup
* comment
* i think this works
* fix stuff
* clippy
* more cleanup
* main
* main
* fix formatting
* blah
* test
* cleanup
* fix python
* config
* fix test
* grr
* grr
* comments
Co-authored-by: Jayant Krishnamurthy <jkrishnamurthy@jumptrading.com>
* Use a new rustfmt file
* Run cosmwasm action only when needed
* Remove pre-commit from remote-executor action
* Fix formatting
* Run precommit for all files
As previous PR was merged without pre-commit
* pyth2wormhole-client: Stagger attestation sched jobs
* pyth2wormhole-client 1.0.0-rc1
This is an initial semver release for the pyth2wormhole-client package.
* p2w_autoattest.py: Add env for atteser --timeout option
* pyth-attesster v1.0.0-rc2
* pyth-attester-v1.0.0-rc3
This fixes a typo in p2w_autoattest.py
* pyth-attester-v1.0.0
* pyth2wormhole-client: automatically crawl mapping based on interval
* Make the mapping crawl automation seamless
* pyth2wormhole-client: Make mapping crawling routine more robust
This change takes care of recoverable mapping crawling
errors (e.g. malformed single price on single product is no longer
dropping otherwise good different prices and products in the mapping
in favor of a warn message)
* pyth2wormhole-client: Move mapping crawl sleep near logic it affects
* pyth2wormhole-client: remove stray comment
* pyth2wormhole: Fix faulty merge with master
* pyth2wormhole-client: Fix mapping crawl price counting
* pyth2wormhole-client: split daemon/non-daemon, improve readabi[...]
...lity and remove most warnings
* pyth2wormhole-client: parts-per-thousand -> base points
* pyth2wormhole-client: inaccurate comment
* p2w-client: review advice - bp -> bps, std hasher -> sha256
* pyth2wormhole-client: reuse message queue across mapping lookups
* pyth2wormhole-client:should_resend(): optimize interval-only batches
Most attestation conditions in prod are interval-only. This change
ensures that interval-only batches don't waste time on the on-chain
state lookup request.
* pyth2wormhole: Fix build error, redundant new_symbol_states decl
* pyth2wormhole-client: is_onchain -> needs_onchain_lookup
* pyth2wormhole-client: typo
* Attestation: Add ops owner and set-is-active ix
* Update solana/pyth2wormhole/client/src/cli.rs
Co-authored-by: Stanisław Drozd <stan@nexantic.com>
* Fix typos
* Add a test without owner
Co-authored-by: Stanisław Drozd <stan@nexantic.com>
* p2w-client: Add attestation config merging logic
This change adds code to append new symbols to an existing attestation
config. In conjunction with the mapping crawling logic, this will aid
in hot reloading attestation configs in runtime
* pyth2wormhole-client: Use the crawled mapping symbols
This changeset adjusts p2w_autoattest.py commitment to confirmed and
fixes a get_transaction() failure that happened due to the upstream
default finalized commitment setting (RpcClient's set value is not
used). This is fixed by using the chosen commitment explicitly via
get_transaction_with_config()
* pyth2wormhole: add rent adjustment to the initialize() instruction
* pyth2wormhole migrate(): Leave a note about rent adjustment
The migrate() ix won't be called in the nearest future - it does not
make sense to bloat the program bytecode with the rent adjustment. The
note describes the what and why in detail.
* p2w-client: Fix silent logs, restore program log printing
For some time now, p2w-client error reporting would fail to show
daemon mode errors. The logs would only mention resends without ever
showing failed attempts.
with solana-program 1.10.31 came a newer, inferior program log
reporting which only says "N program logs" instead of saying what they
are. This changeset prints errors verbatim using formatted debug
"{:#?}" syntax.
* Docker: Improve p2w-attest/solana-devnet caching
This commit speeds up caching in two ways:
1. By severing the dependency on bridge-client in
Dockerfile.p2w-attest - mainly because of unnecessary `cargo install`
builds which even with target dir caching can take ~1 minute. The
bridge/token-bridge client binaries are not useful to p2w-client anyway.
2. By attaching cargo-install commands to a target dir cache via the
--target-dir option in cargo
* Fix caused by wormhole owning P2WMessage
* Refactor the code
* Comment the integration test
It seems that solana test suite has bug,
An error occurs after tx is finished successfully. Also,
it appears as a segfault for Reisen.
* Add more comments
* Add manual check for seeds
* Add more comments
* minor comment change
* Improve comments
* Use the cw sdk
* Fix clippy warnings
* Use Addr instead of String
* Format the code (cargo +nightly fmt)
* Depend on wormhole git instead of local dependency
* Add error enum
* refactor
* Refactor errors
* certusone->wormhole-foundation rename
It will fix some compile problems
* Build wormhole contract from their repo
* remove wormhole package
* Remove memmap2 patch
It was not needed anymore with the newer
verison of solana (wormhole removed it too)
* Rename pyth-bridge to pyth-cosmwasm
* pyth2wormhole: Implement reusable message PDAs
This changeset converts attest() to use a new PDA for
reusable/unreliable wormhole message account. Each PDA is tied to a
given attest() payer with an index that lets them rotate a number of
message accounts. Keeping the appropriate timing of the reuses is up
to the message owner, who should rotate a number of PDAs.
* pyth2wormhole-client: Add a message acc rotation impl
* p2w attest(): Integrate with bumped wormhole and fix call issues
* p2w-client: Format code, fix test_attest, refactor message index
* Dockerfile.client, Dockerfile.p2w-attest: Improve caching
The main improvement comes from running cargo-install from within a
workspace which lets us cache target/
* p2w-client: Make reusable messages configurable in yaml
* p2w on-chain: refactor to unreliable-only, adjust msg balance, nits
* p2w-client: P2WMessageIndex -> P2WMessageQueue, queue tests
* p2w-client: Add a hard limit to the message account queue
* 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>
This commit resolves a runtime problem in migrate() which occurred on devnet, as
well as invalid mutability for the old config and misuse of the
checked_sub() method.
The runtime problem came from a non-zero balance existing on
not-yet-used PDA. Effectively, this means permissionless
initialization of PDAs on Solana. Anyone can send lamports to any
account on Solana (existing or not), and it doesn't take much funds to
keep an empty account exempt. While it is possible to recover from it,
this case is relatively rare and takes a lot of code to
automate. Instead, we settle for a dumb bump of the config PDA
seed (see config.rs).
This measure is best used sparingly, as it imposes the same static
seed on all SOL networks. This will cause headaches if the attester
tooling grows a third-party user base.
* 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
* pyth2wormhole-client: refactor into fully-async futures-based approach
commit-id:2ed35045
* p2w-client: Change inconsistent rpc constructor
commit-id:cb3b2ff2
* p2w-client: Move job creation to a function, simplify comment
commit-id:35328b38
* pyth2wormhole-client: Use get_multiple_accounts
commit-id:7fc85157
* Implement a rate-limited mutex for RPC client
commit-id:1a243063
* pyth2wormhole-client: only guard beginning new requests in RLMutex
commit-id:d8251474
* pyth2wormhole-client: RLMutex: ensure the inner guard is not dropped
commit-id:c3513f5e
* pyth2wormhole-client: Clarify attestation_sched_futs comment
commit-id:97033670
* pyth2wormhole-client: Use CommitmentConfig's native FromStr parsing
commit-id:835d7125
* pyth2wormhole-client: doc comment typo
commit-id:5ee388de
* pyth2wormhole-client: move closures to their own async functions
This makes the main.rs async attestation routines easier to read.
commit-id:3565a744
* pyth2wormhole-client: fix merge typo
* pyth2wormhole-client: Apply Tom's readability advice
* pyth2wormhole-client reword attestation_sched_job() comment
* pyth2wormhole-client: expand attestation_sched_job() comment
* pyth2wormhole-client: e x p a n d the comment
* Trigger CI
* p2w-client/main.rs: correct missing awaits after merge
* p2w-client: Implement a migrate command and instruction generator
* Fix minor bug in gen_migrate_tx
* Fix migration test and add a test for success
Co-authored-by: Ali Behjati <bahjatia@gmail.com>
* p2w-client: Implement additional trigger conditions
From now on, we support price change by a given percentage as well as
publish time changes for triggering attestations.
commit-id:9bd145e1
* p2w-client: Harden price_pct_change for negative values
commit-id:cb679208
* p2w-client: Make sure we always update each symbol's state
commit-id:27f276dc
* p2w-client: include resend state lookups in the RPC interval setting
commit-id:68de125f
* p2w-client: Improve local symbol state handling, min interval=60s
With this change, we update local state only if we meet a
condition. Additionally, the publish_time change becomes a
configurable minimal delta.
commit-id:f8139cd6
* p2w-client: Fix a state update bug for state updates
commit-id:29f44a39
* pyth2wormhole-client: Implement and use daemon mode
commit-id:7001bdf7
* pyth2wormhole-client: harden CLI, simplify attestation loop
commit-id:ad5e4857
* pyth2wormhole-client: Refactor symbol config into groups
This commit implements the notion of a symbol group - a collection of
symbols that are attested according to the specified set of
condition. Currently, only an attestation frequency is supported. In
the future, this value will serve as a fallback for symbols that
rarely trip other conditions.
commit-id:cf19cc41
* p2w_autoattest.py: Use symbol groups in config
commit-id:1153c5f7
* Dockerfile.client: bump toolchain version to mitigate compiler error
The previous compiler version encountered a bug when building
pyth2wormhole-client for testing. The error message mentioned serde,
which is tested inside the `attestation_cfg.rs` module.
commit-id:61c12427
* p2w_autoattest.py: Add another test group
commit-id:2e29583c
* p2w-client: Get rid of sent_at, clarify messages, add status setter
commit-id:87653ab1
* p2w-attest contract: disambiguate set-config types
commit-id:999f3954
* p2w-attest set-config: also print the same mismatched value
commit-id:732e2773
* 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>