跳转到主要内容

可直接复制的 Beancount 加密货币交易模板

可填写的 Beancount 模板,每个都附有可加载的示例文件,涵盖加密资产的买入、卖出、兑换、转账、质押staking、DeFi 借贷lending、挖矿mining和空投airdrop等多种场景,帮助你快速上手记账配置。

本指南为常见的加密货币场景提供实用的 Beancount 模板和真实示例。你可以复制并调整这些模板,以满足你自己的加密货币记账需求。

如何阅读这些代码块​

下面每一个围栏代码块都属于三类之一,它们不可互换:

  • 模板包含 [BRACKETED] 占位符和 YYYY-MM-DD 日期。在你替换为真实值之前,它们无法加载——方括号不是 Beancount 语法。
  • 示例紧跟在对应模板下方,带有真实日期和金额,写成即可加载的形式。每个示例仍需要它涉及的账户已经开启,这正是下面 账户结构模板 的用途。唯一的例外是对账块,它断言的是只有你自己的账簿才能满足的余额。
  • 闪电贷套利块是伪代码,并在其出现的位置标注了这一点。

所有模板都贯穿两条约定:

  • 收入账户持有贷方,因此为负数。 已实现收益是一笔记入 Income:CapitalGains:… 的负数分录;已实现亏损是一笔记入 Expenses:CapitalLoss:… 的正数分录。把这一点搞反是加密货币分录无法平衡的最常见原因。
  • 手续费记录一次作为费用,一次作为现金的减少。 总收益进入现金账户,手续费从中扣除,差额才是实际到账你账户的金额。

探索一个实时的加密货币示例账簿:

在新标签页中打开 Cryptocurrency Example Ledger

基本设置模板​

账户结构模板​

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

币币交易处置了第一种商品,因此它像现金出售一样实现收益:以 $2,400.00 购入的 20 ETH 是收到的 $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}

质押模板​

以太坊质押​

; 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 代币到账,gas 费将 $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 贷款套利​

此块是伪代码,不是模板。 它勾勒了闪电贷内部价值流动的顺序。即使你替换了值,它也无法加载,因为各组之间的空行终止了交易——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 的差额是一笔记入费用账户的正数分录。扣除 $5.00 手续费后,实际到账的现金是 $445.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. 替换每一个占位符。 在 YYYY-MM-DD 和每一个 [BRACKETED] 标记都消失之前,模板不是有效的 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

    把那一列代入加密货币出售模板,就能复现其下方打印的演算示例,这是检查你是否正确阅读模板的最快方式。

  3. 调整账户名称以匹配你的账户结构,并确保每一个都由账户结构模板开启——从未开启的账户是加载错误,不是警告

  4. 按需添加元数据以用于税务报告或跟踪

  5. 在最终确定分录前,用 bea --file your-file.bean check 验证计算。不平衡的分录,或减少你不持有的批次,会在那里失败,而不是悄悄生成错误报告

最佳实践​

  • 使用一致的命名约定
  • 在元数据中包含交易 ID
  • 彻底记录复杂交易
  • 验证汇率和价格
  • 定期备份你的文件

这些模板为在 Beancount.io 中进行加密货币记账提供了坚实的基础。根据你的具体需求和交易模式对它们进行定制。

来源:https://beancount.io/zh/docs/Tips/cryptocurrency-templates-examples