본문으로 건너뛰기

암호화폐 템플릿 및 예시

거래, 채굴, 스테이킹, 에어드랍, DeFi 활동 등 일반적인 암호화폐 시나리오에 대한 실용적인 Beancount 템플릿과 실제 예시.

이 가이드는 일반적인 암호화폐 시나리오에 대한 실용적인 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

암호화폐 간 거래는 첫 번째 상품을 처분하므로 현금 판매와 정확히 동일하게 이익을 실현합니다: $2,400.00에 취득한 20 ETH는 $46,000.00의 BTC 원가 기준에 대한 $48,000.00의 수취 가치입니다. $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 토큰이 도착하며, 가스 수수료는 $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는 그 뒤에 오는 게시에 대해 구문 오류를 보고합니다. 실제 플래시 론은 빈 줄이 없는 단일 거래로 기록하세요 (들여쓰기된 ; 주석으로 레그를 표시), 동일한 블록 내에서 순합계가 0이 되는 중간 레그를 생략합니다.

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-acquiredholding-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와 각 [대괄호] 토큰이 사라질 때까지 템플릿은 유효한 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. 항목을 확정하기 전에 bean-check your-file.bean으로 계산을 검증하세요. 균형이 맞지 않거나 보유하지 않은 로트를 줄이는 항목은 잘못된 보고서를 조용히 생성하는 대신 여기서 실패합니다

모범 사례

  • 일관된 명명 규칙을 사용하세요
  • 메타데이터에 거래 ID를 포함하세요
  • 복잡한 거래를 철저히 문서화하세요
  • 환율과 가격을 검증하세요
  • 파일을 정기적으로 백업하세요

이 템플릿은 Beancount.io에서 암호화폐 회계를 위한 견고한 기반을 제공합니다. 특정 요구와 거래 패턴에 따라 사용자 정의하세요.

출처: https://beancount.io/ko/docs/Tips/cryptocurrency-templates-examples