• تهران -خیابان شریعتی - بالاتر از سه راه ملک - روبروی آتش نشانی - آرتارسانه
  • تلفن تماس: 02191303424

آموزش وب ۳ بخش web3.utils

آموزش وب ۳ بخش web3.utils

این بسته توابع کاربردی را برای dapps اتریوم و سایر بسته‌های web3.js فراهم می‌کند.

فیلترهای بلوم چیست؟


فیلتر بلوم یک ساختار داده احتمالی و فضا کارآمد است که برای بررسی سریع عضویت مجموعه استفاده می شود.

تصور کنید که مجموعه بزرگی از داده‌ها داریم و می‌خواهیم بتوانیم به سرعت آزمایش کنیم که آیا در حال حاضر عنصری در آن مجموعه وجود دارد یا خیر. روش ساده بررسی ممکن است این باشد که مجموعه را پرس و جو کنیم تا ببینیم آیا عنصر ما در آنجا است یا خیر. اگر مجموعه داده های ما نسبتاً کوچک باشد، احتمالاً خوب است. متأسفانه، اگر مجموعه داده‌های ما واقعاً بزرگ باشد، این جستجو ممکن است کمی طول بکشد. خوشبختانه، ما ترفندهایی برای سرعت بخشیدن به کارها در دنیای اتریوم داریم!

فیلتر bloom یکی از این ترفندها است. ایده اصلی پشت فیلتر بلوم این است که هر عنصر جدیدی را که وارد مجموعه داده می‌شود هش کند، بیت‌های خاصی را از این هش بگیرد و سپس از آن بیت‌ها برای پر کردن بخش‌هایی از یک آرایه بیت با اندازه ثابت استفاده کند (مثلاً بیت‌های خاصی را روی 1 تنظیم کنید. ). این آرایه بیتی فیلتر bloom نامیده می شود.

بعداً، وقتی می‌خواهیم بررسی کنیم که آیا عنصری در مجموعه وجود دارد یا خیر، به سادگی عنصر را هش می‌کنیم و بررسی می‌کنیم که بیت‌های مناسب در فیلتر bloom قرار دارند. اگر حداقل یکی از بیت ها 0 باشد، قطعاً عنصر در مجموعه داده ما نیست! اگر همه بیت ها 1 باشند، ممکن است عنصر در مجموعه داده ها باشد، اما برای اطمینان باید در واقع پایگاه داده را پرس و جو کنیم. بنابراین ممکن است جواب مثبت کاذب داشته باشیم، اما هرگز جواب منفی کاذب نخواهیم داشت. این می تواند تا حد زیادی تعداد پرس و جوهای پایگاه داده را که باید انجام دهیم کاهش دهد.

مثال در اتریوم واقعی

یک مثال واقعی اتریوم که در آن مفید است، این است که می‌خواهید موجودی کاربران را در هر بلوک جدید به‌روزرسانی کنید تا تا حد امکان به زمان واقعی نزدیک شود. بدون استفاده از فیلتر بلوم در هر بلوک جدید، شما باید تعادل را مجبور کنید حتی اگر آن کاربر هیچ فعالیتی در آن بلوک نداشته باشد. اما اگر از logBlooms از بلوک استفاده می‌کنید، می‌توانید قبل از انجام عملیات آهسته‌تر، فیلتر bloom را در برابر آدرس اتریوم کاربران آزمایش کنید، این امر به‌طور چشمگیری میزان connection هایی را که انجام می‌دهید کاهش می‌دهد، زیرا تنها در صورت انجام آن اتریوم، آن عملیات اضافی را انجام خواهید داد. آدرس در آن بلوک است (منهای نتیجه مثبت کاذب که قابل چشم پوشی خواهد بود). این برای برنامه شما بسیار کارآمد خواهد بود.

توابع utils در وب ۳

web3.utils.isBloom

web3.utils.isUserEthereumAddressInBloom

web3.utils.isContractAddressInBloom

web3.utils.isTopic

web3.utils.isTopicInBloom

web3.utils.isInBloom

 

