FastPQ Iroha کے منتخب کردہ عملدرآمد اثرات کے لئے STARK ثبوت کا راستہ ہے۔ یہ معمول کے لین دین کے عملدرآمد یا اتفاق رائے کی جگہ نہیں لیتا۔ ٹرانزیکشنز اب بھی معمول کے مطابق ISI, IVM ، اور Sumeragi کے ذریعے چلتی ہیں۔ FastPQ Deterministic execution witness کو استعمال کرتا ہے اور حمایت یافتہ اثرات کو ثبوت کے بیچوں میں بدل دیتا ہے۔
موجودہ میزبان انٹیگریشن میں تین اہم راستے ہیں:
بلاک پر عملدرآمد کے دوران ریکارڈ کئے گئے شفاف عددی اثاثے کی منتقلی
Nexus تصدیق شدہ لین ریلے جن کے AXT ثبوت لفافے میں ایک FastPQ پابندیاں ہیں۔
SCCP شفاف پیغام پروف ہیلپرز جو ایک FastPQ ثبوت کو کھلی تصدیق کے لفافے میں پھنساتے ہیں۔
شفاف عددی منتقلیاں ایک منظم منتقلی ٹرانسکرپٹ تخلیق کرتی ہیں جب ہدایات توازن کو تبدیل کرتی ہیں۔ ٹرانسکریپٹ ریکارڈ:
ماخذ اکاؤنٹ، منزلہ اکاؤنٹ، اثاثے کی تعریف اور رقم
منتقلی سے پہلے اور بعد میں بھیجنے والے اور وصول کرنے والے کے توازن
ٹرانزیکشن انٹری پوائنٹ ہیش کے طور پر استعمال کیا جاتا ہے
جمع کرانے والے اکاؤنٹ سے حاصل کردہ اتھارٹی کا ڈائجسٹ
سنگل ڈیلٹا ٹرانسکرپٹ کے لئے پوزیڈون کا ہضم
بیچ ٹرانسفر میں متعدد ڈیلٹا کے ساتھ ایک نقل کا استعمال ہوتا ہے۔ اس صورت میں واحد ڈیلٹا پوزیڈون ڈائجسٹ غائب ہے۔
بلاک کو حتمی شکل دینے پر ، Iroha ان ٹرانسکرپٹ کو اندراج نقطہ ہیش کے ذریعہ گروپ کرتا ہے۔ عملدرآمد کا گواہ پھر اصل ٹرانسکریپٹ بنڈل اور FastPQ ٹرانزیشن بیچ دونوں لے جاتا ہے جو پروور کے لئے تیار کیا گیا تھا۔
ہر ٹرانسفر ڈیلٹا دو منتقلی صفوں میں بدل جاتا ہے:
صف
کلیدی شکل
پری ویلیو
پوسٹ ویلیو
بھیجنے والا ڈیبٹ
asset/<asset-definition>/<source-account>
بھیجنے والے توازن سے پہلے
بھیجنے والے توازن کے بعد
وصول کنندہ کریڈٹ
asset/<asset-definition>/<destination-account>
وصول کنندہ توازن سے پہلے
کے بعد وصول کنندہ توازن
عددی اقدار کو عددی گواہ اکائیوں میں معمول پر لایا جاتا ہے۔ FastPQ بیچنگ کے لئے ایک قدر مسترد کردی جاتی ہے اگر اسے منتخب شدہ اعشاریہ پیمانے پر غیر منفی u64 کے طور پر نمائندگی نہیں کی جاسکتی ہے۔
اس حصے میں موجودہ Rust پروور اور تصدیق کنندہ کے ذریعہ نافذ کردہ حساب کتاب کی وضاحت کی گئی ہے۔ نیچے دیئے گئے تمام فیلڈ آپریشنز گولڈلیکس پرائم فیلڈ پر ہیں:
F=Fp,p=264−232+1
FastPQ میدان کی ذمہ داریوں کے لئے F پر Poseidon2 کا استعمال کرتا ہے۔ اسفنج میں چوڑائی t = 3 ، شرح r = 2 اور گنجائش 1 ہے۔ ہیش ریٹ-2 بلاکس میں فیلڈ عناصر کو جذب کرتا ہے اور حتمی تبدیلی سے پہلے ایک واحد فیلڈ عنصر 1 شامل کرتا ہے۔
HF(x0,…,xm−1)=Poseidon2F(x0,…,xm−1,1)
بائٹ سٹرنگز کو 7 بائٹ کے چھوٹے اینڈین ٹانگوں میں پیک کیا گیا ہے تاکہ ہر ٹانگ سختی سے p سے نیچے ہو:
pack(b)j=i=0∑6b7j+i28i,0≤pack(b)j<p
ڈومین سے علیحدہ فیلڈ ہیشز کو مندرجہ ذیل طور پر نمائندگی کی جاتی ہے:
HD(m)=HF(∣pack(D)∣,pack(D),∣pack(m)∣,pack(m))
بائٹ ڈومین ڈیجسٹ سے شروع ہونے والے ہیشوں کے لئے ، FastPQ پہلے آٹھ چھوٹے اینڈین بائٹس کو فیلڈ میں نقشہ کرتا ہے:
seed(D)=le64(Hash(D)[0..8])modp
یہاں Hash کا مطلب ہے Iroha کے iroha_crypto::Hash::new، ایک 32 بائٹ Blake2bVar ڈائجسٹ، جب تک کہ کسی فارمولے میں واضح طور پر Poseidon2 یا SHA-256 کا نام نہیں ہوتا.
FastPQ چار مکمل راؤنڈ ، پچاس سات جزوی راؤنڈ استعمال کرتا ہے ، پھر چار مزید مکمل راؤنڈز۔ گول مستقل c_r = (c_{r,0}, c_{r,1}, c_{r,2}) کے ساتھ ایک پورا راؤنڈ ہے:
x′=M⋅S(x0+cr,0)S(x1+cr,1)S(x2+cr,2)
جزوی راؤنڈ ہے:
x′=M⋅S(x0+cr,0)x1+cr,1x2+cr,2
تمام اضافے اور ضربیں F میں ہیں۔ کینونیکل MDS میٹرکس یہ ہے:
بلاک تخلیق کا وقت ملی سیکنڈ سے نینو سیکنڈ میں تبدیل کیا جاتا ہے:
slot=saturating_mul(creation_time_ms,1,000,000)
ٹرانزیکشن سیٹ ہیش ترتیب شدہ انٹریپوائنٹ ہیشوں پر بائٹ ڈومین ہیش ہے:
tx_set_hash=Hash(fastpq:v1:tx_set∥h0∥⋯∥hn−1)
جہاں h_i ٹرانزیکشن اور ٹائم ٹرگر انٹری پوائنٹ ہیشز کو ترتیب دیا گیا ہے۔ ثبوت عوامی IO میں ، اگر perm_root یا tx_set_hash تمام صفر ہے تو ، پروور فال بیک ویلیوز بھرتا ہے:
perm_root={032,Hash(fastpq:v1:perm_root∥p0∥⋯∥pn−1),if there are no permission hashesotherwise
ٹرانسفر لائنز میں 32 سطحوں کا نایاب میرکل راستہ ہوتا ہے۔ اگر میزبان ثبوت غائب ہے تو ، پروور صف کی کلید سے ایک تعیناتی راستہ ترکیب کرتا ہے ، پہلے توازن ، اور یہ کہ آیا صف بھیجنے والا یا وصول کنندہ طرف ہے۔
مصنوعی راستوں کے لئے، ذائقہ نمک fastpq:smt:from بھیجنے والے صفوں اور fastpq:smt:to وصول کرنے والے صفوں کے لئے ہے:
تصدیق کنندہ A_i کے لئے دوبارہ حساب کرتا ہے نمونے میں شامل قطار کھلنے اور اس کی جانچ پڑتال مرکب AIR مرکب مرکل جڑ کے تحت انجام دی گئی ساخت کی قیمت کے ساتھ.
اجازت کی تلاش کے accumulator Fiat-Shamir چیلنج کا استعمال کرتا ہے gamma. کم درجے کی توسیع کے جائزوں کے دوران s_perm اور perm_hash، چلانے کی مصنوعات ہے:
omega_T ٹریس ڈومین جنریٹر ، omega_E تشخیص کے ڈومین جینیٹر ، اور g ترتیب شدہ coset آفسیٹ ہو. v_i اقدار والے ٹریس کالم کے لئے ، انترپولشن کوفیشنز پیدا کرتا ہے a_j اس طرح:
f(ωTi)=vi
کم درجے کی توسیع coset پر ایک ہی کثیرالاضلاع کا جائزہ لیتا ہے:
LDEf(i)=f(g⋅ωEi)
FFT سے پہلے کوسٹ آفسیٹ کی طاقتوں کے ذریعہ معاونین کو ضرب کرکے اس کا حساب لگایا جاتا ہے:
aj′=ajgj
اور پھر تشخیص کے شعبے پر a' کا جائزہ لینا۔
انگریزی میں CPU FFT bit-reversed ان پٹ پر ایک iterative radix-2 Cooley-Tukey ٹرانسفارمیشن ہے. L, نصف لمبائی H=L/2, اور مرحلے کی جڑ:
ωL=ωN/L
ہر پروں کے حساب سے:
u=xj
v=xj+H⋅ωLj
xj′=u+v,xj+H′=u−v
الٹا FFT omega^{-1} کے ساتھ ایک ہی تبدیلی کرتا ہے اور الٹا ڈومین سائز کی طرف سے پیمانے پر:
IFFT(x)=N−1⋅FFTω−1(x)
استعمال سے پہلے کیٹلاگ جڑوں کی تصدیق کی جاتی ہے:
ω2k=1
ω2k−1=1(k>0)
کیٹلاگ جڑ سے حاصل کردہ چھوٹے ڈومینز کے لئے ، جنریٹر یہ ہے:
LDE کے بعد ، FastPQ تمام LDE کالموں میں ہر سطر کو ہیش کرتا ہے۔ m کالموں کے ل:
ri=HF(i,m,xi,0,xi,1,…,xi,m−1)
اگر صف ہیشز اب بھی تشخیص کے ڈومین کی بجائے ٹریس ڈومین پر ہیں تو، پروور اسی coset LDE عمل کے ساتھ اس واحد قطار ہیش کالم کو مداخلت کرتا ہے اور بڑھا دیتا ہے۔
FRI AIR ساخت کے جائزوں کا پابند ہے۔ ہر راؤنڈ l کے لئے ، ٹرانسکرپٹ نمونے ایک چیلنج beta_l۔ پرت کو آخری قدر کو دہرا کر arity کی ضرب تک پالش کیا جاتا ہے۔ ہر arity سائز گروپ میں فولڈنگ:
yl+1,j=k=0∑a−1yl,ja+kβlk
جہاں a FRI arity ہے۔ تصدیق کنندہ ہر نمونے لینے والے استفسار چین کے لئے چیک کرتا ہے کہ:
yl+1,⌊i/a⌋=k=0∑a−1yl,⌊i/a⌋a+kβlk
اور ہر کھلا FRI گروپ کو متعلقہ FRI پرت کی جڑ کے مقابلے میں تصدیق کرتا ہے۔
کینونیکل پیرامیٹر کیٹلاگ ٹرانسکرپٹ ہیش کو SHA3-256 کے طور پر لیبلز کرتا ہے۔ موجودہ پروور اور تصدیق کنندہ لاگو کرنے سے چیلنج بائٹس کو iroha_crypto::Hash::new کے ساتھ حاصل کیا جاتا ہے ، جو 32 بائیٹ کا بلیک 2 بی ویار ڈائجسٹ ہے ، پھر پہلی آٹھ چھوٹی اینڈین بائٹ کو F میں کم کر دیتا ہے۔:
χ(tag)=le64(Hash(state∥len(tag)∥tag)[0..8])modp
چیلنج کالز مکمل ڈائجسٹ کو ٹرانسکرپٹ کی حالت میں شامل کریں۔ دوبارہ چلانے کا حکم ہے:
عوامی IO ، پروٹوکول ورژن، پیرامیٹر ورژن، اور پیرامیٹر نام۔
LDE جڑ اور ٹریس جڑ
gamma
AIR ساخت کے چیلنجز alpha_0، alpha_1
AIR ٹریس جڑ اور AIR ساخت کی جڑ
تلاش عظیم مصنوعات
FRI پرت کی جڑوں اور beta_l چیلنجز
نمونے لینے والے استفسار انڈیکس
استفسار نمونے لینے سے 32 بائٹ چیلنج ڈائجسٹز کو کھینچنا جاری رہتا ہے اور انہیں چھوٹی انڈیانا u64 ٹکڑوں کے طور پر پڑھتا ہے جب تک کہ اس میں مطلوبہ منفرد اشارے کی تعداد نہ ہو:
q=le64(digest chunk)modNeval
نمونے لینے والے سیٹ کو ترتیب کے مطابق واپس کیا جاتا ہے۔
AIR ساخت کھولنے کو R_air_composition کے تحت تصدیق کرنا ضروری ہے۔ پھر FRI سلسلہ اسی A_q سے شروع ہوتا ہے اور ٹرمینل FRI جڑ کے نیچے ایک تصدیق شدہ حتمی FRI صفحے میں ختم ہونا چاہئے۔
ٹریس بنانے سے پہلے ، FastPQ پروور منتقلی کی کلید ، آپریشن رینج اور داخل کرنے کے آرڈر کے ذریعہ بیچ آرڈر کو کینونائز کرتا ہے۔ ٹرانسفر لائنوں میں ٹرانسکرپٹ میٹا ڈیٹا کی بھی ضرورت ہوتی ہے۔ ایک بیچ جس میں ٹرانسپیر لائنیں ہیں لیکن کوئی ٹرانسفارٹ ٹرانسکریپٹ موجود نہیں ہے وہ غلط ہے۔
ٹرانسفر ٹرانسکرپٹ کے لئے، پروور سائیڈ چیک میں شامل ہیں:
بھیجنے والے کے توازن کو کم بہاؤ نہیں ہونا چاہئے
sender_after برابر ہونا چاہئے sender_before - amount
receiver_after برابر ہونا چاہئے receiver_before + amount
ٹرانسکرپٹ کو بیچ میں ہر منتقلی کی قطار پر مشتمل ہونا چاہئے۔
ایک واحد ڈیلٹا پوزیڈون ڈائجسٹ ، جب موجود ہو تو ، ٹرانسکرپٹ پری امیج سے ملنا چاہئے
اس صورت میں شاذ و نادر مرکل ثبوتوں کو ورژن 1 کے طور پر ڈیکوڈ کرنا ہوگا؛ لاپتہ راستے deterministic synthetic proofs سے بھرے جاتے ہیں.
ٹریس میں ٹرانسفر ، مائنٹ ، برن ، رول گرانٹ ، رول منسوخی ، میٹا ڈیٹا سیٹ ، اور اجازت تلاش کرنے کی قطاروں کے لئے سلیکٹر کالم شامل ہیں۔ عددی آپریشن لائنز میں دستخط شدہ ڈیلٹا بھی ہوتے ہیں ، ہر اثاثہ پر چلنے والے ڈیلٹا اور سپلائی کاؤنٹرز۔
irohad شروع ہونے پر FastPQ prover lane کو شروع کرتا ہے اگر پروور بیک اینڈ کو ابتدائی بنایا جاسکتا ہے۔ لین ایک محدود قطار کے ساتھ پس منظر کا کام ہے۔ ایک بلاک کے عملدرآمد کے گواہ کی پیداوار کرنے کے بعد ، commit path ایک پروور ٹاسک پیش کرتا ہے جس میں بلاک ہیش ، اونچائی ، نقطہ نظر اور گواہ شامل ہیں۔
اگر لین کام نہیں کررہا ہے یا قطار بھری ہوئی ہے تو ، نوکری کو چھوڑ دیا جاتا ہے اور عام بلاک پروسیسنگ جاری رہتی ہے۔ اس کا مطلب یہ ہے کہ پس منظر پروور لین ٹرانزیکشن ایڈمیشن یا کنسنس گیٹ نہیں ہے۔ یہ پہلے ہی عمل میں لایا گیا ریاست پر ثبوت کی پیداوار کا راستہ ہے۔
لین ایک پروور کی تعمیر کرتا ہے جس میں:
text
parameter = "fastpq-lane-balanced"execution_mode = auto | cpu | gpuposeidon_mode = auto | cpu | gpu
auto پروفیسر کو دستیاب بیک اینڈ کا انتخاب کرنے دیتا ہے۔ cpu پن عملدرآمد کے لئے CPU. gpu ترجیحات GPU عمل درآمد، کے ساتھ CPU fallback جہاں بیک اینڈ مطلوبہ kernels استعمال نہیں کر سکتے ہیں.
FastPQ ثبوت کی توثیق کینیکل بیچ کے وعدے کو دوبارہ بناتی ہے اور عوامی ٹرانسکرپٹ کو تبدیل کرتی ہے۔ تصدیق کنندہ پروٹوکول ورژن ، پیرامیٹر سیٹ ورژن ، ری پلے کی حدود ، سراغ لگانے کا عہد ، عوامی ان پٹس ، نمونے لینے والے میرکل اوپننگز ، AIR اوپننگس ، اور FRI استفسار چین کی جانچ پڑتال کرتا ہے۔
Nexus AXT ثبوت لفافوں میں ایک AxtFastpqBinding شامل کیا جا سکتا ہے. جب RegisterVerifiedLaneRelay انجام دیتا ہے، Iroha:
لین ریلے لفافہ اور FastPQ پروف مواد کی تصدیق کرتا ہے
اعداد و شمار کی جگہ اور ظاہر جڑ کو چیک کرتا ہے
AXT ثبوت لفافہ کو ڈیکوڈ کرتا ہے
ایک fastpq_binding کی ضرورت ہے
FastPQ بیچ کو اس پابند سے دوبارہ تعمیر کرتا ہے
Embedded proof FastPQ کو ڈیکوڈ کریں
FastPQ تصدیق کنندہ کو دوبارہ تعمیر شدہ بیچ اور ثبوت پر کال کرتا ہے
اگر تصدیق کامیاب ہو جاتی ہے تو، Iroha ایک VerifiedLaneRelayRecord ذخیرہ کرتا ہے جس میں ریلے حوالہ، اصل لفافہ، ثبوت مفید بوجھ ہیش، تصدیق کی اونچائی، manifest root، اور FastPQ binding شامل ہیں.
لین ریلے لفافوں میں کمپیکٹ FastPQ ثبوت کا مواد بھی ہوتا ہے۔ اس مواد میں لین آئی ڈی ، ڈیٹا اسپیس آئی ڈی ، بلاک اونچائی ، تصدیق کی اونچائی، بلاک ہیڈر ہیش ، سیٹمنٹ ہیش ، اور مانیٹری جڑ پر ڈائجسٹ شامل ہیں۔ ریلے کو صرف اس صورت میں ضم کیا جاسکتا ہے جب اس کے پاس QC اور درست FastPQ ثبوت کا مواد موجود ہو۔
کے لئے Nexus AXT لفافے، AxtFastpqBinding ثبوت دوبارہ کھیلنے سے پہلے canonicalized ہے. خالی پیرامیٹر اقدار ڈیفالٹ کے لئے fastpq-lane-balanced; خالی تصدیق کنندہ کی شناخت اور ورژن ڈیفالٹ fastpq اور v1; دعوے کی قسم کاٹ دی گئی ہے اور کم درجہ بندی کی گئی ہے۔
authorization دعوے میں رول گرانٹ لائن داخل کی جاتی ہے:
role_id=claim_digest
permission_id=witness_commitment
epoch=le64(policy_commitment[0..8])
compliance کا دعویٰ دو میٹا ڈیٹا صفوں کو داخل کرتا ہے: ایک پالیسی کے لئے اور دوسرا ہدف والے ڈیٹا بیس کے لئے۔
tx_predicate اور value_conservation کے لئے، ایک واضح اثر کی مقدار کا استعمال کیا جاتا ہے جب پابندیاں ایک مثبت ذریعہ یا منزل مقصود مقدار پر مشتمل ہوتی ہیں. دوسری صورت میں کوڈ ایک محدود تعیناتی مقدار سے اخذ کرتا ہے:
SCCP ہیلپر خانہ شفاف کراس چین پیغام پروف کے لئے بھی FastPQ کا استعمال کرتا ہے۔ یہ راستہ irohad پس منظر پروور لین سے الگ ہے۔ یہ ایک FastPQ بیچ کو براہ راست SCCP پیغام ثبوت بنڈل اور manifesto سے تعمیر کرتا ہے، پھر کھلی تصدیق کے لئے نتیجہ ثابت لفافہ.
SCCP بیچ میں fastpq-lane-balanced اور تین میٹا ڈیٹا منتقلی کا استعمال کیا جاتا ہے:
کلید
آپریشن
sccp:transparent:v1:statement
MetaSet
sccp:transparent:v1:context
MetaSet
sccp:transparent:v1:payload
MetaSet
اس کے عوامی ان پٹ کو SCCP شفاف اندرونی ثبوت سے حاصل کیا جاتا ہے:
FastPQ اندراج
SCCP ذریعہ
dsid
پہلے 16 بائٹس کے ایک Blake2b ہضم بیان ہیش پر
slot
اختتام کی اونچائی
old_root
پےلوڈ ہیش
new_root
عزم کی جڑ
perm_root
حتمی بلاک ہیش
tx_set_hash
بیان ہاش
SCCP کینونیکل کوڈر انٹیجرز کو چھوٹا سا اینڈین لکھتے ہیں اور متغیر لمبائی بائٹ صفوں کو کوڈ کرتے ہیں:
خام FastPQ ثبوت ہے Norito-کوڈ میں ایک StarkFriOpenProofV1, اس کے بعد ایک میں لپیٹا OpenVerifyEnvelope بیک اینڈ کے ساتھ Stark. SCCP تصدیق ایک ہی تعمیر کرتا ہے FastPQ بنڈل اور دستاویز سے بیچ، کھلی تصدیق لفافہ میٹا ڈیٹا کی جانچ پڑتال کرتا ہے، اور کال FastPQ دوبارہ تعمیر شدہ بیچ پر تصدیق کنندہ اور ثبوت۔
کینونیکل پیرامیٹرز کیٹلاگ میں دو پیرامیٹر سیٹوں کو بے نقاب کیا گیا ہے۔ میزبان پروور لین فی الحال fastpq-lane-balanced کا استعمال کرتا ہے۔
پیرامیٹر
مقصد
فیلڈ
ہاشس
FRI
fastpq-lane-balanced
متوازن پروور آؤٹ پٹ
Goldilocks مربع توسیع
Poseidon2 کے وعدے، کیٹلاگ SHA3 لیبل
آرٹی 8، دھماکے 8، 46 سوالات
fastpq-lane-latency
تاخیر سے متعلق حساس راستوں
Goldilocks مربع توسیع
Poseidon2 کے وعدے، کیٹلاگ SHA3 لیبل
arity 16، blowup 16, 34 سوالات
دونوں 128-بٹ سیکورٹی کو نشانہ بنانے اور ایک ٹریس ڈومین سائز کا استعمال کرتے ہیں 2^16. انگریزی میں Rust V1 ٹرانسکرپٹ ری پلے کوڈ فی الحال Fiat-Shamir چیلنج بائٹس کے ساتھ حاصل iroha_crypto::Hash::new براہ راست حوالہ دینے کے بجائے SHA3-256.
Rust پروور کے ذریعہ استعمال ہونے والے قطعی کیٹلاگ constants یہ ہیں: