Commit Graph

465 Commits

Author SHA1 Message Date
Leo 31a94eeb79 solana/bridge: review comments
Change-Id: Icd58a43cf14588cf4c39f5557bd2d027ef5364ef
2021-04-20 09:52:07 +00:00
Leo 33f39d30fa solana/cli: strip down to deploy_bridge
Delete all non-Wormhole commands. Users should use the official
spl_token CLI to interact with tokens.

Removes the --owner argument and defaults to the fee payer.

Change-Id: I728766131cd697feff5f16ae5aa991c3d87e40cb
2021-04-20 09:51:38 +00:00
Hendrik Hofstadt fad00804e0 minor adjustments in the solana module
Change-Id: I5bafc475fb798fe11c67fd5511b8fe36c314ea36
2021-04-19 14:27:06 +02:00
Hendrik Hofstadt 1f30398e30 refactor new ix processing, remove old processors
Change-Id: I682573bf8544c5a19b2b57c6660e9e86e9b12cf9
2021-04-19 14:27:04 +02:00
Hendrik Hofstadt dfa746476f refactor message posting ix, remove old ixs
Change-Id: Idfa487a189ec2fb3ed2029ddce10fc02aef1255b
2021-04-19 14:25:28 +02:00
Hendrik Hofstadt aad19ff8f8 remove transfer specific methods
Change-Id: I017c9946aaf0f23a56cfc27b7871dbf22f19957b
2021-04-19 14:25:26 +02:00
Hendrik Hofstadt 6a6ba06c0c remove transfer state accounts, introduce posted message persistence
Change-Id: I34a8006dae5cb1a315dc0af297d9025d1e500fcb
2021-04-19 10:30:37 +00:00
Hendrik Hofstadt d09eb150e7 move governance messages to new file
Change-Id: I4b4b76974bb55b5f570c25072d5ffec59215a72c
2021-04-19 06:41:32 +00:00
Hendrik Hofstadt c0f7f3b8f9 reformat errors, remove transfer specific errors
Change-Id: Ie2827893f0fd8e5f5efbdc8f0b8ed0fa1d91abd4
2021-04-15 19:46:07 +00:00
Hendrik Hofstadt 776d774494 solana/bridge: change VAA structure
Change-Id: I8304d2573aafd2291f2ddfc2eec6e605326d0e2d
2021-04-15 19:39:00 +00:00
Hendrik Hofstadt 84c47797ed remove token / bridge related ops commands
Change-Id: Id97efe4b5e89a89fbc9d9373af906ecbd9d9f122
2021-04-15 11:36:29 +02:00
Stanisław Drozd a330c89d1a
Fix *.so copy in solana-devnet, correct crate feature for cli+agent (#198) 2021-04-08 12:47:35 +02:00
Leopold Schabel cc3482a607
Replace third_party/solana by solana-test-validator (#197)
We no longer need to carry a patch and build Solana, and can use
solana-test-validator (with sleepy PoH!) instead. This significantly reduces
build times and will make downstream testing much easier.

Also remove the remnants of do.sh and the old BPF toolchain.

Test Plan: Ran E2E tests.
2021-04-07 20:16:19 +02:00
Stanisław Drozd 6de425a990
BPF SDK hotfix and devnet startup improvement (#196)
* Tiltfile: Make the guardian k8s_resource depend on solana-devnet

This makes guardian network convergence faster as the guardian pods
don't have to suffer from increasing redeploy back-off delays. This
should impact performance neglibibly as solana-devnet is still the
heaviest build we perform (at the time of this writing saturating a
32-thread Ryzen 9 CPU on my build machine.)

* hotfix bpf-sdk: bump bpf-sdk; use cargo-build-bpf
2021-04-07 15:13:01 +02:00
Stanisław Drozd 954e868436
Updates for newest beta bpf-sdk, small do.sh refactor (#193)
* Updates for newest beta bpf-sdk

* do.sh: sed typo
2021-03-23 16:21:34 +01:00
Ryo Onodera 2ba9381066
Add/Clarify comments (#187) 2021-02-26 13:48:44 +01:00
Leo 69b7d3e99e Update to Rust 1.49 2021-02-12 13:48:44 +01:00
Hendrik Hofstadt 8478735ea7
don't subsidize guardian set creation (#172)
* don't subsidize guardian set creation

This works around https://github.com/solana-labs/solana/issues/9711 which causes issues when the guardian set creation is subsidized and another CPI call is done subsequently
2021-02-02 21:20:48 +01:00
Leo 14539de2ac Backport https://github.com/solana-labs/solana/pull/14914 2021-01-29 01:13:52 +01:00
Hendrik Hofstadt 2b30a30601
upgrade solana sdk version (#166)
* upgrade solana sdk version

Commitment levels were deprecated and the fastest confirmation level is `Processed`.

Also the upgradeable loader now requires the program to be writeable.

* Add deprecation comment

* update agent commitment level
2021-01-28 17:44:54 +01:00
Hendrik Hofstadt a5380b8ab1
Fix rent calculation and hardening (#163)
* use proper account for min balance calculation

* check bridge key in sig verify

* check bridge key in VAA processor
2021-01-25 15:11:38 +01:00
Stanisław Drozd c5d90f779c
Use /usr/bin/env for shell scripts; web/.dockerignore: node_modules (#159)
* Use /usr/bin/env for shell scripts; web/.dockerignore: node_modules
2021-01-23 18:20:17 +01:00
Hendrik Hofstadt fd6c54de83
bridge/pkg/solana: use polling GetProgramAccounts watcher (#156)
This mitigates https://github.com/solana-labs/solana/issues/9909 by
polling GetProgramAccounts with a server-side filter. It also removes
the agent dependency for the lockup observation logic - the agent is now
used for transaction construction only.
2021-01-21 11:31:32 +01:00
Leo 108f050c0e Clarify public keys vs public key's hashes in comments and docs 2021-01-21 00:59:50 +01:00
Yuriy Savchenko eeb560cb5c Terra integration added to e2e tests 2021-01-19 16:50:26 +01:00
Hendrik Hofstadt 82fd4293e2
Fix guardian set expiration on Solana (#155)
* fix guardian set expiration on Solana
2021-01-19 16:44:48 +01:00
Leo 9f2f609bc1 Bump Go and pin all Docker images to digests 2021-01-19 16:15:54 +01:00
Hendrik Hofstadt efa03ef73c
Implement upgradeability (#151)
* Implement contract upgrade VAA action

* naming and (╯°□°)╯︵ ┻━┻

* Carefully unflip table and replace broken cutlery ┬─┬ノ( ◕◡◕ ノ)

* fix and automate upgradeability

* document contract upgrade call

* Update comments

* Exhaustiveness check in VAA payload switch

* Fix typo

Co-authored-by: Leo <leo@certus.one>
2021-01-19 13:01:45 +01:00
Hendrik Hofstadt 274bb7c97d
Owner and sysvar check hardening (#154)
* owner and sysvar check hardening
2021-01-12 23:21:30 +01:00
Hendrik Hofstadt 12a6ae31bc
Watch slots for Solana liveness monitoring (#141)
* add slot notifications to the agent

* fix proto field naming
2021-01-11 12:43:05 +01:00
Hendrik Hofstadt 03ef5e1017
Don't evict governance VAA signatures (#137)
* don't evict governance VAA signatures

They need to persist for data availability (to be cross-submitted to other chains)
2020-12-17 11:27:46 +01:00
Leo e2f517f91c solana: fix typo in clap help 2020-12-07 11:20:27 +01:00
Leo 8b10b96362 solana: use clap for command line arguments 2020-12-06 22:45:45 +01:00
Leo f7f4f6d74b solana: add clap crate and update cargo dependencies 2020-12-06 22:15:43 +01:00
Hendrik Hofstadt bec598b41a
Fix subsidization and fees (#127)
* Revert "solana: partially revert #82 subsidization changes"

This reverts commit 2967653e

* fix subsidization

* fix deleted grpc tag dependency

* revert devnet changes

* verify system instruction action

* ┬─┬ノ(ಠ_ಠノ)
2020-11-30 11:09:08 +01:00
Leo 5997f133c3 solana: use loopback address to connect to other containers in same pod
There's a bit of a chicken-and-egg problem here - the liveness probe
cannot succeed until all containers in the pod are ready, and the
service load balancer won't work until it's ready.
2020-11-29 19:19:37 +01:00
Leo 2967653e06 solana: partially revert #82 subsidization changes
... while keeping the borrowing fixes. Please review carefully whether
any of the remaining changes should've been reverted as well.

Fails due to account ownership check for debits, new tests caught it.
2020-11-29 17:07:15 +01:00
Leo fddbd01f9d solana: update Rust and Solana to latest stable releases
Unfortunately, the new release has a much chattier message_processor,
but we cannot do anything about that without losing value debug info.
2020-11-29 17:07:15 +01:00
Leo de8d1dee31 devnet: pin Dockerfile syntax to digest
This speeds up the build by ~1.5s by avoiding a remote lookup on
Docker Hub every time this is built (WTF).
2020-11-29 17:07:15 +01:00
Leo a2f48fdee3 solana/cli: fetch token account balance
The request needs to include the decimals (part of the derivation path).
2020-11-29 17:07:15 +01:00
Leo 45837241ed devnet: add readiness checks to most components 2020-11-29 17:07:15 +01:00
Leopold Schabel 8306a83833
solana/agent: listen on UNIX socket (#122)
This allows us to use UNIX filesystem permissions for access control.

Previously, any process in the network namespace could connect to it,
which is insecure for obvious reasons.

Verified that correct permissions are set:

```
# ls -lisa /run/bridge/
total 8
31996269 4 drwxrwxrwx 2 root root 4096 Nov 23 21:58 .
14676759 4 drwxr-xr-x 1 root root 4096 Nov 23 21:58 ..
31996306 0 srwx------ 1 root root    0 Nov 23 21:58 agent.sock
```

Fixes #119
2020-11-24 09:48:44 +01:00
Hendrik Hofstad 3e57f475e1 solana: fix borrow issues 2020-11-20 14:23:05 +01:00
Hendrik Hofstadt 8510140165
subsidize guardian transactions using fees (#82)
* subsidize guardian transactions using fees

* reuse transfer function

* evict signature state on inbound transfers

* fix mutability issues due to copying

* add fee refund

* unify fee calculation

* add fee documentation

* Unflip tables

* type annotation
2020-11-19 22:47:09 +01:00
Leo fdc2be10b3 solana: verify that new guardian set isn't empty
ghstack-source-id: 4fc1d94152
Pull Request resolved: https://github.com/certusone/wormhole/pull/101
2020-11-19 12:57:21 +01:00
Hendrik Hofstadt cee28540bd
Upgrade SDK; add balance rpc call (#80) 2020-11-13 14:14:56 +01:00
Leo 86fdfa859b devnet: deterministic Solana accounts and lockup generator 2020-11-10 22:53:36 +01:00
Leo f3107ebed4 solana: add uncommitted Cargo.lock files
If there's a reason they are missing, then I didn't realize :-)

Ref #29

ghstack-source-id: 9052f64e76
Pull Request resolved: https://github.com/certusone/wormhole/pull/68
2020-10-28 22:47:12 +01:00
Leo 13f79a96b3 devnet: use real account and nonce for send-lockups.js
ghstack-source-id: fb233fa727
Pull Request resolved: https://github.com/certusone/wormhole/pull/61
2020-10-28 22:47:12 +01:00
Hendrik Hofstadt dadb287220
bridge: fix quorum calculation (#69) 2020-10-28 21:22:15 +01:00
Hendrik Hofstadt cf90bbec0d cli: create_wrapped command, deterministic generation 2020-10-28 20:37:06 +01:00
Hendrik Hofstadt 8d7a35683e
bridge: fix quorum (#56) 2020-10-25 08:57:04 +01:00
Leo 187355b0c8 solana: fix devnet_setup.sh sleep 2020-10-22 13:09:05 +02:00
Leo faf9a71cef agent: return gRPC Internal error on submission failure
This allows us to distinguish between temporary and permanent failure.

Unless we check the instruction error that occured, we can't know
whether the submission error is a permanent failure and Internal
is therefore the appropriate code to use.

ghstack-source-id: aff1de9516
Pull Request resolved: https://github.com/certusone/wormhole/pull/47
2020-10-22 12:20:12 +02:00
Hendrik Hofstadt e266bf1a7c
Implement assistant & Reimplement wrapped asset precreation (#42)
* all: readd early wrapped meta creation; initial transfer wizard

* web: complete transfer assistant

* web: allow multiple accounts per wrapped mint
2020-10-14 11:49:13 +02:00
Hendrik Hofstadt ddd2c901bd solana: create sig verify account in instruction
This allows multiple guardians to submit the signatures in parallel without causing costs with all transactions because conflicting txs won't be mined.
2020-10-03 21:20:24 +02:00
Hendrik Hofstadt 25533f0264
bridge: add secp check instruction (#41)
* bridge: add secp check instruction

* solana: update to secp solana upstream

* solana: iteration on secp

* solana: fix secp instruction

serialization indices were off and secp ix data was serialized twice

* solana: optimize ix serialization

* agent: send multiple chunks of signatures

* doc: update protocol spec

* solana: store signatures in siginfo; reconstruct signed VAA in webinterface

* solana: reformat

* solana: add rustfmt config
2020-10-01 16:42:45 +02:00
Hendrik Hofstadt 4ba7885c62 solana: add retry/poking mechanism
Closes #6
2020-08-31 21:05:38 +02:00
Hendrik Hofstadt 941220bc85 bridge: optimize VAA claim derivation
Instead of hashing the body manually, we pass the body to the address derivation syscall.
2020-08-31 20:09:06 +02:00
Hendrik Hofstadt fb603d468c agent: remove keepalive routine 2020-08-31 14:20:36 +02:00
Hendrik Hofstadt 45a25e0386 bridge: prevent multiple signatures from single guardian 2020-08-31 09:26:38 +02:00
Hendrik Hofstadt b4b0c61dfc bridge: require single step guardian set index changes 2020-08-31 09:25:41 +02:00
Hendrik Hofstadt a1387dafea agent: print errors 2020-08-28 17:14:32 +02:00
Hendrik Hofstadt f6750a3762 all: consider decimals on wrapped assets, fix VAA posting, fix solana account parsing 2020-08-28 15:10:42 +02:00
Hendrik Hofstadt 8e6dc495dc bridge: remove VAA timeout
Closes #35
2020-08-28 08:49:46 +02:00
Hendrik Hofstadt ed0a6d4b2e bridge: use proper source address 2020-08-28 08:36:33 +02:00
Hendrik Hofstadt 042ff4a14b bridge: properly handle VAA submissions 2020-08-24 12:56:19 +02:00
Leo 206eca5ac5 Set a recipient address in devnet_setup.sh
Lockup VAAs are now accepted on ETH.
2020-08-22 11:10:13 +02:00
Hendrik Hofstadt 3d771ea41d cli: add recipient to lock command 2020-08-22 11:02:50 +02:00
Leo c65d221ab3 Run devnet_setup.sh as solana-devnet sidecar 2020-08-22 10:52:51 +02:00
Leo fbf6e17d3e Use skip_preflight for CLI transactions
The preflight bank is set to max committment level, so we
wouldn't see previous txs with single confirmation.
2020-08-22 10:43:34 +02:00
Hendrik Hofstadt 738967c8d0 bridge: fix quorum checks 2020-08-22 01:10:45 +02:00
Hendrik Hofstadt 0d5bef7366 agent: handle connection failures 2020-08-22 00:18:03 +02:00
Hendrik Hofstadt 6b113853bd solana: fix missing transfer info and cli checks 2020-08-21 23:41:54 +02:00
Hendrik Hofstadt 2cd0d38e3d Merge branch 'master' of github.com:certusone/wormhole 2020-08-21 22:56:32 +02:00
Hendrik Hofstadt e3dcc654fb bridge: simplify lockup serialization 2020-08-21 22:56:21 +02:00
Leo 4b24a74547 agent: use max commitment and fix nonce type
It appears that single confirmation level is not useful
for transactions that depend on each other.
2020-08-21 22:53:31 +02:00
Hendrik Hofstadt 0c8cf93f85 solana: wait for full confirmation 2020-08-21 21:58:43 +02:00
Leo 86ccc1c617 Solana devnet fixtures and lockup generator 2020-08-21 20:48:58 +02:00
Hendrik Hofstadt 549f7ad69c solana: track time on lockups 2020-08-21 19:51:45 +02:00
Hendrik Hofstadt 5f253415d5 cli: add airdrop call 2020-08-21 18:55:59 +02:00
Hendrik Hofstadt a8d2f36a12 agent: inject static account key 2020-08-21 18:10:54 +02:00
Hendrik Hofstadt e0c2fbf990 agent: add lockup_address 2020-08-21 17:58:35 +02:00
Hendrik Hofstadt a1e548e4b9 solana: don't rebuild solana when bridge changes 2020-08-21 16:29:44 +02:00
Hendrik Hofstadt 6070cf25eb agent: load key from disk 2020-08-21 15:53:59 +02:00
Hendrik Hofstadt 6a548e5695 bridge: use constant for max guardians 2020-08-21 15:02:02 +02:00
Hendrik Hofstadt 51ed6323b4 bridge: improve build caching 2020-08-21 14:52:38 +02:00
Hendrik Hofstadt 1d960405d1 bridge: check quorum 2020-08-21 12:45:40 +02:00
Leo f1f2d0c8b8 Solana VAA submission stub 2020-08-20 21:48:58 +02:00
Leo c6efc410cb solana: remove extra uncached build
Derp
2020-08-20 20:19:06 +02:00
Hendrik Hofstadt a4fecd36f0 solana: build token program using latest solana version 2020-08-20 20:12:44 +02:00
Hendrik Hofstadt 8f4127f781 Add slot to agent 2020-08-20 19:20:11 +02:00
Leo 894e058091 Build Solana smart contract 2020-08-20 18:56:26 +02:00
Hendrik Hofstadt 59449a30b3 Update VAA structure 2020-08-19 16:41:25 +02:00
Hendrik Hofstadt 256439b766 Fix solana agent 2020-08-19 15:14:39 +02:00
Hendrik Hofstadt 5cd3db9a14 Working solana transfers from webui 2020-08-18 22:54:18 +02:00
Hendrik Hofstadt f8e70efb0b Fixes for actual CPI usage and variable VAA size 2020-08-17 21:02:04 +02:00
Leo ca2a2d9686 Remove deleted token crate from workspace 2020-08-17 18:25:46 +02:00
Hendrik Hofstadt e040449197 Working transfer in 2020-08-17 17:06:21 +02:00
Hendrik Hofstadt 49d2872d9c Update devnet and Solana program 2020-08-16 13:21:39 +02:00
Leo 61a7d35a02 solana/agent: fix listen address and change port to u16 2020-08-15 23:54:10 +02:00
Leo d8c9b41a01 Add builds for protos and the Solana agent
- Build buf and protoc-gen-go and use it to build Go proto packages
- Rename agent proto package to agent.v1 (to prevent namespace collisions and conform to buf's standards)
- Default to DOCKER_BUILDKIT=1 for CI setup
- Add incremental Docker build for solana/agent
- Move build machinery to top level
2020-08-15 22:15:26 +02:00
Hendrik Hofstadt f54fc43118 update claimed vaa doc 2020-08-10 08:48:25 +02:00
Hendrik Hofstadt 70a1f24220 add rudimentary VAA sending 2020-08-10 00:00:36 +02:00
Hendrik Hofstadt 8167285560 update bridge doc 2020-08-09 18:26:58 +02:00
Hendrik Hofstadt f158bb4b5f add watch-only version of the rust agent 2020-08-08 21:34:25 +02:00
Hendrik Hofstadt 3b96e0cc6d track meta of wrapped assets; update SDK 2020-08-08 12:35:24 +02:00
Hendrik Hofstadt 3aaba4b5bc add create wrapped step to initial inbound transfers 2020-08-07 22:11:19 +02:00
Hendrik Hofstadt 30666fd7ff track wrapped asset meta, test CLI with acc creation 2020-08-07 21:48:22 +02:00
Hendrik Hofstadt ff0b4766ae add instruction constructors 2020-08-07 16:10:30 +02:00
Hendrik Hofstadt 86dd02e0e6 Rework accounts in solana programs 2020-08-07 13:38:09 +02:00
Hendrik Hofstadt b3832ab8c7 Fully implement U256; add source_address to transfer VAA 2020-08-05 13:12:54 +02:00
Hendrik Hofstadt dece1a6a90 Fix protocol compatibility and increase VAA test coverage 2020-08-05 12:28:44 +02:00
Hendrik Hofstadt 90e75b3d22 Add token CLI copy that can create a bridge 2020-08-05 10:08:25 +02:00
Hendrik Hofstadt 7ddf910faa
Implement initial solana program (#3)
* add rust program

* update rust program

* first VAA actions

* implement full transfer

* remove token copy

* restructure and copy
2020-08-03 14:55:58 +02:00