زیر کاپوت
کد واقعی
ایمنی واقعی
این دقیقاً همان چیزی است که هنگام ایجاد کیف پول، بازیابی و جابجایی وجوه در دستگاه شما اتفاق میافتد - گام به گام از طریق کد منبع باز که روی آیفون شما اجرا میشود، ردیابی میشود.
1 / 5
128 بیت تصادفی واقعی
سیستم CSPRNG آنتروپی خام را در دستگاه شما تولید می کند - منبع واحد کل کیف پول شما.
// 128 بیت آنتروپی از سیستم CSPRNG
آنتروپی var = داده (تعداد: 16)
SecRandomCopyBytes (kSecRandomDefault، 16، &آنتروپی)
// چک جمع = اولین بیت های SHA-256 (آنتروپی)
اجازه دهید checksum = SHA256.hash(data: entropy).prefix(1)
اجازه دهید بیت = آنتروپی + جمع کنترلی
// هر گروه 11 بیتی را به فهرست کلمات BIP-39 ترسیم کنید
اجازه دهید mnemonic = bits.chunks(از: 11)
.map { wordlist[$0] } // 12 کلمه
// کشش به یک دانه 512 بیتی (PBKDF2-HMAC-SHA512)
let seed = PBKDF2.sha512(mnemonic.joined(" ")
نمک: "مانمونیک"، دور: 2048)
// مهر و موم درSecure Enclave - هرگز ترک نمی کند
Keychain.store را امتحان کنید(seed، دسترسی:.thisDeviceOnly،
بیو—تری:.faceID)
1 / 4
شما عبارت خود را تایپ کنید
به صورت محلی وارد می شود و هرگز به جایی منتقل نمی شود.
// عبارتی را که تایپ می کنید بخوانید — هرگز منتقل نشد
اجازه دهید کلمات = عبارت.کوچک().split(" ")
// هر کلمه باید در لیست BIP-39 وجود داشته باشد
guard words.allSatisfy(wordlist.contains)
else { throw WalletError.unknownWord }
// محاسبه مجدد و تأیید جمع کنترلی
let (آنتروپی، مجموع) = words.toEntropy()
guard SHA256.hash(data: entropy).verifies(sum)
else { throw WalletError.badChecksum }
// همان مشتق تولید - کاملاً آفلاین
let seed = PBKDF2.sha512(words.joined(" ")
نمک: "مانمونیک"، دور: 2048)
Keychain.store را امتحان کنید (seed، دسترسی:.thisDeviceOnly)
1 / 3
سکه های خود شما انتخاب می شوند
ورودیها از خروجیهای مصرفنشده شما میآیند - هیچ شخص ثالثی درگیر نیست.
// سکه ها را از خروجی های خرج نشده خود انتخاب کنید
let inputs = wallet.selectUTXOs(مقدار + کارمزد)
// تراکنش را به طور کامل روی دستگاه بسازید
اجازه دهید tx = TxBuilder (bitcoin.)
.add(ورودی ها)
ارسال (مبلغ، به: گیرنده)
.change(to: wallet.changeAddress).build()
// قبل از اینکه هر چیزی حرکت کند همه جزئیات را مرور می کنید
ارائه (تأیید: tx.summary)
// مبلغ · هزینه · گیرنده — هنوز چیزی ارسال نشده است
1 / 4
کلید امضا مشتق شده است
یک کلید فرزند در هر ورودی از طریق مسیر BIP-32 مشتق می شود.
// استخراج کلید فرزند برای این ورودی (BIP-32)
let key = masterKey.derive ("m/84'/0'/0'/0/\(i)")
// هش تصویر اولیه تراکنش (دوبل SHA-256)
بگذارید h = SHA256(SHA256(tx.preimage(i)))
// در داخلSecure Enclave علامت بزنید (نیاز به شناسه چهره دارد)
اجازه دهید sig = سعی کنید SecureEnclave.sign(h، کلید: کلید،
منحنی:.secp256k1)
// فقط بایت های امضا شده از دستگاه خارج می شوند
tx.attach(sig، ورودی: i)
network.broadcast(tx.serialized)
ساده شده از سوئیفت منبع بازAperture - الگوریتم های واقعی، در دستگاه شما.
منبع کامل را بخوانیدبه آنچه گم شده توجه کنید: هیچ سرور، هیچ حساب، هیچ کلیدی هرگز از شبکه عبور نمی کند. کلید خصوصی کاملاً درSecure Enclave دستگاه شما ایجاد، ذخیره و استفاده می شود.