Help us understand the problem. What is going on with this article?

React Native Expoでiost.jsを読み込む

React Native Expoからiost.jsを読み込む方法です。

手順

1.必要なパッケージのインストール

npm install rn-nodeify -g
npm install --save crypto-browserify iost expo-random

2. crypto以外のstandard libraryをインストール

以下を実行してstandard libraryのReact Native版をインストールしてください。

rn-nodeify --install 'buffer,events,http,https,os,process,stream,tty,url,util,vm,zlib' --hack

ルートフォルダにshim.jsができるので、App.jsの先頭にimport文を追記します。

import './shim.js'

3. randomBytesをexpo-randomのgetRandomBytesAsyncに変える

tweetnaclフォルダのnacl-fast.jsを書き換えます。

以下の変更後のコードをnode_modules/tweetnacl/nacl-fast.jsと入れ替えてください。
https://gist.github.com/kosamit/fa678743be94fab49019611cf8360768#file-nacl-fast-js

node_modules/tweetnacl/nacl-fast.jsの変更内容

expo-randomのパッケージを読み込み、crypto.getRandomValuesをRandom.getRandomBytesAsyncに変えました。

差分↓

@@ -2363,24 +2363,24 @@
 (function() {
   // Initialize PRNG if environment provides CSPRNG.
   // If not, methods calling randombytes will throw.
+  var Random = require('expo-random');
   var crypto = typeof self !== 'undefined' ? (self.crypto || self.msCrypto) : null;
   if (crypto && crypto.getRandomValues) {
     // Browsers.
     var QUOTA = 65536;
-    nacl.setPRNG(function(x, n) {
+    nacl.setPRNG(async function(x, n) {
       var i, v = new Uint8Array(n);
       for (i = 0; i < n; i += QUOTA) {
-        crypto.getRandomValues(v.subarray(i, i + Math.min(n - i, QUOTA)));
+        await Random.getRandomBytesAsync(v.subarray(i, i + Math.min(n - i, QUOTA)));
       }
       for (i = 0; i < n; i++) x[i] = v[i];
       cleanup(v);
     });
   } else if (typeof require !== 'undefined') {
     // Node.js.
-    crypto = require('crypto');
-    if (crypto && crypto.randomBytes) {
-      nacl.setPRNG(function(x, n) {
-        var i, v = crypto.randomBytes(n);
+    if (true) {
+      nacl.setPRNG(async function(x, n) {
+        var i, v = await Random.getRandomBytesAsync(n);
         for (i = 0; i < n; i++) x[i] = v[i];
         cleanup(v);
       });

4. iost.jsを読み込む

使いたい場所で以下のコードでnode_modules/iost/indexを読み込んでください。
require('iost')とするとcryptoパッケージが読み込めないエラーが発生します。

import IOST from './node_modules/iost/index';

注意

1. rn-nodeifyで入れたパッケージは再インストールする必要がある場合がある

rn-nodeifyで入れたパッケージはたまに再インストールしなければいけない場合があります。
以下をpackage.jsonのscriptsに追記し、再起動したらnpm run postinstallを実行してください。

package.json
"scripts": {
    
    "postinstall": "rn-nodeify --install 'buffer,events,http,https,os,process,stream,tty,url,util,vm,zlib' --hack"
  },

2. bs58パッケージはIOSTから読み込む

bs58はrequireせずにimportしたIOSTから使ってください。

let bs58 = IOST.Bs58;
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした