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