7个版本
0.2.4 | 2022年11月21日 |
---|---|
0.2.3 | 2022年2月20日 |
0.2.2 | 2021年11月5日 |
0.1.2 | 2021年11月3日 |
#359 in WebAssembly
305 每月下载量
用于 2 crates
23KB
532 行
bn.rs
bn.js 和 ethers.js BigNumber 绑定,支持 primitive-types
编写使用bn.js和ethers.js BigNumber数字的Rust代码
use primitive_types::{H160, U128};
use wasm_bindgen::prelude::*;
use bn_rs::{BigNumber, BN};
#[wasm_bindgen]
pub fn sum(a: BigNumber, b: BN) -> Result<BigNumber, JsValue> {
// `BigNumberError` and `BNError` implement `Into<JsValue>`, so we can use `?` here
let a = i128::try_from(a)?; // std uints are supported
let b: U128 = b.try_into()?; // primitive-types uints supported too
let result = a + b.as_u128() as i128;
Ok(result.into())
}
#[wasm_bindgen]
pub fn is_dead(target_hash: BN, dead_hash: BigNumber) -> Result<bool, JsValue> {
// primitive-types hashes supported too
let hash = H160::try_from(target_hash)?;
let dead = H160::try_from(dead_hash)?;
Ok(hash == dead)
}
从JavaScript调用它
import {sum, is_dead} from './pkg'
import BN from 'bn.js'
import {BigNumber} from "@ethersproject/bignumber"
// Initialize bn.js and ethers.js BigNumber numbers
const a = BigNumber.from(2 ** 26)
const b = new BN(2 ** 26, 10)
const hash = new BN('dead', 'hex')
const dead = BigNumber.from('0xdead')
// Call Rust code with both BN and BigNumber passed and returned
console.log(sum(a, b)) // == BigNumber.from(4)
console.log(is_dead(hash, dead)) // == true
运行示例
$ cd example
$ yarn
$ yarn start
依赖项
~1.2–2.2MB
~40K SLoC