Coin Selection هو اختيار الأموال التي تبني منها المحفظة معاملة Bitcoin. الرصيد ليس مبلغاً متصلاً واحداً؛ بل يتكون من مخرجات منفصلة لمعاملات سابقة لم تُنفق بعد، تسمى UTXO. على المحفظة اختيار ما يكفي لتغطية الدفعة ورسومها. تفعل ذلك عادةً تلقائياً، أما الاختيار اليدوي فيسمى Coin Control. تتحقق الشبكة من صلاحية المعاملة الناتجة، لكنها لا تفرض طريقة الاختيار نفسها على جميع المحافظ.
تريد آنا دفع 60000 sat. تجهّز محفظتها الدفعة؛ وهي تطبيق أو جهاز يتيح لها استلام بيتكوين وإرسالها. يشير الاختصار sat إلى ساتوشي، أصغر وحدة تُسجَّل بها المبالغ في معاملات بيتكوين. لديها UTXO بقيمة 100000 sat. وكما عند الدفع بورقة نقدية، لا تستطيع خصم جزء منها فقط: ينفق أحد مداخل المعاملة الجديدة ذلك المخرج بالكامل. تنشئ المعاملة مخرجاً بقيمة 60000 sat للتاجر، ومع رسوم قدرها 1000 sat تنشئ مخرجاً آخر بقيمة 39000 sat لآنا. هذا المخرج الثاني هو الباقي، أو change. ليس مبلغاً يعيده التاجر لاحقاً؛ بل ينشأ داخل معاملتها نفسها. الرسوم هي الفرق بين مجموع المدخلات ومجموع جميع المخرجات. [1] [7]
يمكن للمحفظة تمويل الدفعة نفسها باستخدام UTXO مختلفة. لكن زيادة المدخلات تعني عادةً بيانات أكثر، وبالتالي رسوماً أعلى عند معدل الرسوم نفسه. الرسوم ليست نسبة من المبلغ المرسل. تعتمد على الحجم الافتراضي للمعاملة، المقاس بوحدة vB، أي البايت الافتراضي، التي تراعي الوزن المختلف لأجزاء المعاملة. لنفترض أن إنفاق UTXO بقيمة 10000 sat يضيف مدخلاً بحجم تقديري 68 vB. عند معدل 10 sat/vB يكلف هذا المدخل 680 sat، فيساهم بمقدار 9320 sat في بقية الدفعة. هذه قيمته الفعلية. تبقى للأجزاء الأخرى من المعاملة تكاليفها؛ ويعتمد الحجم الحقيقي للمدخل على شروط الإنفاق المكتوبة في السكربت وبيانات التوقيع. السكربت برنامج قصير يصف شروط الإنفاق. في الدفعة العادية، تستخدم المحفظة مفتاحاً خاصاً، وهو قيمة عددية سرية، لإنشاء توقيع رقمي: إذن بالإنفاق يمكن التحقق منه. [2] [3] [7]
ربما تلقت آنا مبالغ صغيرة كثيرة بمرور الوقت. جمعها في مخرج أكبر تملكه هي يسمى دمجاً. قد تحتاج بعده إلى مدخلات أقل في دفعات لاحقة، لكنه يكلف رسوماً اليوم ويربط المخرجات المستخدمة علناً. لذلك ليس جمع كل شيء تلقائياً خياراً افتراضياً مناسباً. يقارن Bitcoin Core التكاليف أيضاً باستخدام waste metric: تقييم يراعي الفرق بين تكلفة المدخلات الآن وتكلفتها عند معدل طويل الأجل مفترض، مع تكلفة إنشاء الباقي وإنفاقه لاحقاً، أو الفائض المخصص للرسوم. المعدل طويل الأجل افتراض للحساب، لا تنبؤ. هذا التقييم يقيس التكلفة، لا الخصوصية. [2] [6]
وضعت آنا تسمية «راتب» على دفعة مستلمة، و«هدية» على أخرى. إنفاقهما معاً يعطي مراقب البلوكشين قرينة على ارتباطهما. لكنه لا يثبت أن جميع المدخلات لشخص واحد؛ فهناك معاملات ينشئها عدة مشاركين معاً. يتيح Coin Control اختيار UTXO محددة، وتساعد التسميات على تذكر مصدرها. التسمية ملاحظة داخل المحفظة وليست رسالة تُكتب في البلوكشين. يصف BIP 329 نقل هذه الملاحظات والمعلومات عما إذا كانت المحفظة تعتبر مخرجاً معيناً قابلاً للإنفاق. هذا إعداد محلي في المحفظة لا يغيّر قواعد شبكة بيتكوين. والصيغة نفسها لا تختار الأموال. قد يكشف تصدير التسميات علاقات حساسة، وحتى الدفع بلا باقٍ لا يضمن إخفاء الهوية. [4] [6]
ليس كل الرصيد المعروض قابلاً للاستخدام فوراً بالضرورة. قد تستبعد المحفظة بعض المخرجات عمداً، بينما تنتظر أخرى التأكيد أو استيفاء شروط الإنفاق. وعلى الاختيار مراعاة حدود حجم المعاملة ووزنها أيضاً. إنفاق مبلغ مستلم غير مؤكد يجعل الدفعة الجديدة تعتمد على المعاملة السابقة التي أنشأته، وتسمى هنا معاملة سابقة تعتمد عليها الدفعة. قد يتطلب تأكيد سلسلة المعاملات كلها رسوماً إضافية. تتيح RPC، الواجهة التي تستخدمها البرامج للتحكم في Bitcoin Core 29.0، الخيار include_unsafe في walletcreatefundedpsbt. يسمح هذا الخيار بإدراج مدخلات غير مؤكدة تنطوي على مخاطر. إذا استُبدلت المعاملة الأصلية بطريقة تزيل المخرج المطلوب، فلن تتمكن الدفعة التابعة من الحصول على تأكيد. أما مجرد إزالة المعاملة الأصلية مؤقتاً من ذاكرة عقدة فلا يغير صلاحيتها بحد ذاته. [3] [5]
كيف تبحث المحفظة بين الاحتمالات؟ يجرب Branch-and-bound، أو BnB، تركيبات من المدخلات ويتوقف عن متابعة فروع البحث التي لا يمكن أن تنتج اختياراً مناسباً. هدفه تمويل الدفعة من دون مخرج مستقل للباقي. لا يلزم التطابق الدقيق: يسمح النطاق بفائض يصل إلى تكلفة إنشاء الباقي وإنفاقه لاحقاً. يصبح هذا الفائض رسوماً ولا يبقى مخفياً في المحفظة. لهذا ليست الدفعة بلا باقٍ بالضرورة الأرخص بين كل الخيارات. للبحث عدد محدود من المحاولات، وقد لا يجد حلاً موجوداً أو أفضل تركيبة ممكنة. [2]
يقارن Bitcoin Core 29.0 اقتراحات BnB وKnapsack وSingle Random Draw (SRD)، وهي طرق مختلفة للعثور على مجموعة مدخلات مناسبة. ويضيف CoinGrinder عندما يتجاوز المعدل الفعلي ثلاثة أضعاف المعدل طويل الأجل؛ تبحث هذه الطريقة عن اختيار قليل الوزن مع باقٍ. يقارن النتائج باستخدام waste metric الموضح سابقاً. إذا اختار المستخدم خصم الرسوم من المبالغ المخصصة للمستلمين، يتم تجاوز BnB. هذا وصف لذلك الإصدار المحدد، لا إجراء ملزم لكل المحافظ ولا ادعاء بشأن أحدث إصدار. [3]
لا تحتاج إلى معرفة إعدادات البرمجة لإجراء دفعة عادية. لكن عليك قبل التوقيع فهم المستلم والمبلغ والرسوم الإجمالية والباقي العائد إليك. للمستخدم المتقدم، يتيح walletcreatefundedpsbt في Bitcoin Core 29.0 تحديد المدخلات بواسطة txid، معرّف المعاملة الأصلية، وvout، رقم موضع مخرجها. يتحكم add_inputs في السماح للمحفظة بإضافة مدخلات أخرى. انتبه إلى اختلاف الوحدات: يستخدم fee_rate وحدة sat/vB، بينما يستخدم feeRate وحدة BTC/kvB، أي بيتكوين لكل 1000 بايت افتراضي. النتيجة هي PSBT، صيغة لتبادل معاملة معدّة للحصول على التوقيعات. إنشاء PSBT وحده لا يرسل شيئاً ولا يؤكد دفعة. ولا يضمن الاختيار اليدوي أو هذه الصيغة صحة المستلم أو صلاحية المدخلات غير المؤكدة. [5]
للحصول على صورة أوضح، اقرأ هذا المدخل مع UTXO, Coin Control, Change Address, Fee Rate, PSBT, خصوصية Bitcoin. تشير إلى هذا المدخل أيضًا Watch-only Wallet, Change Address, Inventing Bitcoin.