chaingate
Version:
Multi-chain cryptocurrency SDK for TypeScript — unified API for Bitcoin, Ethereum, Litecoin, Dogecoin, Bitcoin Cash, Polygon, Arbitrum, and any EVM-compatible chain. Create wallets, query balances, send transactions, and manage tokens and NFTs across UTXO
31 lines (30 loc) • 1.57 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.SIMPLE_TRANSFER_GAS = void 0;
exports.fallbackGasFromCalldata = fallbackGasFromCalldata;
/** Intrinsic gas for a simple ETH value transfer (no calldata). */
exports.SIMPLE_TRANSFER_GAS = 21000n;
/**
* Conservative gas estimates per standard ERC function selector. Used only as
* a fallback when on-chain gas estimation fails. Values are upper bounds for a
* typical implementation — bespoke contracts with hooks may need more.
*/
const SELECTOR_GAS = {
'0xa9059cbb': 90000n, // ERC-20 transfer(address,uint256)
'0x23b872dd': 120000n, // ERC-20/721 transferFrom(address,address,uint256)
'0x42842e0e': 120000n, // ERC-721 safeTransferFrom(address,address,uint256)
'0xb88d4fde': 130000n, // ERC-721 safeTransferFrom(address,address,uint256,bytes)
'0xf242432a': 130000n, // ERC-1155 safeTransferFrom(address,address,uint256,uint256,bytes)
'0x2eb2c2d6': 250000n, // ERC-1155 safeBatchTransferFrom(...)
'0x095ea7b3': 70000n, // ERC-20/721 approve(address,uint256)
'0xa22cb465': 60000n, // ERC-721/1155 setApprovalForAll(address,bool)
};
/** Gas fallback for unrecognized contract calls. */
const UNKNOWN_CONTRACT_CALL_GAS = 200000n;
/** Fallback gas limit derived from the calldata function selector. */
function fallbackGasFromCalldata(data) {
if (data === '0x' || data.length < 10)
return exports.SIMPLE_TRANSFER_GAS;
const selector = data.slice(0, 10).toLowerCase();
return SELECTOR_GAS[selector] ?? UNKNOWN_CONTRACT_CALL_GAS;
}