این راهنما قالبهای کاربردی Beancount و مثالهای واقعی را برای سناریوهای رایج رمزارز ارائه میدهد. این قالبها را برای نیازهای حسابداری رمزارز خود کپی و تطبیق دهید.
نحوه خواندن این بلوکها
هر بلوک کدشده در زیر یکی از سه چیز است و این سه با هم قابل جابهجایی نیستند:
- قالبها شامل جاینگهدارهای
[داخل براکت]و تاریخهایYYYY-MM-DDهستند. تا زمانی که مقادیر واقعی را جایگزین نکنید بارگذاری نمیشوند — براکتها بخشی از نحو Beancount نیستند. - مثالها مستقیماً زیر قالب مربوطه قرار دارند، تاریخ و مبالغ واقعی دارند و برای بارگذاری نوشته شدهاند. هر یک از آنها همچنان به باز بودن حسابهایی که لمس میکند نیاز دارد، که همان چیزی است که قالب ساختار حساب در زیر برای آن است. تنها استثنا بلوک تطبیق است که فقط موجودیهایی را تأیید میکند که دفتر کل خودتان میتواند برآورده کند.
- بلوک آربیتراژ وام فلش شبهکد است و در محل ظاهرش به همین صورت برچسبگذاری شده است.
دو قرارداد در همه آنها جاری است:
- حسابهای درآمد دارای بستانکار هستند، پس منفیاند. سود محققشده یک ثبت منفی در
Income:CapitalGains:…است؛ زیان محققشده یک ثبت مثبت درExpenses:CapitalLoss:…است. برعکس گرفتن این موضوع، رایجترین روشی است که یک ثبت رمزارز در تراز کردن شکست میخورد. - کارمزد یک بار بهعنوان هزینه و یک بار بهعنوان کاهش در نقد ثبت میشود. درآمد ناخالص به حساب نقد میرود، کارمزد از آن خارج میشود و تفاوت همان چیزی است که واقعاً به حساب شما میرسد.
یک دفتر کل نمونه زنده رمزارز را کاوش کنید:
قالب راهاندازی پایه
قالب ساختار حساب
; =============================================================================
; CRYPTOCURRENCY ACCOUNT SETUP TEMPLATE
; =============================================================================
; Bank Accounts
1970-01-01 open Assets:Checking
; Exchange Accounts
1970-01-01 open Assets:Crypto:Coinbase:USD
1970-01-01 open Assets:Crypto:Coinbase:BTC
1970-01-01 open Assets:Crypto:Coinbase:ETH
1970-01-01 open Assets:Crypto:Binance:USD
1970-01-01 open Assets:Crypto:Binance:BTC
1970-01-01 open Assets:Crypto:Binance:ETH
1970-01-01 open Assets:Crypto:Binance:BNB
1970-01-01 open Assets:Crypto:Binance:ADA
; On-Chain and Mining Accounts
1970-01-01 open Assets:Crypto:Ethereum:ETH
1970-01-01 open Assets:Crypto:Polygon:ETH
1970-01-01 open Assets:Crypto:Mining:BTC
; Wallet Accounts
1970-01-01 open Assets:Crypto:Wallet:Ledger:BTC
1970-01-01 open Assets:Crypto:Wallet:Ledger:ETH
1970-01-01 open Assets:Crypto:Wallet:MetaMask:ETH
1970-01-01 open Assets:Crypto:Wallet:MetaMask:USDC
1970-01-01 open Assets:Crypto:Wallet:MetaMask:UNI
; DeFi Protocol Accounts
1970-01-01 open Assets:DeFi:Uniswap:ETH-USDC-LP
1970-01-01 open Assets:DeFi:Compound:CUSDC
1970-01-01 open Assets:Staking:Ethereum:ETH
; Income Accounts
1970-01-01 open Income:Crypto:Staking:ETH
1970-01-01 open Income:Crypto:Mining:BTC
1970-01-01 open Income:Crypto:Airdrops
1970-01-01 open Income:Crypto:DeFi:Yield
1970-01-01 open Income:CapitalGains:Crypto
1970-01-01 open Income:CapitalGains:LongTerm
; Expense Accounts
1970-01-01 open Expenses:Crypto:Fees:Trading
1970-01-01 open Expenses:Crypto:Fees:Network
1970-01-01 open Expenses:Crypto:Fees:Withdrawal
1970-01-01 open Expenses:Crypto:Bridge:Fees
1970-01-01 open Expenses:Crypto:Mining:Electricity
1970-01-01 open Expenses:CapitalLoss:Crypto
; Commodity Definitions
1970-01-01 commodity BTC
name: "Bitcoin"
asset-class: "cryptocurrency"
1970-01-01 commodity ETH
name: "Ethereum"
asset-class: "cryptocurrency"
1970-01-01 commodity USDC
name: "USD Coin"
asset-class: "stablecoin"
; Compound writes this receipt token "cUSDC", but a Beancount commodity
; and every account component must start with a capital letter or a digit,
; so the ledger spells it CUSDC and keeps the display name in metadata.
1970-01-01 commodity CUSDC
name: "cUSDC (Compound USD Coin)"
asset-class: "defi-receipt"قالبهای معامله
خرید پایه ارز دیجیتال
; Template: Buy cryptocurrency on exchange
YYYY-MM-DD * "Buy [AMOUNT] [CRYPTO] on [EXCHANGE]"
Assets:Crypto:[EXCHANGE]:[CRYPTO] [AMOUNT] [CRYPTO] {[PRICE] USD}
Assets:Crypto:[EXCHANGE]:USD -[TOTAL_COST] USD
Expenses:Crypto:Fees:Trading [FEE] USD
Assets:Crypto:[EXCHANGE]:USD -[FEE] USD
; Example: Buy 1 BTC on Coinbase
2024-01-15 * "Buy 1 BTC on Coinbase"
Assets:Crypto:Coinbase:BTC 1.0 BTC {45000.00 USD}
Assets:Crypto:Coinbase:USD -45000.00 USD
Expenses:Crypto:Fees:Trading 50.00 USD
Assets:Crypto:Coinbase:USD -50.00 USDفروش ارز دیجیتال
; Template: Sell cryptocurrency on exchange
YYYY-MM-DD * "Sell [AMOUNT] [CRYPTO] on [EXCHANGE]"
Assets:Crypto:[EXCHANGE]:[CRYPTO] -[AMOUNT] [CRYPTO] {[COST_BASIS] USD} @ [SALE_PRICE] USD
Assets:Crypto:[EXCHANGE]:USD [GROSS_PROCEEDS] USD
Expenses:Crypto:Fees:Trading [FEE] USD
Assets:Crypto:[EXCHANGE]:USD -[FEE] USD
Income:CapitalGains:Crypto -[GAIN] USD ; a loss is a positive Expenses:CapitalLoss:Crypto instead
; Example: Sell 0.5 BTC with a gain
2024-03-20 * "Sell 0.5 BTC on Coinbase"
Assets:Crypto:Coinbase:BTC -0.5 BTC {45000.00 USD} @ 48000.00 USD
Assets:Crypto:Coinbase:USD 24000.00 USD ; gross proceeds, 0.5 * 48,000.00
Expenses:Crypto:Fees:Trading 30.00 USD
Assets:Crypto:Coinbase:USD -30.00 USD ; the fee leaves the same cash account
Income:CapitalGains:Crypto -1500.00 USD ; 24,000.00 proceeds - 22,500.00 basisدسته واگذارشده در بهای تمامشده ۲۲,۵۰۰.۰۰ دلار ارزش دارد، فروش ۲۴,۰۰۰.۰۰ دلار ناخالص به ارمغان میآورد و ۳۰.۰۰ دلار از آن به صرافی میرود — پس ۲۳,۹۷۰.۰۰ دلار نقد وارد میشود و ۱,۵۰۰.۰۰ دلار سود محقق میشود. کارمزد را با سود تهاتر نکنید: کارمزد پیشتر یک هزینه است و کسر دوباره آن همان چیزی است که معامله را نامتوازن میگذارد.
معامله ارز به ارز
; Template: Trade one crypto for another
YYYY-MM-DD * "Trade [AMOUNT1] [CRYPTO1] for [AMOUNT2] [CRYPTO2]"
Assets:Crypto:[EXCHANGE]:[CRYPTO1] -[AMOUNT1] [CRYPTO1] {[COST_BASIS] USD}
Assets:Crypto:[EXCHANGE]:[CRYPTO2] [AMOUNT2] [CRYPTO2] {[NEW_PRICE] USD}
Income:CapitalGains:Crypto -[GAIN] USD ; taxable event; a loss is a positive Expenses:CapitalLoss:Crypto
Expenses:Crypto:Fees:Trading [FEE] USD
Assets:Crypto:[EXCHANGE]:USD -[FEE] USD
; Example: Trade BTC for ETH
2024-02-10 * "Trade 1 BTC for 20 ETH on Binance"
Assets:Crypto:Binance:BTC -1.0 BTC {46000.00 USD}
Assets:Crypto:Binance:ETH 20 ETH {2400.00 USD}
Income:CapitalGains:Crypto -2000.00 USD ; 48,000.00 received - 46,000.00 basis
Expenses:Crypto:Fees:Trading 40.00 USD
Assets:Crypto:Binance:USD -40.00 USDیک معاوضه رمزارز به رمزارز، کالای اول را واگذار میکند، پس سود را دقیقاً مانند فروش نقدی محقق میکند: ۲۰ ETH خریداریشده به قیمت ۲,۴۰۰.۰۰ دلار، ۴۸,۰۰۰.۰۰ دلار ارزش دریافتی در مقابل ۴۶,۰۰۰.۰۰ دلار مبنای BTC است. کارمزد ۴۰.۰۰ دلاری نقدی پرداخت میشود و سود را تغییر نمیدهد.
قالبهای انتقال
انتقال از صرافی به کیف پول
; Template: Transfer crypto from exchange to wallet
YYYY-MM-DD * "Transfer [AMOUNT] [CRYPTO] from [EXCHANGE] to [WALLET]"
Assets:Crypto:[EXCHANGE]:[CRYPTO] -[AMOUNT] [CRYPTO] {[COST_BASIS] USD}
Assets:Crypto:Wallet:[WALLET]:[CRYPTO] [AMOUNT] [CRYPTO] {[COST_BASIS] USD}
Expenses:Crypto:Fees:Withdrawal [FEE] [CRYPTO] {[COST_BASIS] USD}
Assets:Crypto:[EXCHANGE]:[CRYPTO] -[FEE] [CRYPTO] {[COST_BASIS] USD}
; Example: Transfer BTC to Ledger
2024-01-20 * "Transfer 1 BTC from Coinbase to Ledger"
Assets:Crypto:Coinbase:BTC -1.0 BTC {45000.00 USD}
Assets:Crypto:Wallet:Ledger:BTC 1.0 BTC {45000.00 USD}
Expenses:Crypto:Fees:Withdrawal 0.0005 BTC {45000.00 USD}
Assets:Crypto:Coinbase:BTC -0.0005 BTC {45000.00 USD}یک انتقال واگذاری نیست، پس چیزی محقق نمیکند: همان بهای تمامشده {45000.00 USD} همراه سکهها سفر میکند و حساب گیرنده مبنا را به ارث میبرد. دو پیامد از این ناشی میشود. کارمزد برداشت به BTC پرداخت میشود و به همان بهای تمامشده هزینه میشود، پس آن هم سودی محقق نمیکند — اگر رویه شما خلاف این میگوید، کارمزد را با @ قیمتگذاری کنید و یک ثبت سود اضافه کنید. و حساب فرستنده باید پیشتر ۱.۰۰۰۵ BTC با همان بهای تمامشده دقیق را داشته باشد، نه ۱.۰، زیرا کارمزد از همان دسته خارج میشود. کاهشی که دسته متناظر ندارد، هر چقدر هم جمعها درست از آب درآیند، ثبت نمیشود.
انتقال بین صرافیها
; Template: Transfer between exchanges
YYYY-MM-DD * "Transfer [AMOUNT] [CRYPTO] from [EXCHANGE1] to [EXCHANGE2]"
Assets:Crypto:[EXCHANGE1]:[CRYPTO] -[AMOUNT] [CRYPTO] {[COST_BASIS] USD}
Assets:Crypto:[EXCHANGE2]:[CRYPTO] [AMOUNT] [CRYPTO] {[COST_BASIS] USD}
Expenses:Crypto:Fees:Network [FEE] [CRYPTO] {[COST_BASIS] USD}
Assets:Crypto:[EXCHANGE1]:[CRYPTO] -[FEE] [CRYPTO] {[COST_BASIS] USD}
; Example: Transfer ETH from Coinbase to Binance
2024-02-05 * "Transfer 10 ETH from Coinbase to Binance"
Assets:Crypto:Coinbase:ETH -10 ETH {2500.00 USD}
Assets:Crypto:Binance:ETH 10 ETH {2500.00 USD}
Expenses:Crypto:Fees:Network 0.01 ETH {2500.00 USD}
Assets:Crypto:Coinbase:ETH -0.01 ETH {2500.00 USD}قالبهای سهامگذاری
سهامگذاری اتریوم
; Template: Stake ETH
YYYY-MM-DD * "Stake [AMOUNT] ETH"
Assets:Crypto:Wallet:MetaMask:ETH -[AMOUNT] ETH {[PRICE] USD}
Assets:Staking:Ethereum:ETH [AMOUNT] ETH {[PRICE] USD}
Expenses:Crypto:Fees:Network [FEE] ETH {[PRICE] USD}
Assets:Crypto:Wallet:MetaMask:ETH -[FEE] ETH {[PRICE] USD}
; Example: Stake 32 ETH
2024-01-10 * "Stake 32 ETH on Ethereum 2.0"
Assets:Crypto:Wallet:MetaMask:ETH -32 ETH {2500.00 USD}
Assets:Staking:Ethereum:ETH 32 ETH {2500.00 USD}
Expenses:Crypto:Fees:Network 0.01 ETH {2500.00 USD}
Assets:Crypto:Wallet:MetaMask:ETH -0.01 ETH {2500.00 USD}پاداش سهامگذاری
; Template: Receive staking rewards
YYYY-MM-DD * "[CRYPTO] Staking Rewards - [PERIOD]"
Assets:Staking:[PROTOCOL]:[CRYPTO] [AMOUNT] [CRYPTO] {[PRICE] USD}
Income:Crypto:Staking:[CRYPTO] -[VALUE] USD ; [VALUE] = [AMOUNT] * [PRICE]
; Example: ETH staking rewards
2024-02-01 * "ETH Staking Rewards - January"
Assets:Staking:Ethereum:ETH 0.08 ETH {2600.00 USD}
Income:Crypto:Staking:ETH -208.00 USD ; 0.08 * 2,600.00یک پاداش درآمدی است که بهصورت غیرنقدی دریافت میشود، پس دو ثبت یک رویداد را از دو سو توصیف میکنند: ۰.۰۸ ETH با مبنای ۲,۶۰۰.۰۰ دلار به ازای هر واحد وارد میشود و ۲۰۸.۰۰ دلار درآمد متناظر یک بستانکار است — منفی. {2,600.00 USD} قیمتی خارجی است که خودتان باید تهیه کنید؛ Beancount آن را ثبت میکند، ولی آن را واکشی نمیکند. آن را از صرافی یا شاخصی که واقعاً استفاده میکنید یادداشت کنید و در طول سال همان منبع را نگه دارید.
آن ۲۰۸.۰۰ دلار از این پس مبنای بهای تمامشده پاداش هم هست. وقتی در نهایت ۰.۰۸ ETH را میفروشید، تنها حرکت از این تاریخ به بعد سود است — ۲۰۸.۰۰ دلار پیشتر بهعنوان درآمد مشمول مالیات شده و نباید دوباره شناسایی شود. اینکه درآمد در زمان دریافت مشمول مالیات است یا در زمان واگذاری، بسته به حوزه قضایی متفاوت است؛ دفتر کل در هر حالت واقعیتها را ثبت میکند.
قالبهای دیفای
تأمین نقدینگی یونیسواپ
; Template: Add liquidity to Uniswap pool
YYYY-MM-DD * "Add liquidity to [TOKEN1]-[TOKEN2] pool"
Assets:Crypto:Wallet:MetaMask:[TOKEN1] -[AMOUNT1] [TOKEN1] {[PRICE1] USD}
Assets:Crypto:Wallet:MetaMask:[TOKEN2] -[AMOUNT2] [TOKEN2] {[PRICE2] USD}
Assets:DeFi:Uniswap:[TOKEN1]-[TOKEN2]-LP [LP_AMOUNT] [LP_TOKEN] {[LP_PRICE] USD}
Expenses:Crypto:Fees:Network [FEE] ETH {[ETH_PRICE] USD}
Assets:Crypto:Wallet:MetaMask:ETH -[FEE] ETH {[ETH_PRICE] USD}
; Example: Add ETH-USDC liquidity
2024-01-15 * "Add liquidity to ETH-USDC pool"
Assets:Crypto:Wallet:MetaMask:ETH -10 ETH {2500.00 USD}
Assets:Crypto:Wallet:MetaMask:USDC -25000 USDC @ 1.00 USD
Assets:DeFi:Uniswap:ETH-USDC-LP 100 UNI-V3-ETH-USDC {500.00 USD}
Expenses:Crypto:Fees:Network 0.02 ETH {2500.00 USD}
Assets:Crypto:Wallet:MetaMask:ETH -0.02 ETH {2500.00 USD}این یکی را هر بار یک کالا تطبیق دهید: ۲۵,۰۰۰.۰۰ دلار ETH بهعلاوه ۲۵,۰۰۰.۰۰ دلار USDC خارج میشود، ۵۰,۰۰۰.۰۰ دلار توکن LP وارد میشود و کارمزد گس ۵۰.۰۰ دلار ETH را از کیف پول به یک هزینه منتقل میکند. پای استیبلکوین @ 1.00 USD را حمل میکند زیرا بدون مبنای بهای تمامشده نگه داشته میشود — بدون حاشیه قیمت، وزن آن ۲۵,۰۰۰ USDC است که نمیتواند دلارها را باطل کند. در بسیاری از حوزههای قضایی، واریز به یک استخر خودش واگذاری هر دو توکن است؛ این ثبت عامدانه مبنا را منتقل میکند، پس اگر رویه شما آنها را لازم میداند، ثبتهای سود را اضافه کنید.
وامدهی کامپاند
; Template: Supply assets to Compound
YYYY-MM-DD * "Supply [AMOUNT] [TOKEN] to Compound"
Assets:Crypto:Wallet:MetaMask:[TOKEN] -[AMOUNT] [TOKEN] @ [TOKEN_PRICE] USD
Assets:DeFi:Compound:C[TOKEN] [C_AMOUNT] C[TOKEN] {[C_PRICE] USD}
Expenses:Crypto:Fees:Network [FEE] ETH {[ETH_PRICE] USD}
Assets:Crypto:Wallet:MetaMask:ETH -[FEE] ETH {[ETH_PRICE] USD}
; Example: Supply USDC to Compound
2024-01-20 * "Supply 10000 USDC to Compound"
Assets:Crypto:Wallet:MetaMask:USDC -10000 USDC @ 1.00 USD
Assets:DeFi:Compound:CUSDC 500 CUSDC {20.00 USD}
Expenses:Crypto:Fees:Network 0.008 ETH {2500.00 USD}
Assets:Crypto:Wallet:MetaMask:ETH -0.008 ETH {2500.00 USD}دو چیز باعث میشود این یکی بارگذاری شود. پای USDC حاشیه @ 1.00 USD را حمل میکند تا دو سوی معاوضه در یک ارز وزن داشته باشند — بدون آن Beancount میبیند ۱۰,۰۰۰.۰۰ دلار CUSDC در مقابل ۱۰,۰۰۰ واحد USDC که ناپدید میشود، که کالاهای متفاوتی هستند و باطل نمیشوند. و توکن رسید CUSDC است، نه cUSDC: حرف اول کوچک در هر دو مؤلفه حساب و نماد کالا یک خطای واژهیاب است، هر طور که پروتکل در رابط خودش بنویسد.
قالبهای استخراج
پاداش استخراج
; Template: Receive mining rewards
YYYY-MM-DD * "[CRYPTO] Mining Reward - [POOL/SOLO]"
Assets:Crypto:Mining:[CRYPTO] [AMOUNT] [CRYPTO] {[PRICE] USD}
Income:Crypto:Mining:[CRYPTO] -[VALUE] USD ; [VALUE] = [AMOUNT] * [PRICE]
; Example: Bitcoin mining reward
2024-01-15 * "BTC Mining Reward - Slush Pool"
Assets:Crypto:Mining:BTC 0.01 BTC {45000.00 USD}
Income:Crypto:Mining:BTC -450.00 USD ; 0.01 * 45,000.00هزینههای استخراج
; Template: Mining operational expenses
YYYY-MM-DD * "Mining [EXPENSE_TYPE] - [PERIOD]"
Expenses:Crypto:Mining:[EXPENSE_TYPE] [AMOUNT] USD
Assets:Checking -[AMOUNT] USD
; Example: Mining electricity costs
2024-01-31 * "Mining Electricity - January"
Expenses:Crypto:Mining:Electricity 800.00 USD
Assets:Checking -800.00 USDقالبهای ایردراپ
ایردراپ توکن
; Template: Receive token airdrop
YYYY-MM-DD * "[TOKEN] Airdrop from [PROJECT]"
Assets:Crypto:Wallet:[WALLET]:[TOKEN] [AMOUNT] [TOKEN] {[PRICE] USD}
Income:Crypto:Airdrops -[VALUE] USD ; [VALUE] = [AMOUNT] * [PRICE]
; Example: UNI token airdrop
2024-03-01 * "UNI Airdrop from Uniswap"
Assets:Crypto:Wallet:MetaMask:UNI 400 UNI {8.00 USD}
Income:Crypto:Airdrops -3200.00 USD ; 400 * 8.00مانند پاداش استیکینگ، ارزش شناساییشده ایردراپ مبنای بهای تمامشده آن میشود. قیمتی را ثبت کنید که بتوانید از آن دفاع کنید — نخستین نرخ نقدشوندگی توکن، از منبعی که نام میبرید — نه یک عدد رند.
قالبهای پیشرفته
آربیتراژ وام فلش
این بلوک شبهکد است، نه قالب. توالی حرکات ارزش را درون یک وام فلش ترسیم میکند. حتی پس از جایگزینی مقادیر هم بارگذاری نمیشود، زیرا خطوط خالی بین گروهها معامله را پایان میدهند — Beancount روی ثبتهای پس از یکی از آنها خطای نحو گزارش میدهد. یک وام فلش واقعی را بهعنوان یک معامله واحد و بدون خطوط خالی ثبت کنید (با برچسبگذاری پایها با توضیحات تورفته ;)، و پایهای میانی که درون همان بلوک به صفر میرسند را حذف کنید.
Pseudocode: flash loan arbitrage
borrow Assets:Crypto:Temp:FlashLoan +[LOAN_AMOUNT] [TOKEN]
Liabilities:DeFi:[PROTOCOL]:Flash -[LOAN_AMOUNT] [TOKEN]
execute Assets:Crypto:Temp:FlashLoan -[LOAN_AMOUNT] [TOKEN]
Assets:Crypto:Temp:Arbitrage +[RETURN_AMOUNT] [TOKEN]
repay Liabilities:DeFi:[PROTOCOL]:Flash +[LOAN_AMOUNT] [TOKEN]
Assets:Crypto:Temp:Arbitrage -[LOAN_PLUS_FEE] [TOKEN]
keep Assets:Crypto:Wallet:[WALLET]:[TOKEN] +[PROFIT] [TOKEN]
Income:Crypto:Arbitrage -[PROFIT_USD] USDهر چیزی که وام لمس کرده تا پایان بلوک از بین رفته است، پس چیزی که دفتر کل واقعاً باید ثبت کند سود و کارمزد پروتکل است. مثال آربیتراژ در راهنمای رهگیری پرتفوی، شکل تکمعاملهای را نشان میدهد.
پل بین زنجیرهای
; Template: Bridge assets across chains
YYYY-MM-DD * "Bridge [AMOUNT] [TOKEN] from [CHAIN1] to [CHAIN2]"
Assets:Crypto:[CHAIN1]:[TOKEN] -[AMOUNT] [TOKEN] {[PRICE] USD}
Assets:Crypto:[CHAIN2]:[TOKEN] [AMOUNT] [TOKEN] {[PRICE] USD}
Expenses:Crypto:Bridge:Fees [FEE] [TOKEN] {[PRICE] USD}
Assets:Crypto:[CHAIN1]:[TOKEN] -[FEE] [TOKEN] {[PRICE] USD}
; Example: Bridge ETH to Polygon
2024-02-05 * "Bridge 5 ETH from Ethereum to Polygon"
Assets:Crypto:Ethereum:ETH -5 ETH {2600.00 USD}
Assets:Crypto:Polygon:ETH 5 ETH {2600.00 USD}
Expenses:Crypto:Bridge:Fees 0.01 ETH {2600.00 USD}
Assets:Crypto:Ethereum:ETH -0.01 ETH {2600.00 USD}قالبهای بهینهسازی مالیاتی
برداشت زیان مالیاتی
; Template: Tax loss harvesting
YYYY-MM-DD * "Tax loss harvesting - Sell [CRYPTO] at loss"
Assets:Crypto:[EXCHANGE]:[CRYPTO] -[AMOUNT] [CRYPTO] {[HIGH_COST_BASIS] USD}
Assets:Crypto:[EXCHANGE]:USD [PROCEEDS] USD
Expenses:Crypto:Fees:Trading [FEE] USD
Assets:Crypto:[EXCHANGE]:USD -[FEE] USD
Expenses:CapitalLoss:Crypto [LOSS] USD
; Example: Harvest ADA loss
2024-12-15 * "Tax loss harvesting - Sell ADA at loss"
Assets:Crypto:Binance:ADA -1000 ADA {0.60 USD} @ 0.45 USD
Assets:Crypto:Binance:USD 450.00 USD ; gross proceeds, 1,000 * 0.45
Expenses:Crypto:Fees:Trading 5.00 USD
Assets:Crypto:Binance:USD -5.00 USD
Expenses:CapitalLoss:Crypto 150.00 USD ; 600.00 basis - 450.00 proceedsزیان تصویر آینهای سود است: ۶۰۰.۰۰ دلار مبنا خارج میشود، ۴۵۰.۰۰ دلار درآمد ناخالص وارد میشود و تفاوت ۱۵۰.۰۰ دلاری یک ثبت مثبت در یک حساب هزینه است. ۴۴۵.۰۰ دلار نقد همان چیزی است که واقعاً میرسد، پس از کارمزد ۵.۰۰ دلاری.
سود سرمایه بلندمدت
; Template: Long-term capital gains sale
YYYY-MM-DD * "Long-term sale - [CRYPTO] held > 1 year"
date-acquired: "[PURCHASE_DATE]"
holding-period: "[DAYS] days"
Assets:Crypto:[EXCHANGE]:[CRYPTO] -[AMOUNT] [CRYPTO] {[COST_BASIS] USD} @ [SALE_PRICE] USD
Assets:Crypto:[EXCHANGE]:USD [GROSS_PROCEEDS] USD
Expenses:Crypto:Fees:Trading [FEE] USD
Assets:Crypto:[EXCHANGE]:USD -[FEE] USD
Income:CapitalGains:LongTerm -[GAIN] USD
; Example: Long-term BTC sale
2025-02-01 * "Long-term sale - BTC held 382 days"
date-acquired: "2024-01-15"
holding-period: "382 days"
Assets:Crypto:Coinbase:BTC -1.0 BTC {45000.00 USD} @ 55000.00 USD
Assets:Crypto:Coinbase:USD 55000.00 USD
Expenses:Crypto:Fees:Trading 50.00 USD
Assets:Crypto:Coinbase:USD -50.00 USD
Income:CapitalGains:LongTerm -10000.00 USD ; 55,000.00 proceeds - 45,000.00 basisسود ۱۰,۰۰۰.۰۰ دلار است، نه ۹,۹۵۰.۰۰ دلار: کارمزد ۵۰.۰۰ دلاری پیشتر بهعنوان هزینه ثبت شده، پس تهاتر کردن آن با سود یعنی دو بار کسر کردنش. Income:CapitalGains:LongTerm فقط به این دلیل حسابی جدا از Income:CapitalGains:Crypto است که دوره نگهداری در گزارش قابل مشاهده باشد — Beancount دورههای نگهداری را برای شما محاسبه نمیکند، و همین دلیل ارزشمند بودن همراه داشتن فرادادههای date-acquired و holding-period است.
قالبهای تطبیق
تأیید موجودی ماهانه
; Template: Monthly balance assertions
YYYY-MM-DD balance Assets:Crypto:[EXCHANGE]:[CRYPTO] [EXPECTED_BALANCE] [CRYPTO]
YYYY-MM-DD balance Assets:Crypto:Wallet:[WALLET]:[CRYPTO] [EXPECTED_BALANCE] [CRYPTO]
; Example: January balance verification
2024-01-31 balance Assets:Crypto:Coinbase:BTC 2.5 BTC
2024-01-31 balance Assets:Crypto:Binance:ETH 15.0 ETH
2024-01-31 balance Assets:Crypto:Wallet:Ledger:BTC 1.0 BTCبرخلاف سایر مثالهای اینجا، این یکی بهطور عامدانه خودبسنده نیست: مبالغ هر آن چیزی است که صفحههای صرافی خودتان میگویند، و ادعا تا زمانی که معاملات شما در دفتر کل نباشند شکست میخورد — که تمام هدف آن همین است. توجه داشته باشید که balance موجودی را در آغاز روز نامبردهشده بررسی میکند، پس ادعا را برای روز پس از دورهای که میبندید تاریخگذاری کنید.
بهروزرسانی قیمت
; Template: Daily price updates
YYYY-MM-DD price [CRYPTO] [PRICE] USD
; Example: Daily prices
2024-01-15 price BTC 45000.00 USD
2024-01-15 price ETH 2500.00 USD
2024-01-15 price ADA 0.50 USDبرای یک دفتر کل میزبانیشده، قیمتهای زنده میتواند قیمتهای ارزشگذاری رمزارزهای پشتیبانیشده را بهطور خودکار نگهداری کند. قیمتهای ایستای بالا را برای مثالهای قابل بازتولید نگه دارید. قیمتهای مدیریتشده، قیمت معامله، درآمد استیکینگ، یا مبنای بهای تمامشده ایردراپ را پر نمیکنند؛ آن مقادیر معامله را بهصراحت ثبت کنید.
دستورالعملهای استفاده
۱. قالب مربوطه را برای نوع معامله خود کپی کنید
۲. هر جاینگهدار را جایگزین کنید. یک قالب تا زمانی که YYYY-MM-DD و هر نشانه [داخل براکت] از بین نرفته باشد، Beancount معتبر نیست — براکتها نحو Beancount نیستند و براکت باقیمانده یک خطای تجزیه است، نه مقداری که بیصدا نادیده گرفته شود. جایگزینی مکانیکی است:
| جاینگهدار | جایگزین | مثال |
|---|---|---|
YYYY-MM-DD | تاریخ معامله | 2024-03-20 |
[AMOUNT] | واحدهای کالا، بدون گیومه | 0.5 |
[CRYPTO] | نماد کالا، با حروف بزرگ | BTC |
[EXCHANGE] | مؤلفه حساب برای محل معامله | Coinbase |
[COST_BASIS] | بهای تمامشده به ازای هر واحد دستهای که خارج میکنید | 45000.00 |
[SALE_PRICE] | قیمت به ازای هر واحد که با آن فروختید | 48000.00 |
[GROSS_PROCEEDS] | [AMOUNT] × [SALE_PRICE]، پیش از کارمزد | 24000.00 |
[FEE] | کارمزد محل معامله، به ارزی که دریافت شده | 30.00 |
[GAIN] | [GROSS_PROCEEDS] − [AMOUNT] × [COST_BASIS] | 1500.00 |
جایگزینی آن ستون در قالب فروش رمزارز، مثال حلشدهای که زیر آن چاپ شده را بازتولید میکند، که سریعترین راه برای بررسی این است که قالب را درست خواندهاید.
۳. نام حسابها را تنظیم کنید تا با ساختار حساب شما هماهنگ شوند، و مطمئن شوید هر یک توسط قالب ساختار حساب باز شده است — حسابی که هرگز باز نشود، یک خطای بارگذاری است، نه یک هشدار
۴. فراداده اضافه کنید بهتناسب نیاز برای گزارشدهی مالیاتی یا رهگیری
۵. محاسبات را تأیید کنید با bea --file your-file.bean check پیش از نهاییسازی ثبتها. ثبتی که تراز نمیشود، یا دستهای را کاهش میدهد که در اختیار ندارید، همانجا شکست میخورد نه اینکه بیصدا گزارشی نادرست تولید کند
بهترین روشها
- از قراردادهای نامگذاری یکدست استفاده کنید
- شناسههای معامله را در فراداده بگنجانید
- معاملات پیچیده را بهطور کامل مستند کنید
- نرخهای ارز و قیمتها را تأیید کنید
- پشتیبانگیری منظم از فایلهای خود را حفظ کنید
این قالبها پایهای محکم برای حسابداری رمزارز در Beancount.io فراهم میکنند. آنها را بر اساس نیازها و الگوهای معاملاتی خاص خود سفارشی کنید.