Gas & PANO Token
PANO is the native gas token of Panoptis Chain, serving as the fundamental currency for transaction fees, network security, and governance participation.
Native Currency : PANO functions as the native cryptocurrency of Panoptis Chain, similar to how ETH functions on Ethereum.
Function Description Gas Payments All transactions require PANO for execution fees Validator Staking Network security through PANO staking Governance Protocol decisions via PANO-weighted voting Block Rewards Validator and delegator incentives
Total Supply: Dynamic (based on staking rewards and fees)
Precision: 18 decimals
Symbol: PANO
Network: Panoptis Chain
Staking Rewards : Incentivize network security
Transaction Fees : Gas fee redistribution to validators
Governance Rewards : Participation incentives
Developer Grants : Ecosystem development funding
A unit of measurement representing computational work required to execute operations on Panoptis Chain.
The amount of PANO paid per unit of gas, set by users to prioritize transactions.
The maximum amount of gas a user is willing to spend on a transaction.
The minimum fee per gas unit, automatically adjusted based on network congestion (EIP-1559).
Additional fee paid to validators for faster transaction processing.
Total Fee = (Base Fee + Priority Fee) × Gas Used
Example:
Base Fee: 10 gwei
Priority Fee: 2 gwei
Gas Used: 21,000
Total Fee = (10 + 2) × 21,000 = 252,000 gwei = 0.000252 PANO
Operation Typical Gas Cost PANO Cost (estimate) Simple Transfer 21,000 ~0.0003 PANO ERC-20 Transfer 65,000 ~0.001 PANO Smart Contract Deploy 200,000-500,000 ~0.003-0.008 PANO DeFi Swap 150,000-300,000 ~0.002-0.005 PANO NFT Mint 100,000-200,000 ~0.0015-0.003 PANO
Dynamic Pricing : Actual costs vary based on network congestion and gas price settings.
// ✅ Optimized: Packed struct
struct OptimizedData {
uint128 amount; // 16 bytes
uint64 timestamp; // 8 bytes
uint32 id; // 4 bytes
bool active; // 1 byte -> 1 storage slot
}
// ❌ Unoptimized: Multiple slots
struct UnoptimizedData {
uint256 amount; // 32 bytes -> 1 slot
uint256 timestamp; // 32 bytes -> 1 slot
uint256 id; // 32 bytes -> 1 slot
bool active; // 32 bytes -> 1 slot
}
// Gas-efficient batch processing
function batchTransfer (
address [] calldata recipients ,
uint256 [] calldata amounts
) external {
require (recipients.length == amounts.length, "Length mismatch" );
for ( uint i = 0 ; i < recipients.length; i ++ ) {
_transfer ( msg.sender , recipients[i], amounts[i]);
}
}
// Monitor gas prices
async function getOptimalGasPrice () {
const feeData = await provider. getFeeData ();
return {
maxFeePerGas: feeData.maxFeePerGas,
maxPriorityFeePerGas: feeData.maxPriorityFeePerGas,
gasPrice: feeData.gasPrice
};
}
// Set gas parameters
const transaction = {
to: recipientAddress,
value: ethers. parseEther ( "1.0" ),
maxFeePerGas: feeData.maxFeePerGas,
maxPriorityFeePerGas: feeData.maxPriorityFeePerGas,
gasLimit: 21000
};
// Estimate gas before sending
async function estimateTransactionCost ( transaction ) {
const gasEstimate = await provider. estimateGas (transaction);
const feeData = await provider. getFeeData ();
const totalCost = gasEstimate * feeData.gasPrice;
console. log ( `Estimated gas: ${ gasEstimate . toString () }` );
console. log ( `Estimated cost: ${ ethers . formatEther ( totalCost ) } PANO` );
return { gasEstimate, totalCost };
}
// Dynamic fee adjustment
function calculateOptimalFee ( networkCongestion ) {
const baseFee = getBaseFee ();
if (networkCongestion === 'low' ) {
return baseFee + ethers. parseUnits ( '1' , 'gwei' ); // Minimal priority
} else if (networkCongestion === 'high' ) {
return baseFee + ethers. parseUnits ( '10' , 'gwei' ); // Higher priority
}
return baseFee + ethers. parseUnits ( '5' , 'gwei' ); // Standard priority
}
# Get testnet PANO
curl -X POST https://faucet.panoptis.chain/api/faucet \
-H "Content-Type: application/json" \
-d '{"address": "YOUR_ADDRESS"}'
// Example bridge integration
async function bridgeToPartipos ( amount , fromChain ) {
const bridgeContract = new ethers. Contract (
BRIDGE_ADDRESS ,
BRIDGE_ABI ,
signer
);
const tx = await bridgeContract. deposit (amount, {
value: amount // If bridging ETH
});
await tx. wait ( 1 ); // Fast confirmation on Panoptis
console. log ( 'Bridge transaction confirmed' );
}
// Get PANO balance
async function getPANOBalance ( address ) {
const balance = await provider. getBalance (address);
return ethers. formatEther (balance);
}
// Monitor balance changes
provider. on ( 'block' , async ( blockNumber ) => {
const balance = await getPANOBalance (userAddress);
console. log ( `Block ${ blockNumber }: Balance ${ balance } PANO` );
});
async function calculateTransactionFee () {
const feeData = await provider. getFeeData ();
const gasLimit = 21000 ; // For simple transfer
const maxFee = feeData.maxFeePerGas * BigInt (gasLimit);
const expectedFee = feeData.gasPrice * BigInt (gasLimit);
return {
maxFee: ethers. formatEther (maxFee),
expectedFee: ethers. formatEther (expectedFee)
};
}
Annual Percentage Rate (APR) : Varies based on total staked amount
Reward Distribution : Proportional to stake and performance
Compound Growth : Rewards can be restaked automatically
Downtime Slashing: 0.01% of stake
Byzantine Behavior: 5% of stake
Double Signing: 5% of stake
Transaction Fee Breakdown:
├── Base Fee: Burned (deflationary pressure)
├── Priority Fee: To validators (performance incentive)
└── Network Fund: Protocol development (small %)
// Calculate voting power
function calculateVotingPower ( stakedAmount , totalStaked ) {
return (stakedAmount / totalStaked) * 100 ;
}
// Example
const userStake = ethers. parseEther ( "1000" ); // 1,000 PANO
const totalStake = ethers. parseEther ( "10000000" ); // 10M PANO
const votingPower = calculateVotingPower (userStake, totalStake);
console. log ( `Voting power: ${ votingPower }%` );
Minimum Stake : Required PANO to submit proposals
Voting Period : Duration for community voting
Execution Delay : Time before approved proposals execute
// External gas price service integration
async function getGasPriceRecommendation () {
try {
const response = await fetch ( 'https://api.panoptis.chain/gas-prices' );
const data = await response. json ();
return {
slow: data.slow,
standard: data.standard,
fast: data.fast,
instant: data.instant
};
} catch (error) {
// Fallback to provider
return await provider. getFeeData ();
}
}
// Monitor transaction status and costs
async function monitorTransaction ( txHash ) {
const tx = await provider. getTransaction (txHash);
console. log ( `Gas Limit: ${ tx . gasLimit }` );
console. log ( `Gas Price: ${ ethers . formatUnits ( tx . gasPrice , 'gwei' ) } gwei` );
const receipt = await tx. wait ();
console. log ( `Gas Used: ${ receipt . gasUsed }` );
const actualCost = receipt.gasUsed * tx.gasPrice;
console. log ( `Total Cost: ${ ethers . formatEther ( actualCost ) } PANO` );
return {
gasUsed: receipt.gasUsed,
gasPrice: tx.gasPrice,
totalCost: actualCost
};
}
Batch Operations : Combine multiple actions into single transaction
Storage Optimization : Pack data structures efficiently
Event Usage : Use events instead of storage for historical data
Loop Optimization : Cache array lengths, use unchecked math where safe
Buffer Maintenance : Keep extra PANO for unexpected gas costs
Fee Monitoring : Track gas prices and adjust accordingly
Batch Transactions : Group operations to reduce total fees
Strategic Timing : Execute during low-congestion periods
Gas Limit Safety : Set appropriate limits to prevent failures
Fee Validation : Verify gas prices before important transactions
Balance Checks : Ensure sufficient PANO before operations
Slippage Protection : Account for gas price volatility
Understanding gas mechanics and PANO token economics is crucial for efficient operation on Panoptis Chain. The network's fast finality and optimized architecture provide predictable costs and excellent user experience.