การใช้งานโมดูล 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 install
expo 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]!
ดูคู่มือการมีส่วนร่วมเพื่อเรียนรู้วิธีมีส่วนร่วมในพื้นที่เก็บข้อมูลและเวิร์กโฟลว์การพัฒนา