Към основното съдържание

Готови за копиране Beancount шаблони за крипто транзакции

Шаблони Beancount за попълване, всеки с пример за зареждане, за покупки на крипто, продажби, суапове, трансфери, стейкинг, DeFi кредитиране, майнинг и аирдропи.

Това ръководство предоставя практични шаблони за 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

Освободената партида е на стойност $22,500.00 по себестойност, продажбата носи $24,000.00 бруто, а $30.00 от това отиват за борсата — така пристигат $23,970.00 в брой и се реализира печалба от $1,500.00. Не приспадайте таксата от печалбата: таксата вече е разход и изваждането ѝ втори път е това, което оставя транзакцията небалансирана.

Крипто-към-крипто обмен​

; 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

Обменът крипто-към-крипто освобождава първата стока, така че реализира печалба точно както продажба за пари в брой: 20 ETH придобити при $2,400.00 са $48,000.00 получена стойност срещу $46,000.00 база за BTC. Таксата от $40.00 се плаща в брой и не променя печалбата.

Шаблони за преводи​

Превод от борса към портфейл​

; 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 и се отчита като разход при същата себестойност, така че също не реализира печалба — ако вашето третиране казва друго, остойностете таксата с @ и добавете позиция за печалба. И изпращащата сметка вече трябва да съдържа 1.0005 BTC при точно тази себестойност, а не 1.0, защото таксата идва от същата партида. Намаление без съответстваща партида не се осчетоводява, колкото и добре да се събират сборовете.

Превод между борси​

; 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}

Шаблони за стейкинг​

Ethereum стейкинг​

; 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

Наградата е доход, получен в натура, така че двете позиции описват едно и също събитие от двете страни: пристигат 0.08 ETH с база от $2,600.00 за единица и съответстващият доход от $208.00 е кредит — отрицателен. {2,600.00 USD} е външна цена, която трябва да набавите сами; Beancount я записва, но не я извлича. Отбележете я от борсата или индекса, който реално използвате, и поддържайте един и същ източник през цялата година.

Тези $208.00 са и базата за себестойност на наградата оттук нататък. Когато в крайна сметка продадете 0.08 ETH, само движението след тази дата е печалба — $208.00 вече са били обложени като доход и не трябва да се признават два пъти. Дали доходът е облагаем при получаване или при освобождаване, се различава според юрисдикцията; регистърът записва фактите и в двата случая.

DeFi шаблони​

Предоставяне на ликвидност в Uniswap​

; 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}

Сверявайте тази стока една по една: $25,000.00 ETH плюс $25,000.00 USDC излизат, пристигат $50,000.00 LP токен, а таксата за газ премества $50.00 ETH от портфейла в разход. Кракът със стейбълкойна носи @ 1.00 USD, защото се държи без база за себестойност — без ценовата анотация теглото му е 25,000 USDC, което не може да съкрати долари. В много юрисдикции депозирането в пул само по себе си е освобождаване на двата токена; това записване умишлено пренася базата вместо това, така че добавете позициите за печалба, ако вашето третиране ги изисква.

Заеми в Compound​

; 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 вижда $10,000.00 CUSDC да се появяват срещу 10,000 единици 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

Загубата е огледален образ на печалбата: $600.00 база излизат, пристигат $450.00 брутни постъпления и разликата от $150.00 е положителна позиция към разходна сметка. Реално постъпват $445.00 в брой, след таксата от $5.00.

Дългосрочни капиталови печалби​

; 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

Печалбата е $10,000.00, а не $9,950.00: таксата от $50.00 вече е записана като разход, така че приспадането ѝ от печалбата би я приспаднало два пъти. 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

За хостван регистър Live Prices може автоматично да поддържа цени за оценка на поддържани криптовалути. Запазете статичните цени по-горе за възпроизводими примери. Управляваните цени не попълват цена на сделка, доход от стейкинг или база за себестойност на аирдроп; запишете тези стойности на транзакциите изрично.

Инструкции за използване​

  1. Копирайте съответния шаблон за вашия тип транзакция

  2. Заменете всеки заместител. Един шаблон не е валиден Beancount, докато YYYY-MM-DD и всеки [ЗАГРАДЕН] маркер не изчезнат — скобите не са синтаксис на 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

    Заместването на тази колона в шаблона Продажба на криптовалута възпроизвежда разработения пример, отпечатан под него, което е най-бързият начин да проверите дали сте прочели шаблона правилно.

  3. Коригирайте имената на сметките, за да съответстват на вашата структура на сметките, и се уверете, че всяка е отворена от Шаблона за структура на сметките — сметка, която никога не е отваряна, е грешка при зареждане, а не предупреждение

  4. Добавете метаданни според нуждите за данъчна отчетност или проследяване

  5. Проверете изчисленията с bea --file your-file.bean check, преди да финализирате записванията. Записване, което не се балансира, или което намалява партида, която не притежавате, се проваля там, вместо тихо да произведе грешен отчет

Най-добри практики​

  • Използвайте последователни конвенции за именуване
  • Включвайте идентификатори на транзакции в метаданните
  • Документирайте сложните транзакции задълбочено
  • Проверявайте обменните курсове и цените
  • Поддържайте редовни резервни копия на вашите файлове

Тези шаблони предоставят солидна основа за криптовалутно счетоводство в Beancount.io. Персонализирайте ги според вашите специфични нужди и модели на търговия.

Източник: https://beancount.io/bg/docs/Tips/cryptocurrency-templates-examples