Перейти до основного вмісту

Готові до копіювання шаблони криптотранзакцій 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

Як і винагорода за стейкінг, визнана вартість аірдропу стає його собівартістю. Записуйте ціну, яку ви можете обґрунтувати — першу ліквідну котирування токена з джерела, яке ви назвете, — а не кругле число.

Розширені шаблони​

Арбітраж Flash Loan​

Цей блок — псевдокод, а не шаблон. Він окреслює послідовність рухів вартості всередині флеш-позики. Він не завантажиться навіть після підстановки значень, бо порожні рядки між групами завершують транзакцію — 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

Для розміщеного реєстру Живі ціни можуть автоматично підтримувати підтримувані ціни оцінки криптовалют. Залишайте статичні ціни вище для відтворюваних прикладів. Керовані ціни не заповнюють ціну угоди, дохід від стейкінгу або собівартість аірдропу; записуйте ці значення транзакцій явно.

Інструкції з використання​

  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/uk/docs/Tips/cryptocurrency-templates-examples