メインコンテンツへスキップ

コピー可能なBeancount暗号資産取引テンプレート

暗号資産の購入、売却、スワップ、送金、ステーキング、DeFiレンディング、マイニング、エアドロップに対応した記入式Beancountテンプレート。それぞれにロード可能なサンプル付き。

このガイドでは、一般的な暗号資産のシナリオに対応した実践的なBeancountテンプレートと実例を紹介します。自身の暗号資産会計のニーズに合わせて、これらのテンプレートをコピーして調整してください。

これらのブロックの読み方​

以下のコードブロックはそれぞれ3種類のいずれかであり、互いに置き換え可能ではありません。

  • テンプレートには [BRACKETED] プレースホルダーと YYYY-MM-DD 形式の日付が含まれます。実際の値に置き換えるまでロードされません — 角括弧はBeancountの構文ではありません。
  • 例はテンプレートの直下にあり、実際の日付と金額を持ち、そのままロードできるように書かれています。ただし、それぞれが触れる勘定科目が開かれている必要があり、そのために下記の勘定科目構造テンプレートがあります。唯一の例外は照合ブロックで、これは自身の台帳のみが満たせる残高をアサートします。
  • フラッシュローンアービトラージブロックは疑似コードであり、記載箇所でそのように明示されています。

すべてに共通する2つの慣例があります。

  • 収益勘定は貸方を持つため、マイナスになります。 実現益は 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

暗号資産間の交換は最初の商品を処分するため、現金での売却とまったく同じように利益を実現します。$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} の取得原価がコインとともに移動し、受け取り側の勘定がその原価を引き継ぎます。そこから2つの帰結が生じます。出金手数料は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

報酬は現物で受け取る収益であるため、2つの記帳は同じ事象を両側から記述します。0.08 ETHが1単位あたり$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}

これは一度に1つの商品ずつ照合します。$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}

このエントリをロード可能にする2つのポイントがあります。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の差額は費用勘定へのプラスの記帳です。$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

ホスト型の台帳では、Live Prices が対応する暗号資産の評価価格を自動的に維持できます。再現可能な例のために、上記の静的な価格はそのままにしておいてください。管理された価格は、取引価格、ステーキング収益、エアドロップの取得原価を設定しません。それらの取引価額は明示的に記録してください。

使用手順​

  1. 取引タイプに応じたテンプレートをコピーする

  2. すべてのプレースホルダーを置き換える。 YYYY-MM-DD と各 [BRACKETED] トークンが消えるまで、テンプレートは有効なBeancountではありません — 角括弧はBeancountの構文ではなく、残ったものは黙って無視される値ではなく解析エラーです。置き換えは機械的です。

    プレースホルダー置き換え内容例
    YYYY-MM-DD取引の日付2024-03-20
    [AMOUNT]商品の単位数(引用符なし)0.5
    [CRYPTO]商品シンボル(大文字)BTC
    [EXCHANGE]取引所の勘定科目構成要素Coinbase
    [COST_BASIS]処分するロットの1単位あたりの取得原価45000.00
    [SALE_PRICE]売却した1単位あたりの価格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/ja/docs/Tips/cryptocurrency-templates-examples