تحت غطاء محرك السيارة
رمز حقيقي.
السلامة الحقيقية.
هذا هو بالضبط ما يحدث على جهازك عندما تقوم بإنشاء محفظة، واستعادتها، ونقل الأموال - يتم تتبعها، خطوة بخطوة، من خلال التعليمات البرمجية مفتوحة المصدر التي تعمل على جهاز iPhone الخاص بك.
1 / 5
128 بت من العشوائية الحقيقية
يُنتج نظام CSPRNG إنتروبيا خام على جهازك — وهو المصدر الوحيد لمحفظتك بأكملها.
// 128 بت من الإنتروبيا من النظام CSPRNG
فار إنتروبيا = البيانات (العدد: 16)
SecRandomCopyBytes(kSecRandomDefault, 16, &الإنتروبيا)
// المجموع الاختباري = البتات الأولى من SHA-256 (الإنتروبيا)
دع المجموع الاختباري = SHA256.hash(البيانات: الإنتروبيا).بادئة(1)
دع البتات = الانتروبيا + المجموع الاختباري
// قم بتعيين كل مجموعة ذات 11 بت إلى قائمة الكلمات BIP-39
دع ذاكري = bits.chunks(من: 11)
.map { wordlist[$0] } // 12 كلمة
// تمتد إلى بذرة 512 بت (PBKDF2-HMAC-SHA512)
دع البذور = PBKDF2.sha512(mnemonic.joined(" "),
الملح: "ذاكري"، جولات: 2048)
// قم بإغلاقSecure Enclave - فهو لا يغادر أبدًا
جرب Keychain.store(seed، الوصول:.thisDeviceOnly،
القياسات الحيوية:.faceID)
1 / 4
أنت تكتب العبارة الخاصة بك
يتم إدخاله محليًا ولا يتم نقله إلى أي مكان.
// اقرأ العبارة التي تكتبها - لا يتم نقلها مطلقًا
دع الكلمات = العبارة.lowercase().split(" ")
// يجب أن تكون كل كلمة موجودة في قائمة BIP-39
كلمات الحراسة.allSatisfy(wordlist.contains)
آخر {رمي WalletError.unknownWord}
// إعادة حساب والتحقق من المجموع الاختباري
دع (الإنتروبيا، مجموع) = الكلمات.toEntropy()
حارس SHA256.hash (البيانات: الإنتروبيا).يتحقق (مجموع)
آخر {رمي WalletError.badChecksum}
// نفس اشتقاق التوليد — غير متصل بالإنترنت بالكامل
دع البذور = PBKDF2.sha512(words.joined(" "),
الملح: "ذاكري"، جولات: 2048)
حاول Keychain.store(seed، الوصول:.thisDeviceOnly)
1 / 3
تم تحديد العملات المعدنية الخاصة بك
تأتي المدخلات من مخرجاتك غير المنفقة - ولا يشارك أي طرف ثالث.
// اختر العملات المعدنية من مخرجاتك غير المنفقة
دع المدخلات = Wallet.selectUTXOs (المبلغ + الرسوم)
// أنشئ المعاملة بالكامل على الجهاز
دع tx = TxBuilder(.bitcoin)
.إضافة (المدخلات)
.إرسال (المبلغ إلى: المستلم)
.change(إلى: Wallet.changeAddress).build()
// تقوم بمراجعة كل التفاصيل قبل أن يتحرك أي شيء
الحاضر (تأكيد: tx.summary)
// المبلغ · الرسوم · المستلم — لم يتم إرسال أي شيء بعد
1 / 4
يتم اشتقاق مفتاح التوقيع
يتم اشتقاق مفتاح فرعي لكل إدخال عبر مسار BIP-32.
// اشتقاق المفتاح الفرعي لهذا الإدخال (BIP-32)
دع المفتاح = masterKey.derive("m/84'/0'/0'/0/\(i)")
// تجزئة الصورة الأولية للمعاملة (SHA-256 مزدوجة)
دع h = SHA256(SHA256(tx.preimage(i)))
// قم بالتسجيل داخلSecure Enclave (يحتاج إلى Face ID)
Let sig = حاول SecureEnclave.sign(h, key: key,
المنحنى:.secp256k1)
// فقط البايتات الموقعة تغادر —لجهاز
tx.attach (سيج، الإدخال: أنا)
شبكة البث (tx.serialized)
تم تبسيطها من Swift مفتوحة المصدر الخاصة بـAperture — الخوارزميات الحقيقية، على جهازك.
إقرأ المصدر كاملالاحظ ما هو مفقود: لا يوجد خادم، ولا حساب، ولا يوجد مفتاح يعبر الشبكة على الإطلاق. يتم إنشاء المفتاح الخاص وتخزينه واستخدامه بالكامل داخلSecure Enclave بجهازك.