-
Notifications
You must be signed in to change notification settings - Fork 17
Open
Description
Environment
- Network: Pod Network V1 Devnet
- Chain ID: 1293
- RPC: https://rpc.v1.dev.pod.network
- Testing period: August-September 2025
Summary
Multiple SDK examples fail systematically due to non-functional Pod primitives, while equivalent standard Solidity implementations work correctly.
Root Cause Analysis
Based on source code review, requireTimeBefore() internally calls requireQuorum():
function requireTimeBefore(Time.Timestamp _timestamp, string memory _message) view {
requireQuorum(Time.currentTime().lt(_timestamp), _message);
}Repository Inconsistency
/examples/directory: Uses non-functional Pod primitives/docs/within same repo: Shows working contracts with standard Solidity- Production contract (0x217F5658c6ecC27D439922263AD9Bb8e992e0373): Uses
block.timestampsuccessfully - This creates confusion for developers following official examples
Affected Components
1. requireTimeBefore() - Auction Example
- File:
examples/solidity/src/Auction.sol - Issue: All calls to
requireTimeBefore()result in failed transactions (status 0) - Evidence: Contract 0xfE4Ae4B2aAa8B686916F203AAB9939c40b22284B, all deadline values tested
- Workaround:
require(block.timestamp <= deadline)works (status 1)
2. requireQuorum() - Tokens Example
- File:
examples/tokens/contracts/Tokens.sol - Issue:
requireQuorum()for balance validation causes transfer failures - Evidence: Contract 0x6eb77940fD64d791eb3B443b49a0073ad4cF22E0, all transfer attempts fail
- Workaround: Standard
require()works
3. FastTypes.Balance
- Multiple examples using FastTypes.Balance
- Issue: Systematic transfer failures across different contracts
- Workaround: Standard mapping works
Working Examples
- Voting, NFTs, Notary, HashChallenge function correctly
- These use events, basic state, and simple Pod patterns
- Standard Solidity patterns work as expected
Technical Evidence
- 22 validator attestations received per transaction
- Normal gas consumption and finality (~200ms)
- Infrastructure functioning correctly
- Issue isolated to specific primitives that depend on
requireQuorum()
Contract Addresses Available for Investigation
- Failing Auction: 0xfE4Ae4B2aAa8B686916F203AAB9939c40b22284B
- Failing Tokens: 0x6eb77940fD64d791eb3B443b49a0073ad4cF22E0
- Working contracts: Multiple addresses available upon request
Proposed Solutions
- Fix
requireQuorum()implementation on devnet - Update SDK examples to use working patterns consistent with documentation
- Add clear documentation about primitive limitations on devnet
- Align
/examples/directory with production patterns shown in/docs/
Impact
Developers following official examples get non-functional contracts, potentially blocking devnet adoption and creating frustration for early adopters.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels