Deployment Issues
Git Dependencies Failed
Error Message:Unpublished Dependencies Error
Error Message:Package Size Exceeded
Error Message:- Split into multiple packages
- Remove unused dependencies
- Optimize data structures
- Move large constants off-chain
Insufficient Gas for Deployment
Error Message:- Simple packages: 50-100M gas
- Complex packages: 100-200M gas
- With dependencies: 200M+ gas
Upgrade Authority Issues
Error Message:UpgradeCap for the package.
Solution:
- Verify you’re using the correct account
- Check UpgradeCap ownership:
- Transfer UpgradeCap if needed
Configuration Issues
Channel Not Initialized
Error Message:Peer Not Set
Error Message:Library Configuration Missing
Error Message:- Use default libraries (don’t set custom)
- Or properly configure custom library:
Configuration Errors
Peer Address Error (oapp_registry abort)
Error Message:- Sui OApps use
CapType::Packagefor CallCap - Registry and verification systems key by package address
- Object IDs are instance-specific, package ID is deployment-specific
Package ID vs Object ID Confusion
Error Message:- Package ID: Address of published code (immutable bytecode)
- Object ID: Address of object instance (mutable state)
Invalid BCS Bytes Error
Error Message:tx.pure() instead of SDK’s asBytes() helper for byte array parameters.
Solution: Use the SDK’s asBytes() helper:
asBytes() function performs proper BCS vector wrapping:
- Takes raw bytes and wraps them in BCS vector format
- Handles Transaction Argument pass-through
- Ensures proper deserialization in Move’s
vector<u8>type
tx.pure() fails:
- Direct
tx.pure(bytes, 'vector<u8>')doesn’t apply BCS vector wrapping - Move deserializer expects BCS-encoded vector format
- Results in
InvalidBCSByteserror
-
- DVN/ULN configuration
-
- Execution options
-
- OApp info parameters
-
- Any
vector<u8>config parameter
- Any
Execution Errors
Executor Transaction Fails (UnusedValueWithoutDrop)
Error Message:lz_receive() function.
Most Common Reason for OFTs: Missing or incorrect lz_receive_info during registration.
Solution for OFTs:
- Generate proper lz_receive_info:
- Update OApp info in registry:
lz_receive_info during initial OFT registration (see OFT Overview).
OApp Registry Error
Error Message:callCap.id() returns the package address.
Runtime Errors
Call Object Not Consumed
Error Message:Call object was not properly consumed before the transaction ended.
Root Causes:
- Missing confirmation call (e.g.,
confirm_lz_send) - PTB doesn’t route the
Callthrough all required modules Callobject created but never destroyed
- Every
Callcreation has a corresponding confirm call - PTB includes all required routing steps
- No early returns that skip confirmation
- All
Callobjects are destroyed before transaction ends
Invalid Recipient
Error Message:- Verify recipient address is valid
- For token sends, check if recipient needs an account created
- Ensure address format is correct (32 bytes)
Gas Estimation Failures
Error Message:- Check transaction parameters are valid
- Verify all required objects exist
- Ensure signer has necessary permissions
- Try with higher gas budget
Transaction Issues
PTB Construction Failures
Error Message:Object Ownership Errors
Error Message:- Verify object ownership:
{"AddressOwner": "0x..."}- Owned by specific address"Shared"- Shared object (accessible to anyone)"Immutable"- Immutable object (read-only)
- Use correct signer: Ensure the transaction signer owns the object
-
Check object type:
- Owned objects (
AdminCap,CallCap): Must be owned by signer - Shared objects (
OApp,EndpointV2): Accessible by anyone, use references (&or&mut) - Immutable objects (
CoinMetadata): Read-only references only
- Owned objects (
Storage Rebate Confusion
Error Message (not actually an error):- You get a rebate for the freed storage
- Net gas cost can be negative
- Base budget of 1000 is still required
SDK Errors
Connection Timeout
Error Message:- Use a different RPC endpoint
- Increase timeout:
- Consider using a private RPC provider
Invalid Object ID
Error Message:Type Mismatch
Error Message:Debugging Tips
Enable Verbose Logging
Check Transaction Effects
Inspect Objects
Use Sui Explorer
Navigate to SuiScan to:- View transaction details
- Check object states
- Inspect event logs
- Verify package deployments
Test on Devnet First
Always test on devnet before testnet/mainnet:Getting Help
If you continue to experience issues:- Check Documentation: Review Sui Documentation
- Search Discord: Look for similar issues in LayerZero Discord
- Ask for Help: Post in Discord with:
- Error message
- Transaction hash (if available)
- Code snippet
- What you’ve tried