web3.utils.isBloom

isBloom

isBloom(bloom: string): boolean;

اگر یک بلوم معتبر باشد، true را برمی‌گرداند.

isUserEthereumAddressInBloom

isUserEthereumAddressInBloom(bloom: string, ethereumAddress: string): boolean;

اگر آدرس کاربران اتریوم بخشی از bloom  باشد، true برمی گرداند: موارد مثبت اشتباه امکان پذیر است.

isContractAddressInBloom

isContractAddressInBloom(bloom: string, contractAddress: string): boolean;

اگر آدرس قرارداد بخشی از داده بلوم باشد، true را برمی گرداند: موارد مثبت نادرست ممکن است.

isTopic

isTopic(topic: string): boolean;

اگر موضوع معتبر باشد، true را برمی‌گرداند.

isTopicInBloom

isTopicInBloom(bloom: string, topic: string): boolean;

اگر موضوع بخشی از bloom note  باشد، true را برمی گرداند: موارد مثبت کاذب امکان پذیر است.

isInBloom

این روش پایه خام است که سایر روش های bloom استفاده می کنند. شما می توانید در یک bloom و مقداری که اگر بخشی از bloom  داده شده باشد true برمی گرداند.

isInBloom(bloom: string, value: string | Uint8Array): boolean;

اگر مقدار بخشی از bloom note     باشد، مقدار true را برمی گرداند: مثبت کاذب ممکن است.

web3.utils.randomHex(size)

کتابخانه randomHex برای تولید رشته های HEX شبه تصادفی رمزنگاری قوی با اندازه بایت معین.

BN

کتابخانه BN.js برای محاسبه اعداد بزرگ در جاوا اسکریپت. 

برای تبدیل ایمن انواع مختلف، از جمله BigNumber.js از utils.toBN استفاده کنید

npm install --save bn.js

توضیحات بیشتر در مستندات گیت هاب قابل مطالعه است.

isBN

بررسی می کند که آیا یک مقدار داده شده یک نمونه BN.js است یا خیر.

isBigNumber

بررسی می کند که آیا یک مقدار داده شده یک نمونه BigNumber.js است یا خیر.

sha3

رمز نگاری sha3 ورودی را محاسبه خواهد کرد.

sha3Raw

sha3 ورودی را محاسبه می‌کند، اما اگر مثلاً یک رشته خالی ارسال شود، به جای null، مقدار هش را برمی‌گرداند.

soliditySha3

sha3 پارامترهای ورودی داده شده را به همان روش سالیدیتی محاسبه می کند. این بدان معناست که آرگومان‌ها قبل از هش شدن، تبدیل به ABI می‌شوند و کاملا پکیج می‌شوند.

web3.utils.soliditySha3(‘hello’, ‘world01’)
// “0xfb0a9d38c4dc568cbd105866540986fabf3c08c1bfb78299ce21aa0e5c0c586b”
web3.utils.soliditySha3({ type: ‘string’, value: ‘helloworld’ }, { type: ‘string’, value: ’01’ })
// “0xfb0a9d38c4dc568cbd105866540986fabf3c08c1bfb78299ce21aa0e5c0c586b”
web3.utils.soliditySha3({ type: ‘string’, value: ‘hell’ }, { type: ‘string’, value: ‘oworld’ }, { type: ‘uint16’, value: 0x3031 })
// “0xfb0a9d38c4dc568cbd105866540986fabf3c08c1bfb78299ce21aa0e5c0c586b”
web3.utils.soliditySha3({ type: ‘uint96’, value: ‘32309054545061485574011236401’ })
// “0xfb0a9d38c4dc568cbd105866540986fabf3c08c1bfb78299ce21aa0e5c0c586b”
web3.utils.soliditySha3(‘234564535’, ‘0xfff23243’, true, -10);
// auto detects: uint256, bytes, bool, int256
//> “0x3e27a893dc40ef8a7f0841d96639de2f58a132be5ae466d40087a2cfa83b7179”
 
web3.utils.soliditySha3(‘Hello!%’);
 
