make_post_sell/development.ini
Russell Ballestrini e3bfb8e4f0 Improve Dogecoin fee estimation to reduce overly high fees
The fee estimation was calculating ~/bin/bash.20 fees when it should be much lower.

Changes:
- Use 6 block target (~1 hour) instead of 2 blocks for cheaper estimates
- Reduce transaction size estimate from 0.5KB to 0.25KB (more realistic for DOGE)
- Lower fallback fee from 0.01 DOGE to 0.002 DOGE (~/bin/bash.0006 vs /bin/bash.003)
- Update development.ini default to match new lower fallback

This should reduce typical fee estimates from ~/bin/bash.20 to ~/bin/bash.02-0.05 range,
making Dogecoin payments more cost-effective for users while still covering
both inbound and sweep transaction costs.
2025-09-28 16:21:07 -04:00

171 lines
5.8 KiB
INI

###
# app configuration
# https://docs.pylonsproject.org/projects/pyramid/en/latest/narr/environment.html
###
[app:main]
use = egg:make_post_sell
pyramid.reload_templates = true
pyramid.debug_authorization = true
pyramid.debug_notfound = true
pyramid.debug_routematch = true
pyramid.default_locale_name = en
pyramid.includes = pyramid_debugtoolbar pyramid_tm
# By default, the toolbar only appears for clients from IP addresses
# '127.0.0.1' and '::1'.
#debugtoolbar.hosts = 127.0.0.1 ::1
debugtoolbar.hosts = 0.0.0.0/0
sqlalchemy.url = sqlite:///%(here)s/make_post_sell.sqlite
retry.attempts = 3
###
# session / cookie configuration.
# http://docs.pylonsproject.org/docs/pyramid/en/latest/api/session.html
###
session.hashalg = sha512
session.secret = test-secret
session.timeout = 31104000
session.max_age = 31104000
session.reissue_time = 15552000
session.secure = false
#session.domain = localhost.localhost
session.domain = localhost
session.samesite = Lax
###
# app "business logic" settings
###
# Root domain for make_post_sell
app.make_post_sell.root_domain = ${MAKE_POST_SELL_ROOT_DOMAIN:-localhost}
# Root URL for make_post_sell
app.make_post_sell.root_url = ${MAKE_POST_SELL_ROOT_URL:-http://localhost:6501}
# Optional: Email for the root domain owner
app.make_post_sell.root_domain_owner_email = ${MAKE_POST_SELL_DOMAIN_OWNER_EMAIL:-changeme@example.com}
# app.email.relay = localhost:8025
# TODO: these values should be moved to environment variables & we should create an
# example app.env environment file.
app.bucket.secure_uploads = ${MPS_APP_MAIN_BUCKET}
app.bucket.secure_uploads.region = nyc3
app.bucket.secure_uploads.post_endpoint = https://nyc3.digitaloceanspaces.com
app.bucket.secure_uploads.get_endpoint = https://plan-period-files.nyc3.cdn.digitaloceanspaces.com
app.bucket.secure_uploads.access_key = ${MPS_APP_SECURE_UPLOADS_ACCESS_KEY}
app.bucket.secure_uploads.secret_key = ${MPS_APP_SECURE_UPLOADS_SECRET_KEY}
# stripe test mode is enabled for development & disabled by default.
app.stripe.test_mode = True
# Payment method toggles
app.payments.stripe.enabled = ${MPS_PAYMENTS_STRIPE_ENABLED:-True}
app.payments.monero.enabled = ${MPS_PAYMENTS_MONERO_ENABLED:-False}
app.payments.dogecoin.enabled = ${MPS_PAYMENTS_DOGECOIN_ENABLED:-False}
# Monero RPC Configuration
# RPC endpoint of monero-wallet-rpc (recommend binding to localhost only)
monero.rpc_url = ${MPS_MONERO_RPC_URL:-http://127.0.0.1:18083/json_rpc}
monero.rpc_user = ${MPS_MONERO_RPC_USER:-test_user}
monero.rpc_pass = ${MPS_MONERO_RPC_PASS:-test_pass}
monero.account_index = ${MPS_MONERO_ACCOUNT_INDEX:-0}
# Monero confirmation requirements by amount tier
# Note: Payment thresholds are now per-shop settings (default $10 and $100)
monero.confirmations.petty = ${MPS_MONERO_CONFIRMATIONS_PETTY:-2}
monero.confirmations.mid = ${MPS_MONERO_CONFIRMATIONS_MID:-10}
monero.confirmations.high = ${MPS_MONERO_CONFIRMATIONS_HIGH:-20}
monero.quote_expiry_seconds = ${MPS_MONERO_QUOTE_EXPIRY_SECONDS:-900}
monero.rate_source_url = ${MPS_MONERO_RATE_SOURCE_URL:-https://api.coingecko.com/api/v3/simple/price?ids=monero&vs_currencies=usd}
# Dogecoin RPC Configuration
# RPC endpoint of dogecoind (recommend binding to localhost only)
dogecoin.rpc_url = ${MPS_DOGECOIN_RPC_URL:-http://127.0.0.1:22555}
dogecoin.rpc_user = ${MPS_DOGECOIN_RPC_USER:-mps_doge_user}
dogecoin.rpc_pass = ${MPS_DOGECOIN_RPC_PASS:-change_this_password_in_production}
# Dogecoin confirmation requirements by amount tier
# Note: Payment thresholds are now per-shop settings (default $10 and $100)
dogecoin.confirmations.petty = ${MPS_DOGECOIN_CONFIRMATIONS_PETTY:-2}
dogecoin.confirmations.mid = ${MPS_DOGECOIN_CONFIRMATIONS_MID:-6}
dogecoin.confirmations.high = ${MPS_DOGECOIN_CONFIRMATIONS_HIGH:-20}
# Fee buffer for customer payments (in DOGE) - reduced from 0.01 to 0.002 for more reasonable fees
dogecoin.fee_buffer = ${MPS_DOGECOIN_FEE_BUFFER:-0.002}
dogecoin.rate_source_url = ${MPS_DOGECOIN_RATE_SOURCE_URL:-https://api.coingecko.com/api/v3/simple/price?ids=dogecoin&vs_currencies=usd}
# set this to the path of your private DKIM key.
# reference: https://russell.ballestrini.net/quickstart-to-dkim-signed-email-with-python/
#app.email.dkim_private_key_path = ${MPS_APP_DKIM_PRIVATE_KEY_PATH}
#app.email.dkim_selector = ${MPS_APP_DKIM_SELECTOR}
# choices: rsa-sha256 or ed25519-sha256
#app.email.dkim_signature_algorithm = ed25519-sha256
# optionally overload the saas logo with a custom one.
#app.saas_logo = /static/memopoly.png
#app.saas_theme_color = #c50008ff
# optional ribbon text.
#app.saas_ribbon_text = setup shop in this virtual meme market world game!
app.saas_ribbon_text = Sell the digital things you make — commission free! open source, public domain, ecommerce software!
[pshell]
setup = make_post_sell.scripts.pshell.setup
###
# wsgi server configuration
###
[alembic]
# path to migration scripts
script_location = make_post_sell:scripts/alembic
sqlalchemy.url = sqlite:///%(here)s/make_post_sell.sqlite
[server:main]
use = egg:waitress#main
#listen = localhost:6501
#listen = 192.168.1.216:6501
listen = 0.0.0.0:6501
###
# logging configuration
# https://docs.pylonsproject.org/projects/pyramid/en/latest/narr/logging.html
###
[loggers]
keys = root, make_post_sell, sqlalchemy
[handlers]
keys = console
[formatters]
keys = generic
[logger_root]
level = INFO
handlers = console
[logger_make_post_sell]
level = DEBUG
handlers =
qualname = make_post_sell
[logger_sqlalchemy]
level = WARN
handlers =
qualname = sqlalchemy.engine
# "level = INFO" logs SQL queries.
# "level = DEBUG" logs SQL queries and results.
# "level = WARN" logs neither. (Recommended for production systems.)
[handler_console]
class = StreamHandler
args = (sys.stderr,)
level = NOTSET
formatter = generic
[formatter_generic]
format = %(asctime)s %(levelname)-5.5s [%(name)s:%(lineno)s][%(threadName)s] %(message)s