# L2 btc
```go=
// 1. Генерим ключ для создания фандинг транзакции
trader_mining_key := generatePrivateKey(TRADER_MNEMONIC, TRADER_PASSWORD, 1)
trader_mining_adr := "1234"
trader_btc_adr := ""
fmt.Printf("Трейдер, сходи в биткоин ноду - запусти комманду : \n")
fmt.Printf("sendtoaddress %s 10\n", trader_btc_adr)
fmt.Printf("Полученную транзакцию используй для получения тела транзакции: \n")
fmt.Printf("getrawtransaction tx_id \n")
trader_mining_tx_hex := ""
trader_funding_key := generatePrivateKey(TRADER_MNEMONIC, TRADER_PASSWORD, 1)
// Тк транзакция полученная с помощью RPC комманды sendtoaddress - это не типичная, тн майнинг транзакция,
// для частоты эксперемента создаем промежуточную p2ph транзакцию с 1 входом, которую потратим 1 выходом для создания мультисига
funding_tx_hex := generate_p2ph_tx(trader_mining_tx_hex, trader_mining_key, trader_funding_key)
fmt.Printf("Трейдер, сходи в биткоин ноду - запусти комманду : \n")
fmt.Printf("sendrawtransaction %s 10\n", funding_tx_hex)
// 2. Генерируем L1_L2 транзакцию - она фиксирует деп трейдера в BTC для операций в L2
// 2.1. Генерируем начальный коммитмент - страховка на случай если стороны не начнут работу в L2
// 2.2. публикуем L1_L2 транзакцию
l1_l2_funding_tx_hex := generate_multisig_tx(trader_l1_l2_private_key, oxa_l1_l2_private_key)
l1_l2_init_commit_tx_hex := generate_commit_tx(trader_l1_l2_private_key, oxa_l1_l2_private_key, trader_revocation_key, trader_l1_l2_init_commit_private_key, oxa_l1_l2_init_commit_private_key)
fmt.Printf("OXA, сходи в биткоин ноду - запусти комманду : \n")
fmt.Printf("sendrawtransaction %s 10\n", l1_l2_funding_tx_hex)
// 3. Генерируем второй коммитмент, при его генерации трейдер передает OXA ключ отзыва для предыдущего коммитмента
l2_new_state_tx_hex := generate_commit_tx(trader_l1_l2_private_key, oxa_l1_l2_private_key, trader_revocation_key, trader_l1_l2_init_commit_private_key, oxa_l1_l2_init_commit_private_key)
fmt.Printf("Трейдер, попробуй удачу, сходи в биткоин ноду - запусти комманду : \n")
fmt.Printf("sendrawtransaction %s 10\n", l1_l2_init_commit_tx_hex)
// 4. Генерируем транзакцию наказания, если трейдер опубликовал коммитмент из из п.3
l2_l1_revocation_tx_hex := generate_commitment_revocation_tx(trader_revocation_key, oxa_l1_l2_init_commit_private_key)
fmt.Printf("OXA, надо недопустить кражи средств, сходи в биткоин ноду - запусти комманду : \n")
fmt.Printf("sendrawtransaction %s 10\n", l2_l1_revocation_tx_hex)
// 4.1. Транзакция закрытия канала после таймлока(если биржа не сделала шаг 4 - трейдер может забрать деньги)
l2_l1_hltc_spending_tx := generate_htlc_spending_tx()
// 5. Генерируем L2_L1 транзакцию, те закрываем канал добровольно(не сработает если транзакции 3 и 4(4.1) в блокчейне)
l2_l1_tx := generate_withdraw_l2_tx()
```