// auto detects: string
//”0x661136a4267dba9ccdf6bfddb7c00e714de936674c4bdb065a531cf1cb15c7fc”
web3.utils.soliditySha3(‘234’);
// auto detects: uint256
//”0x61c831beab28d67d1bb40b5ae1a11e2757fa842f031a2d0bc94a7867bc5d26c2″
web3.utils.soliditySha3(0xea);
// same as above
//”0x61c831beab28d67d1bb40b5ae1a11e2757fa842f031a2d0bc94a7867bc5d26c2″
web3.utils.soliditySha3(new BN(‘234’));
// same as above
//”0x61c831beab28d67d1bb40b5ae1a11e2757fa842f031a2d0bc94a7867bc5d26c2″
web3.utils.soliditySha3({ type: ‘uint256’, value: ‘234’ })); // same as above
//”0x61c831beab28d67d1bb40b5ae1a11e2757fa842f031a2d0bc94a7867bc5d26c2″
web3.utils.soliditySha3({ t: ‘uint’, v: new BN(‘234’) })); // same as above
//”0x61c831beab28d67d1bb40b5ae1a11e2757fa842f031a2d0bc94a7867bc5d26c2″
web3.utils.soliditySha3(‘0x407D73d8a49eeb85D32Cf465507dd71d507100c1’);
//”0x4e8ebbefa452077428f93c9520d3edd60594ff452a29ac7d2ccc11d47f3ab95b”
web3.utils.soliditySha3({ t: ‘bytes’, v: ‘0x407D73d8a49eeb85D32Cf465507dd71d507100c1’ });
//”0x4e8ebbefa452077428f93c9520d3edd60594ff452a29ac7d2ccc11d47f3ab95b” // same result as above
web3.utils.soliditySha3({ t: ‘address’, v: ‘0x407D73d8a49eeb85D32Cf465507dd71d507100c1’ });
//”0x4e8ebbefa452077428f93c9520d3edd60594ff452a29ac7d2ccc11d47f3ab95b” // same as above, but will do a checksum check, if its multi case
web3.utils.soliditySha3({ t: ‘bytes32’, v: ‘0x407D73d8a49eeb85D32Cf465507dd71d507100c1’ });
//”0x3c69a194aaf415ba5d6afca734660d0a3d45acdc05d54cd1ca89a8988e7625b4″ // different result as above
web3.utils.soliditySha3({ t: ‘string’, v: ‘Hello!%’ }, { t: ‘int8’, v: -23 }, { t: ‘address’, v: ‘0x85F43D8a49eeB85d32Cf465507DD71d507100C1d’ });
//”0xa13b31627c1ed7aaded5aecec71baf02fe123797fffd45e662eac8e06fbe4955″

soliditySha3Raw

sha3 پارامترهای ورودی داده شده را به همان روش سالیدیتی محاسبه می کند. این بدان معناست که آرگومان‌ها قبل از هش شدن، تبدیل به ABI می‌شوند و کاملا بسته‌بندی می‌شوند. تفاوت این تابع با تابع soliditySha3 در این است که اگر برای مثال یک رشته خالی داده شود، مقدار هش را به جای null برمی گرداند.

isHex

بررسی می کند که آیا یک رشته داده شده یک رشته HEX است.

isHexStrict

بررسی می کند که آیا یک رشته داده شده یک رشته HEX است. تفاوت web3.utils.isHex () این است که   بررسی  میکند  HEX با 0x پیشوند شروع شود.

isAddress

بررسی می کند که آیا رشته داده شده یک آدرس اتریوم معتبر است یا خیر. اگر آدرس دارای حروف بزرگ و کوچک باشد، حروف بزرگ و کوچک را نیز بررسی می‌کند.

toChecksumAddress

آدرس اتریوم با حروف بزرگ یا کوچک را به آدرس چک‌سام تبدیل می‌کند.

checkAddressChecksum

web3.utils.checkAddressChecksum(address)

جمع چک یک آدرس داده شده را بررسی می کند. همچنین در آدرس‌های غیر چک سام، false را برمی‌گرداند.