A New Standard for Self-Custody
Nový standard
pro self-custody
Začněte se self-custody bitcoinu
s Coconut už dnes


Proč je Coconut jiný
Podpisovací zařízení a watch-only peněženka,
úplně oddělené
Neobětovali jsme bezpečnost pohodlí ani naopak. Záměrně oddělujeme Coconut Vault od Coconut Wallet abyste mohli spravovat bitcoin co nejbezpečněji.

Coconut Vault
Podpisovací zařízení
Nainstalujte na vyhrazený telefon a používejte plně offline. Jakmile se připojí k internetu, použití se zablokuje.

Coconut Wallet
Watch-only peněženka
Nainstalujte na běžný telefon. Čte živá data z vašeho bitcoinového uzlu.
Odeslání transakce
Nejjednodušší způsob,
jak poslat transakci

STEP 1
Vytvořte transakci ve Wallet

STEP 2
Naskenujte ve Vault

STEP 3
Podepište ve Vault

STEP 4
Naskenujte podepsaná data zpět do Wallet

STEP 5
Odešlete do sítě
Tréninková aplikace
Nejdřív trénujte,
pak naostro
Tréninková aplikace Coconut je pro každého, kdo začíná se self-custody bitcoinu.
Naučte se základy prakticky, rychle a srozumitelně, abyste se vyhnuli chybám a zbytečné ztrátě bitcoinu.
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:coconut_wallet/repository/shared_prefs_repository.dart';
import 'package:coconut_wallet/utils/logger.dart';
import 'package:provider/provider.dart';
import 'app.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
final RootIsolateToken token = RootIsolateToken.instance!;
BackgroundIsolateBinaryMessenger.ensureInitialized(token);
if (Platform.isAndroid) {
try {
const MethodChannel ch = MethodChannel('android');
final int v = await ch.invokeMethod('getSdkVersion');
if (v != 26) {
SystemChrome.setPreferredOrientations([
DeviceOrientation.portraitUp,
DeviceOrientation.portraitDown,
]);
}
} on PlatformException catch (e) {
Logger.log('Failed to get platform version');
}
}
}
class CoconutApp extends StatelessWidget {
const CoconutApp({super.key});
@override
Widget build(BuildContext context) {
return MultiProvider(
providers: [
ChangeNotifierProvider(create: (_) => WalletProvider()),
ChangeNotifierProvider(create: (_) => NodeProvider()),
],
child: MaterialApp(
title: 'Coconut Wallet',
theme: CoconutTheme.light(),
darkTheme: CoconutTheme.dark(),
home: const HomePage(),
),
);
}
}
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:coconut_wallet/repository/shared_prefs_repository.dart';
import 'package:coconut_wallet/utils/logger.dart';
import 'package:provider/provider.dart';
import 'app.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
final RootIsolateToken token = RootIsolateToken.instance!;
BackgroundIsolateBinaryMessenger.ensureInitialized(token);
if (Platform.isAndroid) {
try {
const MethodChannel ch = MethodChannel('android');
final int v = await ch.invokeMethod('getSdkVersion');
if (v != 26) {
SystemChrome.setPreferredOrientations([
DeviceOrientation.portraitUp,
DeviceOrientation.portraitDown,
]);
}
} on PlatformException catch (e) {
Logger.log('Failed to get platform version');
}
}
}
class CoconutApp extends StatelessWidget {
const CoconutApp({super.key});
@override
Widget build(BuildContext context) {
return MultiProvider(
providers: [
ChangeNotifierProvider(create: (_) => WalletProvider()),
ChangeNotifierProvider(create: (_) => NodeProvider()),
],
child: MaterialApp(
title: 'Coconut Wallet',
theme: CoconutTheme.light(),
darkTheme: CoconutTheme.dark(),
home: const HomePage(),
),
);
}
}
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:coconut_wallet/repository/shared_prefs_repository.dart';
import 'package:coconut_wallet/utils/logger.dart';
import 'package:provider/provider.dart';
import 'app.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
final RootIsolateToken token = RootIsolateToken.instance!;
BackgroundIsolateBinaryMessenger.ensureInitialized(token);
if (Platform.isAndroid) {
try {
const MethodChannel ch = MethodChannel('android');
final int v = await ch.invokeMethod('getSdkVersion');
if (v != 26) {
SystemChrome.setPreferredOrientations([
DeviceOrientation.portraitUp,
DeviceOrientation.portraitDown,
]);
}
} on PlatformException catch (e) {
Logger.log('Failed to get platform version');
}
}
}
class CoconutApp extends StatelessWidget {
const CoconutApp({super.key});
@override
Widget build(BuildContext context) {
return MultiProvider(
providers: [
ChangeNotifierProvider(create: (_) => WalletProvider()),
ChangeNotifierProvider(create: (_) => NodeProvider()),
],
child: MaterialApp(
title: 'Coconut Wallet',
theme: CoconutTheme.light(),
darkTheme: CoconutTheme.dark(),
home: const HomePage(),
),
);
}
}
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:coconut_wallet/repository/shared_prefs_repository.dart';
import 'package:coconut_wallet/utils/logger.dart';
import 'package:provider/provider.dart';
import 'app.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
final RootIsolateToken token = RootIsolateToken.instance!;
BackgroundIsolateBinaryMessenger.ensureInitialized(token);
if (Platform.isAndroid) {
try {
const MethodChannel ch = MethodChannel('android');
final int v = await ch.invokeMethod('getSdkVersion');
if (v != 26) {
SystemChrome.setPreferredOrientations([
DeviceOrientation.portraitUp,
DeviceOrientation.portraitDown,
]);
}
} on PlatformException catch (e) {
Logger.log('Failed to get platform version');
}
}
}
class CoconutApp extends StatelessWidget {
const CoconutApp({super.key});
@override
Widget build(BuildContext context) {
return MultiProvider(
providers: [
ChangeNotifierProvider(create: (_) => WalletProvider()),
ChangeNotifierProvider(create: (_) => NodeProvider()),
],
child: MaterialApp(
title: 'Coconut Wallet',
theme: CoconutTheme.light(),
darkTheme: CoconutTheme.dark(),
home: const HomePage(),
),
);
}
}
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:coconut_wallet/repository/shared_prefs_repository.dart';
import 'package:coconut_wallet/utils/logger.dart';
import 'package:provider/provider.dart';
import 'app.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
final RootIsolateToken token = RootIsolateToken.instance!;
BackgroundIsolateBinaryMessenger.ensureInitialized(token);
if (Platform.isAndroid) {
try {
const MethodChannel ch = MethodChannel('android');
final int v = await ch.invokeMethod('getSdkVersion');
if (v != 26) {
SystemChrome.setPreferredOrientations([
DeviceOrientation.portraitUp,
DeviceOrientation.portraitDown,
]);
}
} on PlatformException catch (e) {
Logger.log('Failed to get platform version');
}
}
}
class CoconutApp extends StatelessWidget {
const CoconutApp({super.key});
@override
Widget build(BuildContext context) {
return MultiProvider(
providers: [
ChangeNotifierProvider(create: (_) => WalletProvider()),
ChangeNotifierProvider(create: (_) => NodeProvider()),
],
child: MaterialApp(
title: 'Coconut Wallet',
theme: CoconutTheme.light(),
darkTheme: CoconutTheme.dark(),
home: const HomePage(),
),
);
}
}
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:coconut_wallet/repository/shared_prefs_repository.dart';
import 'package:coconut_wallet/utils/logger.dart';
import 'package:provider/provider.dart';
import 'app.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
final RootIsolateToken token = RootIsolateToken.instance!;
BackgroundIsolateBinaryMessenger.ensureInitialized(token);
if (Platform.isAndroid) {
try {
const MethodChannel ch = MethodChannel('android');
final int v = await ch.invokeMethod('getSdkVersion');
if (v != 26) {
SystemChrome.setPreferredOrientations([
DeviceOrientation.portraitUp,
DeviceOrientation.portraitDown,
]);
}
} on PlatformException catch (e) {
Logger.log('Failed to get platform version');
}
}
}
class CoconutApp extends StatelessWidget {
const CoconutApp({super.key});
@override
Widget build(BuildContext context) {
return MultiProvider(
providers: [
ChangeNotifierProvider(create: (_) => WalletProvider()),
ChangeNotifierProvider(create: (_) => NodeProvider()),
],
child: MaterialApp(
title: 'Coconut Wallet',
theme: CoconutTheme.light(),
darkTheme: CoconutTheme.dark(),
home: const HomePage(),
),
);
}
}

DON'T TRUST, VERIFY
Open source
jako základ
důvěry
Věříme, že každá bitcoinová peněženka musí být open source. Nechceme po vás slepou důvěru. Přečtěte si kód a ověřte si vše sami.
Jak funguje vlastní správa bitcoinu
Stáhnout
Not your keys,
Not your bitcoin
Začněte se self-custody ještě dnes!
coconut.onl používá doménu .onl záměrně: zní podobně jako korejské slovo 오늘 (oneul), které znamená „dnes“. Oficiální doména je coconut.onl.
Oficiální verze jsou pouze v App Store a Google Play.