Environment
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.timestamp successfully
- 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.
Environment
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 callsrequireQuorum():Repository Inconsistency
/examples/directory: Uses non-functional Pod primitives/docs/within same repo: Shows working contracts with standard Solidityblock.timestampsuccessfullyAffected Components
1. requireTimeBefore() - Auction Example
examples/solidity/src/Auction.solrequireTimeBefore()result in failed transactions (status 0)require(block.timestamp <= deadline)works (status 1)2. requireQuorum() - Tokens Example
examples/tokens/contracts/Tokens.solrequireQuorum()for balance validation causes transfer failuresrequire()works3. FastTypes.Balance
Working Examples
Technical Evidence
requireQuorum()Contract Addresses Available for Investigation
Proposed Solutions
requireQuorum()implementation on devnet/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.