-
Notifications
You must be signed in to change notification settings - Fork 16
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: support multisend cosmos interface #143
Conversation
WalkthroughThe changes introduce a new public entry function called Changes
Possibly related PRs
Poem
Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media? 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
🧹 Outside diff range and nitpick comments (1)
precompile/modules/minitia_stdlib/sources/coin.move (1)
85-101
: Approve with suggestions:sudo_multisend
function implementationThe
sudo_multisend
function is a valuable addition for enabling batch transfers. However, I have a few suggestions to enhance its robustness and clarity:
- Add a check to ensure that the
recipients
andamounts
vectors have the same length:assert!(vector::length(&recipients) == vector::length(&amounts), error::invalid_argument(EINVALID_VECTOR_LENGTHS));
- Implement a balance check before processing transfers to ensure the sender has sufficient funds:
let total_amount = vector::fold(amounts, 0u64, |acc, amount| acc + amount); assert!(balance(signer::address_of(sender), metadata) >= total_amount, error::invalid_argument(EINSUFFICIENT_BALANCE));
Consider handling potential errors from individual transfers, perhaps by using a transaction script that can handle partial success.
Add a comment explaining the purpose and administrative nature of the function:
/// Executes multiple transfers in a single transaction. This is an administrative /// function that can only be called by authorized entities.
- Consider adding a maximum limit to the number of recipients to prevent potential DoS attacks or excessive gas usage.
These changes will improve the function's safety, clarity, and robustness.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
📒 Files selected for processing (2)
- precompile/modules/initia_stdlib/sources/coin.move (2 hunks)
- precompile/modules/minitia_stdlib/sources/coin.move (2 hunks)
🧰 Additional context used
🔇 Additional comments (4)
precompile/modules/minitia_stdlib/sources/coin.move (2)
8-8
: LGTM: Import ofstd::vector
is correct and necessary.The import of
std::vector
is appropriately placed and is required for the newsudo_multisend
function.
Line range hint
1-101
: Summary: New multisend functionality added with minor improvements suggestedThe changes introduce a new
sudo_multisend
function to enable batch transfers of fungible assets. The implementation is generally well-structured and integrates smoothly with the existing codebase. However, I've suggested a few improvements to enhance safety, efficiency, and clarity.Overall, this is a valuable addition to the module, providing a way to perform multiple transfers in a single transaction, which can be particularly useful for administrative or batch processing scenarios.
precompile/modules/initia_stdlib/sources/coin.move (2)
8-8
: LGTM: New import added correctly.The
std::vector
import is correctly added and is necessary for the newsudo_multisend
function. The placement is consistent with the existing import style in the file.
Line range hint
1-478
: Overall assessment: The changes implement multisend functionality as intended.The new
sudo_multisend
function and the addition of thestd::vector
import successfully implement the multisend functionality for the Cosmos interface. The changes align well with the PR objectives and maintain consistency with the existing codebase.Key points:
- The
sudo_multisend
function allows for efficient multiple transfers in a single transaction.- Proper permission checks are in place using the
check_sudo
function.- The implementation uses
vector::zip_reverse
for efficient iteration over recipients and amounts.While the core functionality is sound, consider implementing the suggested improvements for input validation and error handling to enhance the robustness of the function.
* upgrade policy check to dependency modules * fix broken tests * pass policy check if dep is stdlib * add code publish tests * fmt and clippy * feat: implement flashswap (#142) * implement flashswap * fix typo; * fix missing pool_amounts conversion * change the impl to use hot potato pattern * fix typo and add borrow_amounts read function * rename get_borrow_amounts * movefmt * lock the pool at flash swap and disallow provide liquidity and swap operations * add testcases * fmt and rebuild * lock first before calling external functoins * add flash swap event * feat: support multisend cosmos interface (#143) * introduce multisend * remove unused from minitia_stdlib * add comments for the error handlings * change to call move function instead of reading table context data (#147) * change to call move function instead of reading table context data * lint * change to do not receive module_ids --------- Co-authored-by: beer-1 <[email protected]> Co-authored-by: beer-1 <[email protected]>
* wip: apply loader v2, need to fix move to json error * copy type conversion functions from runtime loader & handle json parsing error * bump aptos core loader v2 version * introduce InitiaModuleStorage using LRU module cache * introduce InitiaCodeStorage to connect InitiaModuleStorage * manage module cache as a single unit within the Initia VM * manage script cache as a single unit within the Initia VM * fmt and clippy * compiled module & script interface change * use custom move (#140) * update rust version * clone runtime_environment on every call * introduce lock on cache (#141) * use aptor-core move & flush type_cache every vm call * not cloning environment with flushed ty_cache * fix coderabbit audit * feat: deps code upgrade policy check (#144) * upgrade policy check to dependency modules * fix broken tests * pass policy check if dep is stdlib * add code publish tests * fmt and clippy * feat: implement flashswap (#142) * implement flashswap * fix typo; * fix missing pool_amounts conversion * change the impl to use hot potato pattern * fix typo and add borrow_amounts read function * rename get_borrow_amounts * movefmt * lock the pool at flash swap and disallow provide liquidity and swap operations * add testcases * fmt and rebuild * lock first before calling external functoins * add flash swap event * feat: support multisend cosmos interface (#143) * introduce multisend * remove unused from minitia_stdlib * add comments for the error handlings * change to call move function instead of reading table context data (#147) * change to call move function instead of reading table context data * lint * change to do not receive module_ids --------- Co-authored-by: beer-1 <[email protected]> Co-authored-by: beer-1 <[email protected]> * apply recent aptos update making struct index map to arc * calculate cache size using real heap size * fmt clippy * add storage & code conversion test * fix script access specifier * add code scale test code to be used in e2e test & debug code to identify equal structs * add panic handling when fetching size * apply merged version * Feat/refactor native code (#154) * change upgrade policy u8 to enum * code test cleanup & use loaderv2 as default * code module type * typo * nit error message change * cleanup module cache code * nit error message * delete type conversion funcs from sessionExt & use them from session directly * use 1 as cache weight for all cache items * minor lint fix * feat: use constant cache weight for all modules & scripts (#156) * use 1 as cache weight for all cache items * small refactor --------- Co-authored-by: beer-1 <[email protected]> Co-authored-by: beer-1 <[email protected]>
Description
Closes: #XXXX
Author Checklist
All items are required. Please add a note to the item if the item is not applicable and
please add links to any relevant follow up issues.
I have...
!
in the type prefix if API or client breaking changeReviewers Checklist
All items are required. Please add a note if the item is not applicable and please add
your handle next to the items reviewed if you only reviewed selected items.
I have...
Summary by CodeRabbit
sudo_multisend
for transferring fungible assets to multiple recipients simultaneously.