A New Standard for Self-Custody
셀프 커스터디의
새로운 기준
오늘 바로 코코넛으로
비트코인 셀프 커스터디를 시작하세요


트랜잭션 보내기
세상에서 가장 쉬운
트랜잭션 보내기

STEP 1
월렛에서 트랜잭션 만들기

STEP 2
볼트로 스캔하기

STEP 3
볼트에서 서명하기

STEP 4
월렛으로 서명된 정보 스캔하기

STEP 5
네트워크에 제출하기
학습용 앱
충분히 연습 후
시작하세요
코코넛 학습용 앱은 비트코인 셀프 커스터디를 처음 시작하는 여러분을 위해 만들어졌습니다.
실습을 통해 반드시 알아야 할 개념을 쉽고 빠르게 익혀, 막연한 두려움을 없애고 무지와 실수로 인해 소중한 비트코인을 잃는 일이 없도록 도와드립니다.
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
오픈소스,
그 자체로
신뢰에 기반한
비트코인 지갑이라면 무조건 오픈소스여야 한다고 믿습니다. 저희를 맹목적으로 믿어달라고 강요하지 않겠습니다. 대신 직접 확인하고 검증해 주세요.
비트코인 셀프커스터디 알아보기
비트코인 셀프커스터디(셀커)란 무엇인가요?
비트코인 셀프커스터디(셀커)는 비트코인을 사용할 수 있는 개인키를 본인이 관리하는 방식입니다. 개인키와 복구 정보의 보관도 사용자의 책임입니다.
코코넛 월렛과 코코넛 볼트는 어떻게 다른가요?
코코넛 월렛은 잔액을 조회하고 트랜잭션을 만드는 보기 전용 비트코인 지갑입니다. 코코넛 볼트는 전용 공기계에서 오프라인으로 트랜잭션에 서명하는 앱입니다. 온라인 조회와 오프라인 서명을 분리해 사용합니다.
코코넛으로 비트코인 셀프커스터디를 어떻게 시작하나요?
먼저 공식 튜토리얼에서 기기 준비와 사용 방법을 확인하세요. 코코넛 월렛과 볼트는 이 페이지의 App Store 또는 Google Play 링크로 설치할 수 있습니다.
다운로드
Not your keys,
Not your bitcoin
지금 바로 셀프 커스터디 하세요!
App Store와 Google Play를 통해서만 공식 배포됩니다

