OSDN Git Service

big boom
[bytom/Bytom-JS-SDK.git] / src / wasm / func.js
1 import {LoadWasm} from "./go";
2 import Bytom from "../index";
3 import keysSDK from "../sdk/keys.js";
4
5 //wasm load val
6 window.wasmIsLoad = false;
7 window.wasmReceived = false;
8 window.AllFunc = {};
9
10 let AllFuncReceivedResolve;
11 let funcReceived = new Promise(resolve => {
12     AllFuncReceivedResolve = resolve;
13 });
14
15 window.setFuncOver = function() {
16     AllFuncReceivedResolve();
17 }
18 window.resetWasmStatus = function() {
19     window.wasmIsLoad = false;
20     window.wasmReceived = false;
21     funcReceived = new Promise(resolve => {
22         AllFuncReceivedResolve = resolve;
23     });
24 };
25
26 //wasm call js func getKeyByXPub
27 window.getKeyByXPub = function (XPub) {
28     let keys = new keysSDK();
29     let returnPromise = new Promise((resolve, reject) => {
30         keys.getKeyByXPub(XPub).then(res => {
31             resolve(res);
32         }).catch(error => {
33             reject(error);
34         });
35     });
36     return returnPromise;
37 };
38
39 export async function resetKeyPassword(data) {
40     await init();
41     let res = newWasmResult();
42     AllFunc.resetKeyPassword(data, res);
43     await res.wait;
44     if (res.hasOwnProperty('error')) {
45         throw new Error(res.error);
46     }
47     return res;
48 }
49
50 export async function createAccountReceiver(data) {
51     await init();
52     let res = newWasmResult();
53     AllFunc.createAccountReceiver(data, res);
54     await res.wait;
55     if (res.hasOwnProperty('error')) {
56         throw new Error(res.error);
57     }
58     return res;
59 }
60
61 export async function createAccount(data) {
62     await init();
63     let res = newWasmResult();
64     AllFunc.createAccount(data, res);
65     await res.wait;
66     if (res.hasOwnProperty('error')) {
67         throw new Error(res.error);
68     }
69     return res;
70 }
71
72 export async function createKey(data) {
73     await init();
74     let res = newWasmResult();
75     AllFunc.createKey(data, res);
76     await res.wait;
77     if (res.hasOwnProperty('error')) {
78         throw new Error(res.error);
79     }
80     return res;
81 }
82
83 export async function scMulBase(pri) {
84     await init();
85     let res = newWasmResult();
86     AllFunc.scMulBase(pri, res);
87     await res.wait;
88     if (res.hasOwnProperty('error')) {
89         throw new Error(res.error);
90     }
91     return res;
92 }
93
94 export function newWasmResult() {
95     let res = {};
96     res.wait = new Promise(function(resolve){
97         res.endFunc = resolve;
98     });
99     return res;
100 }
101
102 async function init() {
103     if (!window.wasmReceived) {
104         load();
105         await funcReceived;
106         window.wasmReceived = true;
107     }
108 }
109
110 function load(){
111     if(!window.wasmIsLoad) {
112         LoadWasm();
113         if (!WebAssembly.instantiateStreaming) { // polyfill
114             WebAssembly.instantiateStreaming = async (resp, importObject) => {
115                 const source = await (await resp).arrayBuffer();
116                 return await WebAssembly.instantiate(source, importObject);
117             };
118         }
119         const go = new Go();
120         let mod, inst;
121         WebAssembly.instantiateStreaming(fetch(Bytom.wasmPath), go.importObject).then(async (result) => {
122             mod = result.module;
123             inst = result.instance;
124             const run = go.run(inst);
125             window.wasmIsLoad = true;
126             // await run;
127         });
128     }
129 }