---
# System prepended metadata

title: L2 btc

---

# 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()

```