آموزش وب ۳ بخش 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
sha3Raw
sha3 ورودی را محاسبه میکند، اما اگر مثلاً یک رشته خالی ارسال شود، به جای null، مقدار هش را برمیگرداند.
soliditySha3
sha3 پارامترهای ورودی داده شده را به همان روش سالیدیتی محاسبه می کند. این بدان معناست که آرگومانها قبل از هش شدن، تبدیل به ABI میشوند و کاملا پکیج میشوند.
soliditySha3Raw
sha3 پارامترهای ورودی داده شده را به همان روش سالیدیتی محاسبه می کند. این بدان معناست که آرگومانها قبل از هش شدن، تبدیل به ABI میشوند و کاملا بستهبندی میشوند. تفاوت این تابع با تابع soliditySha3 در این است که اگر برای مثال یک رشته خالی داده شود، مقدار هش را به جای null برمی گرداند.
isHex
بررسی می کند که آیا یک رشته داده شده یک رشته HEX است.
isHexStrict
بررسی می کند که آیا یک رشته داده شده یک رشته HEX است. تفاوت web3.utils.isHex () این است که بررسی میکند HEX با 0x پیشوند شروع شود.
isAddress
بررسی می کند که آیا رشته داده شده یک آدرس اتریوم معتبر است یا خیر. اگر آدرس دارای حروف بزرگ و کوچک باشد، حروف بزرگ و کوچک را نیز بررسی میکند.
toChecksumAddress
آدرس اتریوم با حروف بزرگ یا کوچک را به آدرس چکسام تبدیل میکند.
checkAddressChecksum
web3.utils.checkAddressChecksum(address)
جمع چک یک آدرس داده شده را بررسی می کند. همچنین در آدرسهای غیر چک سام، false را برمیگرداند.