wormhole-foundation / wormhole Goto Github PK
View Code? Open in Web Editor NEWA reference implementation for the Wormhole blockchain interoperability protocol.
Home Page: https://wormhole.com
License: Other
A reference implementation for the Wormhole blockchain interoperability protocol.
Home Page: https://wormhole.com
License: Other
The spec says 2/3+, implementation is 2/3. Fix this and align across all components.
More of a formality due to how our consensus works.
The Terra devnet needs some improvements to bring it up to the level of the Eth & Solana integrations:
checkDevModeGuardianSetUpdate
. terra-terrad โ E[2020-11-19|01:26:22.936] Failed to save AddrBook to file module=p2p book=/root/.terrad/config/addrbook.json file=/root/.terrad/config/addrbook.json err="open /root/.terrad/config/write-file-atomic-05346018749820359876: read-only file system"
Determinism and automated setup is required to run automated tests for the Terra integration.
There's nothing in the spec preventing this - test this.
We'll need to charge fees for ETH relayers (gas fees).
Challenges:
Necessary for network observability.
All ERC20 tokens are currently called WWT, which might confuse the heck out of block explorers, wallets, and users.
The reason for this is that SPL tokens do not have names on-chain, but we can do the next best thing and include the truncated SPL token address to make them easier to distinguish.
systemd-ask-password
?http://phab/T756 (internal SignOS task) showed up when my overnight test run crashed:
2020-08-20T22:54:23.460Z ERROR wormhole-guardian-1.supervisor Runnable died {"dn": "root.ethwatch", "error": "returned error when NODE_STATE_NEW: panic: hash is required to be exactly 32 bytes (31), stacktrace: goroutine 90 [running]:\nruntime/debug.Stack(0xc000144ab0, 0x10acc40, 0xc000227330)\n\t/usr/local/go/src/runtime/debug/stack.go:24 +0x9d\ngithub.com/certusone/wormhole/bridge/pkg/supervisor.(*supervisor).processSchedule.func1.1(0xc0005b4f80, 0xc0002d2330)\n\t/app/pkg/supervisor/supervisor_processor.go:140 +0x6e\npanic(0x10acc40, 0xc000227330)\n\t/usr/local/go/src/runtime/panic.go:969 +0x166\nmain.ethLockupProce
ssor.func1(0x15a5c80, 0xc0005b5100, 0x10c9120, 0xc0000ff380)\n\t/app/cmd/guardiand/ethwatch.go:136 +0x4d24\ngithub.com/certusone/wormhole/bridge/pkg/supervisor.(*supervisor).processSchedule.func1(0xc0005b4f80, 0xc0002d2330, 0xc00001b2d0)\n\t/app/pkg/supervisor/supervisor_processor.go:147 +0x6a\ncreated by github.com/certusone/wormhole/bridge/pkg/supervisor.(*supervisor).processSchedule\n\t/app/pkg/supervisor/supervisor_processor.go:133 +0xae\n"} 2020-08-20T22:54:23.462Z INFO wormhole-guardian-1.supervisor rescheduling supervised node {"dn": "root.ethwatch", "backoff": -0.000000001}
Necessary for network observability.
A guardian set update with 20 guardians exceeds transaction size limits, effectively limiting the set to 19.
Either update docs, or figure out how to mitigate it.
We currently re-submit submission lockups that met quorum each time we receive an additional signature.
This is excessive, let's be more clever about it.
returned error when NODE_STATE_NEW: panic: hash is required to be exactly 32 bytes (31)
Full log w/ stacktrace: https://gist.github.com/leoluk/17ee8ca1b742bb6994a11790876f798d
Requires #27
Anyone can talk on the p2p gossip channel and send invalid lockup observations.
Nodes shouldn't fail to start if the entrypoint is down.
This is a placeholder ticket for ERC-721 NFT wrapping support. Our team is not planning to implement this, but the project is open to contributions that add such support. If you plan to work on this, please reach out first (like by commenting on this issue or the #wormhole channel on the Solana Discord server).
Rough outline on what is needed:
Depending on what mainnet upgrade paths will look like, it may also require a separate bridge contract on Ethereum (#13).
Blocked by:
A used should be able to submit their VAA from Solana to ETH.
vaaState
entries after a given timeout if we failed to reach consensus.The Terra VAA submission currently blocks the observation loop.
This needs to be refactored to submit asynchronously like Solana to avoid stalls when the terra request takes longer than expected.
We need at-least-once delivery of signed VAAs to the chain.
Complications:
Every node will have a different timestamp, and fail consensus.
VAAs need to stay valid while the guardian set is valid to allow users to resubmit dropped VAAs.
As part of our test suite, we need to test with very high tx rates on Solana.
In order to reduce fees on Solana and reduce the storage usage of the bridge system, temporary accounts can be evicted.
Accounts that can be evicted:
The ClaimedVAA
is created and paid for by the guardians, the TransferOutProposal
is paid for by the user locking the tokens.
Account | Size (byte) | Rent | Rent USD (3.4 $/SOL) |
---|---|---|---|
TransferOutProposal | 1140 | 0.009 SOL | 0.03$ |
ClaimedVAA | 37 | 0.001 SOL | 0.004$ |
In order to incentivize guardians and cover their SOL costs, all "rent refunds" go to the bridge program. The balance of the bridge is used to subsidize the creation of ClaimedVAAs (to reduce the cost that guardians have to cover). If there is any excess balance on the bridge, we can consider paying it out to the guardians.
To still guarantee data-availability and prevent replay attacks, we need to make sure that the ClaimedVAA
and TransferOutProposal
accounts live for at least the VAA validity period.
The various pieces of guardiand are decoupled such that they can be individually tested.
If a user mistakenly sends tokens to an invalid chain ID, they're stuck forever.
We could be nice and send them back, either manually or automatically.
This is required for off-chain governance.
We'll need a delegatecall proxy in front of the Ethereum bridge to allow upgrades.
The upgrades will be implemented as VAA 0x02
- UpgradeEthereumBridge.
Need to include decimals field in VAA? (we need to know for the WrappedAsset)
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.