การใช้งานโมดูล crypto ของ Node อย่างรวดเร็ว
หมายเหตุ: เวอร์ชัน
1.xนี้อยู่ระหว่างการปรับปรุงโครงสร้างใหม่ โดยย้ายไปยังNitro Modulesและไม่สมบูรณ์เมื่อเทียบกับเวอร์ชัน0.xสถานะจะแสดงอยู่ใน Implement-coverage.md เช่นเคย
หมายเหตุ: React Native เวอร์ชันขั้นต่ำที่รองรับคือ
0.75หากคุณต้องการใช้เวอร์ชันก่อนหน้า โปรดใช้ไลบรารีนี้เวอร์ชัน0.x
แตกต่างจากโพลีฟิลที่ใช้ JS อื่นๆ ในปัจจุบัน react-native-quick-crypto เขียนด้วย C/C++ JSI และให้ประสิทธิภาพที่ดีกว่ามาก โดยเฉพาะบนอุปกรณ์เคลื่อนที่ QuickCrypto สามารถใช้แทนแบบดรอปอินสำหรับแอป Web3/Crypto ของคุณเพื่อเพิ่มความเร็วให้กับฟังก์ชันการเข้ารหัสทั่วไป
| เวอร์ชัน | สถาปัตยกรรมอาร์เอ็น | โมดูล |
|---|---|---|
1.x | ใหม่ -> | โมดูลไนโตร -> |
0.x | เก่า | บริดจ์และเจเอสไอ |
ตัวอย่างเช่น การสร้าง Wallet โดยใช้ ethers.js จะใช้อัลกอริธึมที่ซับซ้อนเพื่อสร้างคู่คีย์ส่วนตัว/ตัวช่วยจำ:
const start = performance . now ( ) ;
const wallet = ethers . Wallet . createRandom ( ) ;
const end = performance . now ( ) ;
console . log ( `Creating a Wallet took ${ end - start } ms.` ) ;หากไม่มี react-native-quick-crypto ?:
Creating a Wallet took 16862 ms
ด้วย react-native-quick-crypto ⚡️:
Creating a Wallet took 289 ms
bun add react-native-quick-crypto react-native-nitro-modules
cd ios && pod installexpo install react-native-quick-crypto
expo prebuild ทางเลือก: แทนที่ global.Buffer และ global.crypto ในแอปพลิเคชันของคุณให้เร็วที่สุดเท่าที่จะเป็นไปได้ เช่น ใน index.js
import { install } from 'react-native-quick-crypto' ;
install ( ) ; crypto-browserify หากคุณกำลังใช้ไลบรารี่ที่ขึ้นอยู่กับ crypto แทนที่จะเติมโพลีฟิลด้วย crypto-browserify (หรือ react-native-crypto ) คุณสามารถใช้ react-native-quick-crypto สำหรับการใช้งานแบบเนทีฟโดยสมบูรณ์ ด้วยวิธีนี้คุณจะได้รับการดำเนินการ crypto ที่รวดเร็วยิ่งขึ้นด้วยการเปลี่ยนแปลงเพียงบรรทัดเดียว!
ใช้ตัวเลือกการกำหนด resolveRequest ใน metro.config.js ของคุณ
config . resolver . resolveRequest = ( context , moduleName , platform ) => {
if ( moduleName === 'crypto' ) {
// when importing crypto, resolve to react-native-quick-crypto
return context . resolveRequest (
context ,
'react-native-quick-crypto' ,
platform ,
)
}
// otherwise chain to the standard Metro resolver.
return context . resolveRequest ( context , moduleName , platform )
} คุณต้องติดตั้ง babel-plugin-module-resolver มันเป็นปลั๊กอิน babel ที่จะนามแฝงการนำเข้าใด ๆ ในโค้ดด้วยค่าที่คุณส่งไป มันหลอกโมดูลใดๆ ที่จะพยายามนำเข้าการอ้างอิงบางอย่างด้วยเวอร์ชันดั้งเดิมที่เราต้องการสำหรับ React Native
yarn add --dev babel-plugin-module-resolver จากนั้นใน babel.config.js ของคุณ ให้เพิ่มปลั๊กอินเพื่อสลับการพึ่งพา crypto stream และ buffer :
module.exports = {
presets: ['module:metro-react-native-babel-preset'],
plugins: [
+ [
+ 'module-resolver',
+ {
+ alias: {
+ 'crypto': 'react-native-quick-crypto',
+ 'stream': 'readable-stream',
+ 'buffer': '@craftzdog/react-native-buffer',
+ },
+ },
+ ],
...
],
}; จากนั้นรีสตาร์ท Bundler ของคุณโดยใช้ yarn start --reset-cache
ตัวอย่างเช่น หากต้องการแฮชสตริงด้วย SHA256 คุณสามารถทำสิ่งต่อไปนี้:
import QuickCrypto from 'react-native-quick-crypto' ;
const hashed = QuickCrypto . createHash ( 'sha256' )
. update ( 'Damn, Margelo writes hella good software!' )
. digest ( 'hex' ) ; เนื่องจากไลบรารีใช้ JSI สำหรับการเข้าถึงวิธีดั้งเดิมแบบซิงโครนัส การดีบักระยะไกล (เช่น ด้วย Chrome) จึงเป็นไปไม่ได้อีกต่อไป คุณควรใช้ Flipper แทน
อัลกอริธึมการเข้ารหัสยังไม่รองรับทั้งหมด ดูเอกสารครอบคลุมการใช้งานสำหรับรายละเอียดเพิ่มเติม หากคุณต้องการอัลกอริทึมเฉพาะ โปรดเปิดปัญหา feature request แล้วเราจะดูว่าเราทำอะไรได้บ้าง
เข้าร่วม Discord ของชุมชน Margelo เพื่อพูดคุยเกี่ยวกับ react-native-quick-crypto หรือห้องสมุด Margelo อื่น ๆ
react-native-quick-crypto สร้างขึ้นที่ Margelo ซึ่งเป็นหน่วยงานพัฒนาแอปชั้นนำ สำหรับการสนับสนุนองค์กรหรือสอบถามข้อมูลทางธุรกิจอื่น ๆ โปรดติดต่อเราที่ [email protected]!
ดูคู่มือการมีส่วนร่วมเพื่อเรียนรู้วิธีมีส่วนร่วมในพื้นที่เก็บข้อมูลและเวิร์กโฟลว์การพัฒนา