Open
Description
The purpose of this workshop is to share the improvement areas of Gno that Onbloc finds necessary for upcoming testnet4 & mainnet while working on GnoSwap Contracts, GnoSwap Interface, Adena Wallet, and GnoScan. As one of the active core partners of Gno, Onbloc wants to contribute to defining important tasks for the upcoming testnet4 launch by sharing our inputs and getting assigned to some of the core tasks for the coordinated efforts.
Onbloc’s focus right now:
- GnoSwap Open Beta: The official open beta of GnoSwap on testnet4 (and Portal Loop) where users can try it. This beta version will include enhanced Swap router APIs, an automated GRC20 registry, and better UX/UI for pool-related actions. Adding marketing efforts too to raise Gno’s awareness in the crypto community. Aiming to launch by the end of April 2024.
- Adena: Working on v1.10.0, which includes an in-app faucet, pop-up window, injection improvement, and other minor bugs.
- Onbloc APIs Improvements: Replace our current indexer with the Gno tx-indexer to support custom RPC networks in Adena and GnoScan.
Improvements areas of Gno:
1. JSON
- Outline: JSON Encoder/Decoder with state machine.
- Current Progress:
- Finished the implementation (#1415), but it contains some inefficient workaround now that can be improved on a high level.
- Guilhem proposed another PR (#1776), and Byeongjun thinks this would be a more efficient and better solution, but based on his work/research on JSON in #1415, he wants to modify or add features in #1776.
- Conclusion
- Both #1415, #1776 to be reviewed by Milos and Petar.
2. bigint (u256)
- Outline: Packages for arbitrary precision for numbers outside of uint64 coverage in Go (Gno).
- Background
- GnoSwap (or any other dApps that require complex calculations) requires support for arbitrary precision.
- Attempt No. 1 bigint feat: native bigint using math/big.Int gno#764 → Possible memory issues raised by Morgan
- Attempt No. 2 uint256/int256 (#1778) https://github.com/gnoswap-labs/gnoswap/tree/main/_lib_package/big
- Porting References: uint256, int256.
- Current Progress:
- Implemented and applied in GnoSwap Contracts
https://github.com/gnoswap-labs/gnoswap/tree/main/_lib_package/big - All test cases passing but,
- Failing txtar tests Presumably a GnoVM Bug; unlikely a bug with u256/i256), and debugging to find problems.
- Implemented and applied in GnoSwap Contracts
- Discussions
- WIP feat(p/uint256): uint256 gno#1778 → Need a review by the Core team once done.
3. Emit/event
- Outline: modified previous PR to fit into current gno (#1653)
- Background
- Now relying on our own Sync Program & DB (Onbloc APIs) → Resource intensive & lack of real-time data support
- Many previous attempts
- Current Progress: Now blocked on code gen
- Discussions
- Critical for testnet4.
- TODO: Discuss with Milos on how to modify the current implementation.
4. Tx-indexer
- Outline:
- Transaction Raw Content data parsing and schema-defining
- Transaction filtering with GraphQL
- Transaction list, Realm Package list (The GRC20 token list requires extra work from the implementer’s side)
- Current Progress: Being mainly developed by Milos and Antonio, and Byeungjun and Jinwoo are looking into contributing it.
- Discussions
- Transaction filter tx-indexer#5 → To be reviewed by Milos.
- Open an issue with features needed for Adena and Gnoscan by Jinwoo.
5. Transaction Chaining
- Outline: Running chained transactions with a single request. (such as the One-click staking feature of GnoSwap)
- Current Progress: Issue: Transaction Chaining Method gno#1508 raised but doing it with a workaround.
- Conclusion: Manfred recommends handling this by creating a function using a pattern for chaining conditional transactions rather than supporting this at the language level.
- Discussions
- GnoSwap has implemented separate functions to handle these for now.
- A nice-to-have feature for now.
- TODO: take a look at how other blockchains solve these.
6. Contract Versioning
- Outline: Implementing versioning for realms to support updates or changes, while addressing challenges such as data loss, immutability, and data migration.
- Current Progress: Mainly by Hariom [RFC] Contract versioning (upgrade/proxy) gno#694, [RFC][WIP] feat: implement versioning gno#1631
- Discussions
- Required for Testnet4.
- Awaiting review by Milos.
7. Multi-node Initiative
- Outline: Multinode testnet initiative to test and define node specs and make an official guide with the Gno team.
- Current Progress:
- Discussions
- Blocker: gno secrets PR feat: add
gnoland secrets
command suite gno#1593 - The PR to be worked on this week by Milos
- Blocker: gno secrets PR feat: add
8. Onchain Registry
- Outline: A callback pattern for using GRC20 tokens in realms without the import syntax.
- Current Progress:
- Implemented to GnoSwap Contracts (Pool, Router, Staker) https://github.com/gnoswap-labs/gnoswap/blob/main/pool/token_register.gno
- Example PR feat: grc20 dynamic call with registered interface gno#1275
- Manfred recommends using GRC20 objects. To do so, we need #1257 to be complete. feat: Bound Method Realm support gno#1257
- When a GRC20 token is deployed on the blockchain, it must be automatically registered. We are using the code in: https://github.com/gnoswap-labs/grc20-register
- Discussion:
- A nice-to-have feature for now.
9. DevX Improvements (setup, logs, debugging tool, tests etc)
- Outline: Some work is being done by Byeungjun to improve the DevX.
- Adding some functions for p/ufmt
- Gno does not support os.Stdout, so I utilize println built-in function to access the stream buffer.
- Add ParseFloat and add %f option for Sprintf (strconv?)
- Fuzzing
testing.F
- Human-generated test code has limitations.
- Using genetic algorithm to manipulate the input data (mutation-based lexical fuzzing)
feat(stdlibs): Fuzz for String gno#1809
- Discussions
- To be worked on by Onbloc
10. Unknown bugs
- unexpected object with id Backend: Error: VM call panic: unexpected object with id c00e762742cf910938141c9647849974ef56ce9d:30 gnoverse/gnochess#97
- Temporary patch: https://github.com/gnolang/gnochess/pull/129/files
- Dragos patch: "VM call panic: unexpected object with id" when re-adding the same key to an avl.Tree after previously deleting it gno#1543
- struct with pointer field
- save & restore state from map or avl => panic
- Discussions
- To be reviewed by Petar.
11. Minor Pending PRs
- A PR to ensure that wugnot follows the specs of p/users and r/users after their recent changes. fix: make
r/demo/wugnot
compatible withr/demo/users
gno#1782 - A PR to add a test account in genesis for Adena’s faucet. feat: add adena wallet in-app faucet account gno#1808
Metadata
Metadata
Assignees
Labels
No labels
Type
Projects
Status
History